30 秒快速回答
连续批处理(Continuous Batching)是一种”完成一个请求就立刻补一个新请求”的推理调度策略。传统静态批处理必须等整批所有请求全部生成完毕才能腾出 GPU,而连续批处理在迭代级(每个 token 生成)就动态补位,让 GPU 显存和算力始终满载,吞吐量可提升 10-30 倍。它是 vLLM、SGLang 等现代推理引擎的核心加速机制,也是大模型服务降本的关键。
核心价值:理解连续批处理,你就能明白为什么同样的 GPU,别人的推理服务比你快一个数量级,并能针对性地配置推理引擎参数。
一、批处理:从”等齐”到”不等”
传统静态批处理(Static Batching)的逻辑是:攒够一批请求,一起送入 GPU,等这一批全部生成完成,再接收下一批。问题在于——每个请求的长度参差不齐,短的 10 个 token 就结束了,长的要生成 1000 个 token。短请求明明早就结束,却必须占着 GPU 显存等长请求跑完,造成大量算力浪费。
连续批处理改变了这个思路:只要有请求完成,就立刻从等待队列里拉一个新请求顶上,释放的空间马上被复用。GPU 不再有空转,吞吐自然飙升。
# 伪代码对比两种调度策略
def static_batch(requests):
batch = fill_batch(requests) # 攒满一批
while not all_finished(batch):
decode_step(batch) # 等整批全部结束
return results
def continuous_batching(requests):
batch = fill_batch(requests)
while requests or batch:
finished = decode_step(batch) # 每个 token 生成后检查
for req in finished:
batch.remove(req) # 完成的立刻腾位
if requests:
batch.add(requests.pop()) # 立刻补新请求
return results
二、迭代级调度:核心原理
连续批处理之所以快,关键在于调度粒度从”请求级”降到了”迭代级”(一个 token 的生成称为一次迭代)。
每次迭代结束后,引擎会做三件事:
- 回收:检查哪些请求已生成到结束标记,回收其显存(主要是 KV Cache);
- 补位:从等待队列中挑新请求加入,抢占刚释放的显存;
- 续跑:所有未完成请求统一执行下一步解码。
这样 GPU 的利用率始终接近 100%,代价是实现复杂——每个请求在批中的位置、长度、KV Cache 都不同,需要像 PagedAttention 这样的显存管理配合(可参考本站《什么是 KV Cache?》一文)。
三、静态 vs 连续:一张表看懂
| 对比维度 | 静态批处理 | 连续批处理 |
|---|---|---|
| 调度粒度 | 请求级 | 迭代级(token 级) |
| GPU 空闲率 | 高(等长请求拖累) | 极低(边完成边补位) |
| 吞吐提升 | 基准 | 10-30 倍(官方基准) |
| 首个 token 延迟 | 等待批满,可能更高 | 队列即进即算,更低 |
| 实现复杂度 | 简单 | 高(需配合显存管理) |
| 代表框架 | 早期 TGI v0.x | vLLM、SGLang、TGI 新版 |
四、实际部署:怎么开启
主流推理引擎默认就启用了连续批处理,你只需合理配置即可发挥最佳性能。
vLLM 示例(--max-num-seqs 控制同时处理的请求上限,越大越吃显存):
vllm serve Qwen/Qwen2.5-7B-Instruct \
--max-num-seqs 256 \
--gpu-memory-utilization 0.9 \
--enable-prefix-caching
SGLang 示例:
from sglang import Engine
engine = Engine(
model_path="Qwen/Qwen2.5-7B-Instruct",
mem_fraction_static=0.9,
max_running_requests=256, # 动态补位的并发上限
)
调参要点:max-num-seqs / max_running_requests 越大,连续批处理越能”填满”GPU,但显存占用也越高;生产环境建议结合压测工具(如 vllm benchmark)找到吞吐与显存的平衡点。
五、适用场景与局限
连续批处理尤其适合高并发、请求长短不一的场景:聊天机器人、RAG 问答、代码补全等。但也有限制:
- 并发太低时(如每次只有 1 个请求),连续批处理几乎没有发挥空间;
- 实现依赖成熟的显存管理(PagedAttention),自行手写很难做到高性能;
- 动态补位会增加调度开销,请求极短时收益有限。
总结与延伸阅读
本文要点:静态批处理等整批结束造成 GPU 浪费;连续批处理在迭代级动态补位,吞吐提升 10-30 倍;它是 vLLM/SGLang 的核心机制,通过 max-num-seqs 等参数调节;高并发长短混合场景收益最大。
延伸阅读:想深入理解配套技术,可阅读本站《什么是 KV Cache?大模型推理提速降本的核心技术全解析》了解显存管理原理,以及《vLLM 部署指南:高性能推理引擎完全指南》掌握实际部署细节;对吞吐进一步优化感兴趣,可看《什么是推测解码?大模型推理加速 2-3 倍的核心技术》。