Skip to content
🔗 分享本题
查看我的学习进度 →

Continuous Batching 与 Chunked Prefill 在 token 预算内交错调度图

🧠 记忆锚点:连续批处理让请求按迭代进出;Chunked Prefill 把长提示切片穿插,防止一次 Prefill 堵住 Decode。

💡 答案要点

背景:推理系统的三大瓶颈

"LLM 推理有三大瓶颈:计算(Compute)、内存(Memory Bandwidth)、通信(Network)。2026 年主流推理引擎(vLLM、SGLang、TGI)的核心优化都围绕这三点展开,其中 Continuous Batching 和 Chunked Prefill 是最具生产价值的两项技术。"


Continuous Batching(连续批处理)

传统 Batching(Static Batching):
  → 批量接收请求,等所有请求完成,一起返回
  → 问题:短请求等长请求,GPU 利用率低

Continuous Batching(迭代级批处理):
  → 每生成一个 token 就重新分配 GPU 资源
  → 完成生成的用户立即离开,新用户立即加入
  → GPU 利用率最大化

对比图:

Static Batching 时序:

请求A:[────────生成16步────────]
请求B:[────────────────生成32步────────────────]
请求C:[────────生成16步────────]

↓ GPU 利用率:低(长请求阻塞短请求)

Continuous Batching 时序:

步1: [A][B][C]    → 生成 3 tokens 并行
步2: [A][B][C]    → 生成 3 tokens 并行
...
步16: [A完成][B][C] → A 离开,C 加入
步17: [D][B][C]    → 新请求 D 加入
...

Chunked Prefill(分段预填充)

问题:预填充阶段(计算 attention)显存需求巨大
     长序列预填充会阻塞新请求进入

解决:将预填充分成多个 chunk,逐块处理
     每个 chunk 后插入一个 decode step
     新请求可以更快进入 decode 阶段
传统 Prefill:
[===========Prefill 128K tokens===========] → decode → Blocked!

Chunked Prefill:
[Prefill 4K] → decode → [Prefill 4K] → decode → [Prefill 4K] → decode → ...
                    ↑ 新请求可以更快进入

配置示意(参数名随框架版本变化,使用前查官方文档):

python
# vLLM 风格的 chunked prefill 配置示意
config = {
    "chunked_prefill": {
        "max_chunk_size": 4096,  # 每块 4K tokens
        "preemptible": True,      # 可抢占长序列
        "decode_ratio": 0.3       # 每 3 个 prefill token 插入 1 个 decode
    }
}

# 生产效果:
# - 首 token 延迟降低 40%
# - 吞吐量提升 2-3x
# - 长短请求混合场景下 GPU 利用率 > 85%

Continuous Batching + Chunked Prefill 的组合效果:

指标传统 BatchingContinuous + Chunked
GPU 利用率40-60%80-95%
平均时延(P99)高(长请求阻塞)低(动态分配)
吞吐量100 req/s300+ req/s
长序列支持差(阻塞严重)好(chunked preemptible)

生产级配置建议:

python
# vLLM 生产配置
vllm serve meta-llama/Llama-4-17B
  --gpu-memory-utilization 0.92
  --max-num-batched-tokens 32768
  --max-num-seqs 256
  --enable-chunked-prefill
  --prefill-chunk-size 4096
  --scheduler-max-num-seqs 256

面试话术:

“Continuous Batching 在迭代粒度补入和移出请求,提高调度灵活性;Chunked Prefill 把长输入拆开,减少单个 Prefill 长时间阻塞 Decode。它们可能提高稳定吞吐并改善尾延迟,但收益取决于长度分布、并发和调度参数,必须用 TTFT、ITL、吞吐和任务质量共同验证。”

延伸阅读:

  • vLLM 官方文档:Chunked Prefill(以当前版本为准)
  • Hugging Face: "Continuous Batching Explained"

📚 参考:vLLM 官方文档(Continuous Batching 与 Chunked Prefill)