一句话定义
Continuous Batching(连续批处理)是在每个解码迭代检查请求:完成的请求退出,新请求立刻补位,而不是等一整批全部结束再换下一批。
为什么需要它
Static Batching 要等最长请求结束,短请求结束后 GPU 仍空等,吞吐浪费。在线服务请求长度差异很大,动态批处理能让 GPU 持续有活干。
怎么工作
- Static Batching:固定一批请求一起开始、一起结束;实现简单,但空等严重。
- Continuous Batching:每个迭代重新组 batch;完成的请求释放 KV Cache,新请求加入。
- 常和 PagedAttention 配合:分页缓存让请求可以随时加入/退出,不必连续显存。
- 调度器还要考虑公平性、优先级和最大 batch。
关键取舍
- 吞吐提升明显,但调度和缓存管理更复杂。
- 大 batch 提高吞吐,可能推高单请求延迟;要按 SLA 调。
- 长短请求混跑时,公平性和超时策略很重要。
- 调度器通常还要设置最大并发和超时。
- 需要 KV Cache 的按需分配/回收,否则会碎片化。
常见误区
- Continuous Batching 不是“把 batch 调大”:它是请求级动态调度。
- 它不等于 Static Batching:后者要等整批结束。
- 吞吐高不代表延迟低:两者要分开看。
- 没有 KV Cache 管理也能做:可以,但效果和实现难度会不同。
用在哪里
- 在线聊天、API 服务、多租户推理。
- 请求长度差异大、需要高 GPU 利用率的场景。
- 与 PagedAttention、推理框架一起使用。
相关概念
- PagedAttention:支撑动态请求的缓存管理。
- KV Cache:每个请求的状态。
- Offloading:显存不足时的补充手段。