TurboMind:高效推理引擎引领大语言模型新时代

在人工智能蓬勃发展的当下,大语言模型(LLM)已成为 AI 领域的明星技术。然而,随着模型规模的不断扩大,如何高效地进行推理成为了一个棘手的问题。面对这一挑战,一款名为 TurboMind 的高效推理引擎应运而生,为 LLM 的应用带来了新的可能。

TurboMind:FasterTransformer 的进化版

TurboMind 是基于英伟达的 FasterTransformer 研发而成的 LLM 推理引擎。它不仅继承了 FasterTransformer 的高效性,还在此基础上进行了多项创新和优化。其核心功能包括对 LLaMa 结构模型的支持、persistent batch 推理模式以及可扩展的 KV 缓存管理器。

架构创新:持久化批处理

TurboMind 引入了一种名为 “persistent batch” 的创新机制,这一机制在某些项目中也被称为 “continuous batching”。这种方法将对话式 LLM 的推理过程建模为一个持续运行的批处理,其生命周期贯穿整个服务过程。

具体实现方式如下:

  1. 预先准备 N 个批处理槽位(batch slots)。
  2. 当有空闲槽位时,新的请求会被加入到批处理中。
  3. 请求对应的 tokens 生成完毕后,相应的槽位立即释放,准备接收新的请求。
  4. 当一个序列命中缓存时,其历史 token 无需在每轮中重新解码,从而实现即时的 token 生成。
  5. 整个批处理会自动扩缩容,以避免不必要的计算资源浪费。

这种机制大大提高了模型的推理效率,使得 TurboMind 能够更好地应对高并发的推理需求。

内存管理的突破:KV 缓存管理器

TurboMind 的另一个亮点是其独特的 KV 缓存管理器。这个管理器本质上是一个内存池类型的对象,巧妙地结合了 LRU(最近最少使用)算法的实现。这使得整个管理器可以被视为一个 “KV 缓存的缓存”。

KV 缓存管理器的工作原理如下:

  1. 管理器根据预先配置的槽位数量分配 KV 缓存空间。
  2. 每个槽位对应一个序列所需的 KV 缓存。
  3. 内存块的分配可以通过配置实现预分配或按需分配。
  4. 当缓存池中没有空闲槽位时,管理器会根据 LRU 机制踢除最近使用最少的序列,将其占用的槽位分配给新的请求。
  5. 被踢除的序列不会被完全删除,而是转换为最简洁的形式(如 token IDs)。
  6. 当再次获取到相同的序列 ID 时,这些 token IDs 将被 FMHA 的 context decoder 解码并转回 KV 缓存。

这种设计使得 TurboMind 能够高效地管理内存资源,从用户的角度来看,使用 TurboMind 的系统就像是可以访问无限的设备内存一样。

LLaMa 模型的优化实现

TurboMind 对 LLaMa 系列模型的实现是在 FasterTransformer 的 Gpt-NeX 模型基础上进行修改和优化的。除了基本的重构和修改外,TurboMind 还引入了多项改进,以实现会话模型的高性能推理:

  1. 支持多轮对话中的快速文本解码:使用基于 cutlass 的 FMHA 实现替代了 context decoder 中的注意力机制,支持 Q/K 长度不匹配的情况。

  2. 引入间接缓冲指针:在 context FMHA 和 generation FMHA 中加入间接缓冲指针,支持批处理中不连续的 KV 缓存。

  3. 新的同步机制:为支持 persistent batch 的并发推理,设计了新的同步机制,协调张量并行模式下的工作线程。

  4. INT8 KV cache 实现:降低内存开销,提高批处理大小和系统吞吐量。这在实际应用中尤其有用,因为 KV cache 通常比权重和其他激活消耗更多的内存和内存带宽。

  5. 解决 NCCL 卡住问题:解决了单个进程内多个模型实例在张量并行(TP)模式下运行时 NCCL 卡住的问题。NCCL APIs 现由主机端的同步障碍保护。

这些优化使得 TurboMind 在处理 LLaMa 系列模型时表现出色,大大提升了推理效率和性能。

API 设计:灵活与高效并重

TurboMind 的 Python API 支持流式结果返回和张量并行模式,为开发者提供了灵活而高效的接口。这使得开发者可以更方便地集成 TurboMind 到自己的应用中,充分发挥其高性能推理的优势。

TurboMind vs FasterTransformer:精简与专注

虽然 TurboMind 是基于 FasterTransformer 开发的,但两者还是存在不少差异。TurboMind 去除了 FasterTransformer 中的一些功能,包括前缀提示词、beam search、上下文嵌入、稀疏化 GEMM 操作以及对 GPT 或 T5 等结构模型的支持。这种"减法"使得 TurboMind 更加专注于 LLaMa 结构模型的高效推理,从而在特定场景下实现更优的性能。

兼容性探讨:Hugging Face 模型的支持

值得注意的是,TurboMind 的权重设计是基于 LLaMa 的官方实现完成的,两者仅相差一个转置操作。然而,Hugging Face 版本的实现采用了另一种形式。为了解决这一兼容性问题,TurboMind 在 deploy.py 文件中进行了适配处理,主要涉及 W_qW_k 的差异处理。这一设计使得 TurboMind 能够更好地支持来自不同来源的模型权重。

结语:TurboMind 开启 LLM 推理新纪元

TurboMind 作为一款高效的 LLM 推理引擎,通过其创新的 persistent batch 机制、智能的 KV 缓存管理以及对 LLaMa 模型的优化实现,为大语言模型的应用带来了新的可能。它不仅提高了推理效率,还在内存管理和并发处理方面做出了重要突破。

随着 AI 技术的不断发展,像 TurboMind 这样的高效推理引擎将扮演越来越重要的角色。它们将帮助开发者和企业更好地部署和应用大语言模型,推动 AI 技术在各个领域的落地应用。我们有理由相信,TurboMind 的出现将为 LLM 的发展注入新的动力,开启人工智能新的篇章。


参考文献:

  1. InternLM. (2023). TurboMind 框架. GitHub. https://github.com/InternLM/lmdeploy/blob/main/docs/zh_cn/inference/turbomind.md
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步子哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值