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 的生成称为一次迭代)。

每次迭代结束后,引擎会做三件事:

  1. 回收:检查哪些请求已生成到结束标记,回收其显存(主要是 KV Cache);
  2. 补位:从等待队列中挑新请求加入,抢占刚释放的显存;
  3. 续跑:所有未完成请求统一执行下一步解码。

这样 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 倍的核心技术》。