跳到内容

进阶★★★★★10 分钟阅读

Speculative decoding:让推理快 2-3 倍

小模型提议 token,大模型并行验证。输出一样,延迟大幅降低。

登入以收藏

如果你做过 LLM 推理 benchmark,发现延迟被「token 一个一个生成」主宰 —— 每个 token 都要完整 forward pass 一次模型 —— 那你就找到了 speculative decoding 的对的舞台。它是过去三年最有效的推理优化。OpenAI、Anthropic、Google 内部都在用,vLLM、SGLang、TGI 自架版本也都有。

洞见很优雅:LLM 生成的大部分 token 都是简单的,小模型也猜得到。那为什么不让小模型猜,只在需要验证的时候才花大模型的算力?

根本瓶颈

H100 上 70B 参数模型单流服务生成大约 80-100 tokens/sec。为什么这么慢?

  • 70B 参数一次 forward pass 从 VRAM 读约 140GB 权重(fp16)。
  • H100 HBM 带宽约 3TB/s。
  • 理论下限:140 / 3000 = 每次 forward pass 47ms。
  • 一次 forward pass = 一个 token。实际 overhead 推到 10-12ms。
  • 1000ms / 10ms = 100 tokens/sec。

生成每个 token 是个内存带宽问题,不是算力问题。GPU 算力大部分时间闲置,在等权重从 VRAM stream 过来。如果你可以在一次 forward pass 里验证多个 token,内存成本就被摊掉了。

Speculative decoding 做的就是这件事。

算法

核心想法,Leviathan et al.(2022)跟 Chen et al.(2023):

  1. 一个草稿模型(小、快)autoregressively 生成 K 个候选 token,便宜。
  2. 目标模型(大、慢)并行处理原 prompt + K 个草稿 token —— 一次 forward pass。
  3. 比较目标模型每个位置的分布跟草稿模型的。接受最长的 prefix,只要草稿在那段「概率上够接近」。
  4. 第一个被拒绝的位置,从目标模型的分布采样。
  5. 把草稿剩下的丢掉。

净结果:每次目标模型 forward pass,接受 2-4 个 token 而不是 1 个。即使加上跑草稿模型的成本,还是 2-3× 加速。

接受测试(Chen et al 的无损变体)在数学上等于只从目标模型采样 —— 输出分布完全一样。这不是近似,你拿到一样的答案,只是更快。

为什么有用

大部分文字是可预测的。「法国的首都是巴」—— 下一个 token 几乎肯定是「黎」。小模型轻松答对。大模型只在真正不确定的分支被调用:罕见人名、技术术语、创意答案的前几个 token。

实务上,常见工作负载 60-80% 草稿 token 被接受。每轮 4 个草稿 token,平均每次目标 forward pass 接受约 3 个,约 3× 加速。

挑草稿模型

草稿模型必须:

  • 跟目标同 tokenizer。 不然分布没法比。
  • 比目标小很多。 70B 目标配 7B-1B 草稿是甜蜜点。草稿要跑得比目标快 5-10×。
  • 分布合理对齐。 微调差异很大的草稿模型接受率很低(< 30%),加速消失。

2026 年标准配对:

  • Llama 3.3 70B(目标)+ Llama 3.2 1B(草稿)。 通常 ~3× 加速。
  • Qwen 2.5 72B + Qwen 2.5 0.5B。 通常 ~2.5×。
  • Claude / GPT-5 / Gemini 3。 厂商跑自己内部草稿模型,你不用挑。

你会听到的变体

  • EAGLE / EAGLE-2。 草稿模型不是独立小 LLM,而是接在目标 hidden state 上的额外 head,跟目标一起联合训练。接受率更高(常 70%+)。2025 认真自架者的默认。
  • Medusa。 多个预测 head 接在目标上,各自预测 K 个位置以后。比独立草稿便宜,接受率略差。
  • Lookahead decoding。 Self-speculation:模型用自己过去的 activation 提议自己的续写,不需要草稿模型。
  • Tree attention / multi-draft。 树状生成多条草稿,接受最佳路径。更复杂,加速 +10-20%。

2026 大部分团队:EAGLE-2 是务实甜蜜点。最佳加速、vLLM 跟 SGLang 都好支持、好设定。

vLLM 设定(真实范例)

python -m vllm.entrypoints.openai.api_server \
  --model meta-llama/Llama-3.3-70B-Instruct \
  --speculative-model meta-llama/Llama-3.2-1B-Instruct \
  --num-speculative-tokens 5 \
  --use-v2-block-manager

就这样。一对 flag 就开了。vLLM 2026 也支持 EAGLE:

  --speculative-model yuhuili/EAGLE-Llama-3-70B \
  --num-speculative-tokens 5

看 log 里的接受率。低于 50% 代表草稿不对盘,换个草稿模型。

取舍

Speculative decoding 不是免费。三个真实成本:

  • 内存。 同一张 GPU 上现在跑两个模型。70B + 1B 草稿多 5-10% VRAM。EAGLE 加得少(只多一个 head)。
  • 吞吐 vs 延迟。 Speculative decoding 优化单流延迟。高批次吞吐服务时可能变差 —— GPU 本来就被并行工作饱和,加草稿运算抢走容量。vLLM 在某些配置下高负载时会自动关掉。
  • 设定复杂度。 挑对草稿、tokenizer 对齐、配接受率。第一次加 1-2 天。

什么时候不要用 speculative decoding

  • 高并发流量,目标是吞吐。 纯批次更有效。
  • 超低延迟需求而你不需要 70B。 直接用小模型端到端。
  • 小模型(7B 以下)。 草稿模型 overhead 吃掉收益。
  • 你在用托管 API。 厂商内部管。OpenAI / Anthropic / Gemini API 没法明确开,厂商根据流量 pattern 决定。

真实数字

我在 H100 单张上 Llama 3.3 70B 配各种草稿量到的加速:

  • 没 speculative:单流 85 tok/sec。
    • Llama 3.2 1B 草稿,5 token:220 tok/sec,~2.6× 加速,65% 接受率。
    • EAGLE-Llama-3 head,5 token:280 tok/sec,~3.3× 加速,73% 接受率。
  • 高并发(16 流)EAGLE:总吞吐比没 spec 掉 5%。(批次服务别用。)

对用户面对的聊天,延迟重要时这是「感觉快」跟「感觉慢」的差别。有 speculative 70B 感觉像 30B,没有的话延迟下限就是延迟下限。

接下来会出现的东西

2026 年推理优化前沿:

  • Prompt-level speculation。 用户前一轮变成 tool use 场景的部分草稿。
  • 训练时 multi-token prediction(MTP)。 DeepSeek V3 等模型训练时就原生预测每位置多 token,让 speculative decoding 更有效。
  • 并行采样 + 验证。 并行生成 K 个完整候选响应,挑最好的 —— 不同的加速轴。

Speculative decoding 已经是 table stakes。自架而且延迟重要的话,你应该在用。

下一步

  • Fast Inference from Transformers via Speculative Decoding(Leviathan et al, 2022)。
  • Accelerating Large Language Model Decoding with Speculative Sampling(Chen et al, 2023)。
  • EAGLE / EAGLE-2 论文(Li et al, 2024)。
  • vLLM 跟 SGLang 的 speculative decoding 文档。
  • 查这些词:Medusa、Lookahead decoding、EAGLE、multi-token prediction。

最后更新: 2026-04-29

We use cookies

Anonymous analytics help us improve the site. You can opt out anytime. Learn more