连续批处理如何兼顾吞吐和用户延迟?

在每轮迭代调度请求,而不等待整批结束。

内容修订 4 · 2026-10-24

S05 · 修订 1 · 2026-10-21

  1. 轮次 1:A · B · C
  2. 轮次 2:A · D · C
  3. 轮次 3:E · D · C
本站重绘:迭代边界加入/退出示意,不是性能实测。

问题从哪里来

静态请求批处理可能让短请求等待长请求,已完成槽位也不能及时补充。Orca 的迭代级调度允许完成的请求退出、新请求在迭代边界加入,提高利用率,同时引入更细粒度的调度问题。

关键机制

调度器结合待处理输入、正在生成的请求、token 预算和显存余量决定每轮工作。Prefill 的计算较重,decode 对每步时延敏感;大输入一次占用太多工作可能伤害正在输出的请求。分块 prefill 是可组合策略,不是所有连续批处理天然具备的性质。

TTFT = first_token_time − arrival; TPOT ≈ (last − first)/(output_tokens − 1)

算例与证据

教学时序:第1轮 A/B/C,B 完成后第2轮 A/D/C,A 完成后第3轮 E/D/C。替换的是请求槽位,不代表所有请求各自耗时相同。TPOT 示例公式要求输出至少2 token,均值也会隐藏尾延迟。

收益之外的新约束

高吞吐不等于好的交互体验。需报告 TTFT、token 间延迟、尾分位和满足 SLO 的吞吐,并给定到达率、输入/输出长度分布。过度合批可能提高吞吐却使每个用户更慢。

原始来源

启用脚本后可使用手动本地阅读记录和交互计算器。

继续追问

S04 · PagedAttention 如何减少 KV 分配浪费?

S06 · Prefill/Decode 何时值得分开?

全部18题