# 异步连续批处理:让 LLM 推理的 GPU 利用率逼近 100%

4 min read
Table of Contents

背景

大型语言模型的推理成本是部署的关键瓶颈。以 H200 GPU 为例,Inference Endpoints 上的价格为每小时约 5 美元,但若连续使用一天,费用可达 120 美元。为了充分利用 GPU,研究人员开发了连续批处理(Continuous Batching)技术,通过动态将请求打包成密集批次,避免了填充浪费。然而,连续批处理默认是同步的:CPU 和 GPU 交替工作,导致双方均有空闲时间。

Hugging Face 团队在最新博客中分析了这种同步模式的低效,并提出了异步批处理(Asynchronous Batching)方法,旨在让 CPU 和 GPU 同时工作,使 GPU 持续处于计算状态,从而提升吞吐量。

核心内容分析

同步批处理的隐藏浪费

在同步连续批处理循环中,每个步骤包含以下阶段:CPU 选择请求、更新 KV 缓存、驱逐已完成的请求并接纳新请求,然后将准备好的输入传输到 GPU;GPU 执行前向传播并采样新 token,再将结果返回给 CPU。问题在于:当 GPU 计算时,CPU 空闲;当 CPU 更新时,GPU 空闲。尽管单个前向传播的时间很短,但在每秒数百步的连续批处理循环中,这些空闲间隙累积起来可占近 25% 的总运行时间。

异步批处理的实现思路

异步批处理的核心是解耦 CPU 批次准备与 GPU 批次计算。具体而言,可以将批次准备和结果处理(采样、状态更新)作为独立的任务,在 GPU 计算的同时,CPU 预先准备下一个批次的数据。这类似于生产者-消费者模式,使用双缓冲或多缓冲机制,确保 GPU 始终有数据可用。

实现中需要考虑几个关键技术点:1)如何在不增加延迟的情况下将准备数据提前,2)如何管理 KV 缓存的并发访问,3)采样操作可以部分卸载到 GPU 或异步执行。博客中给出的数据显示,通过异步化,可以有效填补空闲间隙,使 GPU 利用率接近 100%。

行业影响与专业点评

异步批处理是 LLM 推理引擎优化的重要方向。目前主流推理框架(如 vLLM、TGI)均已实现连续批处理,但同步模式仍是默认选项。Hugging Face 提出的方案为框架开发者提供了明确的优化路径:分离 CPU 和 GPU 工作,甚至可以将采样等任务也异步化。这对于需要高吞吐量的生产环境意义重大,因为减少 GPU 空闲直接降低了单位 token 的成本。随着模型规模持续增长,推理效率的每一点提升都会转化为可观的成本节省。未来,我们可能会看到更多推理引擎采用异步调度,甚至结合流水线并行将解耦粒度进一步提升。


来源

My avatar

文章看完了,不打算去别的篇章转转吗?👀 感谢你的耐心阅读!如果你有问题想探讨,或者发现了文中的 Bug,请务必通过页脚的链接联系我


More Posts

Comments