跳到主要内容

推理侧 — 调度优化

核心要点

  • prefill 算力密、decode 访存密,调度需分阶段
  • Continuous batching:动态合批,吞吐数倍
  • Chunked prefill:长 prefill 切块平滑尖峰
  • Speculative decoding:小模型猜、大模型验
  • 调度决定"跑得快",KV 管理决定"放得下"

本文回答"长上下文推理时如何把硬件用好"的调度算法问题。本文涉及的框架内单实例调度,区别于 interconnect / 推理服务化通信 的跨实例 PD 分离调度。

长上下文加剧的调度矛盾

prefill 与 decode 需要不同硬件资源,长上下文把这一错配放大(依据见 02-第一性挑战):

阶段算力 / 访存特征长上下文下放大
Prefill算力密集,FLOP/Byte 高1M prefill 单次 GPU 占用数十秒
Decode访存密集,FLOP/Byte 低单 token 延迟由 KV 大小 / HBM 带宽决定

@tbl-longctx-sched-prefill-decode-asymm prefill 与 decode 的算力错配

调度的核心矛盾:两阶段需要不同的硬件资源——prefill 想要算力、decode 想要带宽。如果混合放在同一批,要么算力浪费、要么带宽浪费、要么 SLO 崩盘。

Continuous Batching — 动态合批

核心问题:静态批被最长请求拖累,GPU 大量时间空跑,如何合批?

静态批的问题

传统 GPU serving 用静态批(static batching):

Step 0: 收集 N 个请求,组成 batch 一起送 GPU
Step 1-K: 同步生成,直到最长那个完成
Step K+1: 整批返回,再收集下一批

问题:最长请求拖累整批。若 batch 内请求长度差 10 倍,GPU 90% 时间空跑(在等长的那个完成)。

Orca / 连续批

Orca / Yu et al., 2022 (OSDI)[1] 提出 iteration-level scheduling

每个 token 生成 step 都检查:
- 完成的请求踢出 batch
- 新到的请求插入 batch

效果:GPU 利用率从 50% 提到 90%+,吞吐 2-7 倍。

关键设计

  • batch 大小 / 内部请求集合每步可变
  • KV 管理需要支持"中途加入 / 退出"(→ 07-推理-KV 管理 / PagedAttention
  • selective batching:attention 层因 KV 形状不一致需逐请求算,其他层(MLP / LN)可批

业界采用

vLLM、SGLang、TensorRT-LLM、TGI 默认 continuous batching。这是当前 LLM serving 的事实基础

Chunked Prefill — 把长 prefill 切块

核心问题:长 prefill 占满算力数十秒,如何避免冻结同批 decode?

长 prefill 的尖峰问题

在 continuous batching 框架下,长 prefill 是一根尖刺

请求算力需求持续时间
1M token prefill满载算力数十秒
短 decode低算力高带宽每 step 几毫秒

@tbl-longctx-sched-spike-problem 长 prefill 与短 decode 在算力需求上的不对称

把两者同时放在一批:

  • 要么先做 prefill:所有 decode 请求被冻结数十秒 → TPOT SLO 崩盘
  • 要么 prefill 等 decode:长 prefill TTFT 进一步恶化

两者都不可接受

SARATHI / Chunked Prefill

SARATHI / Agrawal et al., 2023[2] 与后续的 Sarathi-Serve (OSDI'24)[3] 提出:

把 prefill 切成 $K$ 个小块(chunk),每块与 decode 一起送 GPU

1M token prefill → 切 8 个 chunk,每 chunk 128K
Step t: prefill_chunk_t + N 个 decode
Step t+1: prefill_chunk_{t+1} + N 个 decode
...

关键收益

  • TPOT 不再被冻结:每 step 都有 decode 推进
  • GPU 利用率高:prefill chunk(算力密)+ decode(带宽密)算力 / 带宽都吃满
  • TTFT 仅小幅变长:从纯 prefill 的 $T$ 变到约 $1.1 T$

Chunk size 是调度参数:太大无法与 decode 共存(仍冻结),太小算力不饱和。SARATHI 报告甜点在数千 token / chunk。

业界采用:vLLM ≥ 0.4 默认开启 chunked prefill,DeepSpeed-FastGen 也采用类似思路。长上下文部署几乎必开 chunked prefill

vLLM V1 默认参数与 chunk size 调优

vLLM V1(2025 年起为默认架构)把 chunked prefill 设为默认开启[4]long_prefill_token_threshold 默认约为 context window 的 4%,即 128K 模型约 5120 token;官方推荐在线场景设 8192、离线批处理设 16384,以平衡 TTFT 与吞吐。

Chunk size 要按场景调。社区实测(H200,SGLang v0.4.2.post4 / vLLM 0.7.2,30K input + 500 output,64 并发)[5]

引擎 / 配置TTFT吞吐(tok/s)
SGLang,chunk 32K4.3 s25,428
vLLM,默认配置4.1 s23,770
SGLang,默认 chunk 8K8.4 s

@tbl-longctx-sched-chunk-bench vLLM vs SGLang 128K 场景吞吐对比(社区实测,H200)

SGLang 默认 8K chunk 在 30K 长上下文下 TTFT 劣化到 8.4 s,原因是 chunk 过小导致 prefill 轮次过多;扩大到 32K 后 TTFT 与 vLLM 默认接近,吞吐高出约 7%。这是社区 GitHub issue 实测数据,非学术论文结论

SGLang Pipeline Parallelism 对超长 TTFT 的改善

SGLang v0.5.7+ 引入 Pipeline Parallelism(PP)[6],把 prefill 跨 pipeline stage 流水,据报道 DeepSeek-V3.1 128K TTFT 从 48.5 s 降至 15.5 s(−67.9%);Qwen3-235B PP8 配置下 128K TTFT 约 10.54 s。该机制在极长上下文(>64K)下补偿了 chunk 本身无法解决的 KV 计算总量问题。

Speculative Decoding — 用小模型猜、大模型验

核心问题:decode 单步只产一个 token,访存受限,如何一步产出多个?

算法机制

Leviathan et al., 2023[7] 和 Chen et al., 2023[8] 同时提出:

1. Drafter(小模型)一次生成 K 个候选 token:t_1, t_2, ..., t_K
2. Target(大模型)一次性 forward K+1 个位置,得到这 K+1 个分布
3. 比较:依次接受每个 t_i 如果 target 也喜欢;第一个被拒就停
4. 输出:接受的 token + target 在拒绝点的采样

收益:理论 $K \times$ 加速 decode;实际加速 $2 \text{-} 4 \times$(依赖 drafter 命中率)。

长上下文下的局限与修正

长上下文下 speculative decoding 有几个新观察:

维度影响
Drafter KV 同步Drafter 也要维护 KV,长上下文下 drafter KV 显存压力可观
Target forward 成本Target 单步 forward 已经主要是 KV 读取($O(n)$),多算 $K$ 个 token 增量极小
Draft context 上限EAGLE 系列 draft context 有 2048 token 上限,超出后历史信息被截断
Acceptance length128K 长上下文下 acceptance length 跌至约 1.28,近乎失效[9]

@tbl-longctx-sched-spec-long 长上下文场景 speculative decoding 的特殊性

修正旧论断:长上下文不是 speculative decoding 的理想场景,而是其主要难点。Draft context 的 2048 token 上限使 drafter 丢失大量历史,导致 acceptance length 在 128K 输入下接近 1(即几乎每个 draft token 都被拒绝)。短上下文低并发下 EAGLE-3 可达 2–6× 加速(70B 级最高约 6.5× @温度 0),但该收益随上下文增长快速衰减[9]

EAGLE 3.1 的修复:2026-05 据报道 EAGLE 3.1 修复了长上下文下的 attention drift 问题,acceptance length 最高提升 2×[10]。该工作尚属新进展,在 128K 场景的实际增益有待进一步验证。

代表实现

方法特征
Medusa[11]多 head 并行预测,无独立 drafter
EAGLE / EAGLE-2[12]用 target 自己的低层做 drafter,命中率高;draft context 上限 2048 token
EAGLE-3[9]短上下文 2–6× 加速,长上下文受 draft context 限制劣化
EAGLE 3.1[10]据报道修复 attention drift,长上下文 acceptance length 提升最高 2×(新进展)
Self-Speculative同模型不同层 drafter / verifier,省 drafter 部署
Recursive Speculative多层 speculative(drafter 自己也 speculative)

@tbl-longctx-sched-spec-impl Speculative decoding 的代表实现

三者的组合

当前主流推理引擎(vLLM、SGLang、TensorRT-LLM)的调度技术栈见 ,四者层层叠加:

Continuous batching(基础)
└─ PagedAttention(→ 07-推理-KV 管理)
└─ Chunked prefill(长 prefill 解药)
└─ Speculative decoding(decode 进一步加速)

@tbl-longctx-sched-stack 推理引擎的调度技术栈

与 PD 分离的关系

视角框架内调度框架间 PD 分离
作用范围单引擎实例多实例间
解决问题prefill / decode 共存于一卡prefill / decode 分集群部署
通信代价0KV 跨节点传输
适用通用部署极致 SLO + 跨集群资源池

@tbl-longctx-sched-vs-pd 框架内调度 vs PD 分离

两者互补不互斥:单实例内用 continuous batching + chunked prefill 把 GPU 用好;多实例间用 PD 分离把 prefill / decode 资源池分开。

PD 分离详见 interconnect / PD 分离原理MooncakeNVIDIA Dynamo

Takeaway

知识点核心结论
调度矛盾prefill 算力密、decode 访存密,同批混放必有一方浪费
Continuous batchingiteration-level 合批是 serving 基础,吞吐 2-7 倍
Chunked prefill长 prefill 切块与 decode 共存,保 TPOT SLO,TTFT 仅小幅变长
Chunked prefill 调优vLLM V1 默认 ~4% context window;在线推荐 8192、离线 16384;chunk 过小 TTFT 劣化(社区实测)
SGLang Pipeline ParallelismPP 把 128K TTFT 从 48.5 s 降至 15.5 s,补偿极长上下文 KV 计算总量瓶颈(据报道)
Speculative decoding 局限短上下文低并发 2–6× 加速;128K 下 acceptance length 跌至约 1.28,draft context 2048 token 上限是根本制约
EAGLE 3.1 修复方向据报道修复 attention drift,长上下文 acceptance length 提升最高 2×(新进展,待验证)
组合落点吞吐 SLO 用 continuous batching + chunked prefill 打底,TPOT SLO 再叠 speculative decoding(需注意长上下文限制)

@tbl-longctx-sched-takeaway 全文要点

参考资料

  1. Yu et al., Orca: A Distributed Serving System for Transformer-Based Generative Models, OSDI 2022. https://www.usenix.org/system/files/osdi22-yu.pdf
  2. Agrawal et al., SARATHI: Efficient LLM Inference by Piggybacking Decodes with Chunked Prefills, 2023. https://arxiv.org/abs/2308.16369
  3. Agrawal et al., Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve, OSDI 2024. https://www.usenix.org/conference/osdi24/presentation/agrawal
  4. vLLM Optimization Docs. https://docs.vllm.ai/en/latest/configuration/optimization/
  5. SGLang issue #3471(社区实测,H200,SGLang v0.4.2.post4 / vLLM 0.7.2,30K input + 500 output,64 并发). https://github.com/sgl-project/sglang/issues/3471
  6. LMSYS Blog, 2026-01. https://www.lmsys.org/blog/2026-01-15-chunked-pipeline/
  7. Leviathan et al., Fast Inference from Transformers via Speculative Decoding, 2023. https://arxiv.org/abs/2211.17192
  8. Chen et al., Accelerating Large Language Model Decoding with Speculative Sampling, 2023. https://arxiv.org/abs/2302.01318
  9. Red Hat Developer, 2025-07. https://developers.redhat.com/articles/2025/07/01/fly-eagle3-fly-faster-inference-vllm-speculative-decoding
  10. MarkTechPost, 2026-05(新闻). https://www.marktechpost.com/2026/05/27/eagle-3-1-long-context-speculative-decoding/
  11. Cai et al., Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads, 2024. https://arxiv.org/abs/2401.10774
  12. Li et al., EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty, 2024. https://arxiv.org/abs/2401.15077