什么是 连续批处理(Continuous Batching)?
连续批处理(Continuous Batching)是一种 LLM 服务调度模式,它会在模型迭代边界准入、推进、暂停或结束请求,而不是固定一组请求并等待所有序列完成。
快速了解
| 规范文档 | 官方规范 |
|---|
工作原理
静态、动态与连续批处理
Static Batching 在执行前固定请求组,通常等待整组完成才释放容量。请求级 Dynamic Batching 等待达到 Size 或 Timeout 后发出 Batch,但选中的请求组仍可能固定执行。Continuous Batching 则在模型迭代之间重新判断成员。[Orca 论文](https://www.usenix.org/conference/osdi22/presentation/yu)为生成式 Transformer 服务提出 Iteration-level Scheduling 与 Selective Batching;其中报告的加速仅属于论文 GPT-3 系统和对照,不能外推到所有当前引擎。
调度器、显存与公平性
生产调度器会跟踪 Waiting/Running Request、Token Budget、KV Block 可用量、Priority、Deadline 与 Cancellation。它可以优先 Decode 控制 ITL,把长 Prefill 切块减少干扰,或在 Cache 不足时抢占并重新计算低优先级序列。
[SARATHI](https://arxiv.org/abs/2308.16369)研究了 Decode-maximal Batch 与 Chunked Prefill,当前各引擎策略仍不同。FCFS 本身不保证不同 Prompt 长度、Tenant 或 Priority Class 的公平性,必须显式限制 Starvation 与 Preemption Loss。
基准契约
评测连续批处理时应声明 Arrival Process、Burstiness、Concurrency、Prompt/Output Length Distribution、Cache State、Scheduler Policy、Token Budget、Memory Limit、Model、Runtime 与 Hardware。除 Request/Token Throughput 外,还要报告 p50/p95/p99 Queue Time、TTFT、ITL 或 TPOT、End-to-End Latency、取消、错误、抢占、饥饿与满足 SLO 的 Goodput。
必须在相同负载和质量下与 Static 或请求级 Dynamic Batching 对比;只提升聚合 TPS 却破坏交互 SLO,不是生产收益。
主要特点
- 在模型迭代边界重组活跃工作集
- 让已完成或取消的请求在其他序列结束前释放容量
- 把请求准入与 Token Budget、KV Cache 分配协同管理
- 可以混合或交替处理 Prefill、Chunked Prefill、Decode 与多 Token 步骤
- 在聚合利用率、排队、尾延迟、公平性和抢占之间权衡
- 必须按真实工作负载评测,不能只看隔离的最大 Batch Size
常见用途
- 服务 Prompt 与输出长度差异较大的并发聊天请求
- 在保持流式 Decode 的同时准入受限的 Prompt 工作
- 对共享推理容量实施 Tenant、Priority 或 Deadline 策略
- 响应取消并在输出上限前释放 KV Cache
- 寻找同时满足 TTFT、ITL 与端到端 SLO 的 Sustainable Load
示例
Loading code...常见问题
连续批处理与动态批处理有什么区别?
请求级 Dynamic Batching 等待 Batch Size 或 Timeout 后执行选中的请求组;Continuous Batching 能在每个模型迭代后重新判断成员,让完成请求退出、新任务加入。有些产品把 Dynamic Batching 当上位词,因此应核对调度边界,不能只看名称。
每个请求在一次迭代中都只推进一个 Token 吗?
不一定。标准 Decode 常让每个活跃序列推进一个 Token,但 Speculative Decoding 可以接受多个 Token,Chunked Prefill 也会处理多个输入位置。Iteration 是调度器的执行边界,实际处理的 Token 类型和数量必须测量。
连续批处理一定会降低延迟吗?
不会。它能消除固定 Batch 的队头阻塞并提高利用率,但过度准入或长 Prefill 可能增加 Queue Time、TTFT 和 ITL。最终结果取决于调度策略、负载、KV 容量、Prompt 形态和公平性控制。
KV Cache 满了以后会发生什么?
引擎可以停止准入、等待完成、拒绝请求、淘汰 Cache Block、交换状态,或抢占序列并在之后重新计算。每种策略都会改变时延和有效容量,因此除 GPU 利用率外,还要观测抢占次数、丢失工作、淘汰、Queue Age 和 OOM。
应该如何调优连续批处理?
回放真实 Arrival 与 Length Distribution,再扫描 Token Budget、最大序列数、Prefill Chunk 和 Priority Policy。选择同时满足公平性、取消和质量要求的最高 SLO-qualified Goodput,不能直接复制其他模型、Runtime 或 GPU 的 Batch 配置。