投机解码 (Speculative Decoding)
投机解码 是 2023 年起流行的 LLM 推理加速技术,核心思想:
用一个小而快的 draft 模型先"猜"几个 token,然后用大模型并行验证。 猜对了就把这些 token 一次性输出,没猜对就退回大模型重新生成。 由于大模型验证是并行的,整体延迟接近 draft 模型延迟,但输出分布 与大模型完全一致(数学上证明)。
工作流程
- Draft 模型(小,如 7B Llama)自回归生成 K 个候选 token
- Target 模型(大,如 70B Llama)一次 forward pass 验证这 K 个 token
- 接受所有前缀匹配的最长 token 段(通常 ≥ 2 个)
- 从不匹配的 token 起,回退给 target 模型重新生成
加速比
- 典型加速:2-3 倍延迟下降(甚至到 4 倍)
- 加速条件:draft 模型分布必须接近 target 模型
- 小模型(draft 100M-1B)配大模型(target 7B-70B+)效果最好
关键变种
Self-speculative decoding
- 不需要单独的 draft 模型——target 模型早退(early exit)、 用中间层作为 draft
- 节省显存,但加速比较小
Medusa / Lookahead decoding
- 给 target 模型加几个轻量"头",直接预测多个未来 token
- 比单独 draft 模型更省显存
Prompt-lookup decoding
- 在 prompt 里找重复片段作为候选 token
- 适合代码补全、文档续写等"复制型"任务
EAGLE / EAGLE-2
- 用 target 模型的顶层 hidden state 训练一个轻量 drafter
- 主流加速方案的"集大成者"
工程落地
- vLLM、TensorRT-LLM、SGLang 全部内置
- 主流推理云(Fireworks / Together / Anyscale)默认开启
- 与 batch decoding、continuous batching、prefix caching 叠加使用
优势
- 输出分布严格一致:数学证明接收-拒绝采样下分布不变
- 不需要重新训练 target 模型
- 与量化(INT8 / FP8 / FP4)正交,可叠加
限制
- 需要足够好的 draft 模型;差太多加速比反降
- 长文本(code / book)加速比小文本(chat)更明显
- KV cache 仍要管理,加速比受显存带宽限制