详细解释
投机解码(Speculative Decoding,简称 SD,注意和扩散模型 Stable Diffusion 缩写区分) 是 2023 年 DeepMind 《Fast Inference from Transformers via Speculative Decoding》 提出后被 vLLM、SGLang、TensorRT-LLM 全部落地的加速技巧。
常规 Decode 阶段是串行的:你必须第 t 步算完拿到 Token_t,才能带着它去算第 t+1 步。Decode 每一步本身很快(因为只有 1 个新 Token),但步数 = 输出长度,这就是长回答慢的根因。
投机解码突破这个瓶颈的核心思路是:
- 草稿阶段(Draft):用一个比目标模型小很多的草稿模型(Draft Model,通常 7B/1.5B 甚至更小,或者同一模型用贪婪解码)快速猜测连续 K 个 Token(K 常见取 3–8)。
- 验证阶段(Verify):把这 K 个草稿 Token 连同前缀一起喂给真正的大目标模型,并行地一次算 K 步概率分布(因为这一步本质是 Prefill,GPU 并行很高效)。
- 接受 / 修正:逐位对比草稿和目标模型采样结果,前 M 个猜对的全部接受,第 M+1 个用目标模型的真实分布重新采样,然后进入下一轮 Draft + Verify。
关键点:输出分布与直接用目标模型采样完全一致(数学上可证明等价),只是”用了算力冗余去赌一把猜对”。实测长回答场景 TPS 稳定 2×–4× 加速,且逐字输出节奏在客户端完全无感知。
参考:Google AI Blog - Speculative Decoding。
与其他加速方式的对比
| 加速手段 | 原理 | 加速倍数 | 是否改变输出分布 | 对模型要求 |
|---|---|---|---|---|
| 投机解码 | Draft + Verify 两阶段 | 2×–4× | ❌ 完全等价 | 需要配对的小草稿模型 |
| 量化(W8A8) | 权重/激活低位宽 | 1.3×–1.8× | ⚠️ 几乎无感知 | 任意模型 |
| FlashAttention v2 | 算子优化 + GQA | 1.2×–1.5× | ❌ 完全等价 | GQA 模型更明显 |
| 连续批处理(Continuous Batching) | 请求级动态调度 | 系统吞吐 3×–5× | ❌ 无关 | 任意模型 |
| 投机解码 + AWQ 叠加 | 组合技 | 3×–7× | ⚠️ 轻微 | 组合可行 |
在 API 消费侧的可观测指标
如果你使用的底层供应方开启了 Speculative Decoding,通常你会观察到:
- TTFT 差不多,因为第一轮 Draft + Verify 开销和普通 Prefill 相仿。
- 后续 TPS 明显加快:原本 40 tok/s 的模型可能跑到 80–150 tok/s,且节奏不均匀(猜对的段爆一下,猜错就慢下来,这是正常现象)。
- 每百万 Token 定价不变:因为厂商对用户按输出 Token 收费,和内部加速手段无关。唯元智创 接入的多家供应方已默认打开 Speculative Decoding,等价于你花同样的钱拿到 2–3 倍的响应速度。
常见问题
投机解码为什么不改变输出分布?明明猜了呀?
原文有严格数学证明:只要 Draft 模型采样一个 Token 的概率 q(x) > 0 时目标模型 p(x) 也 > 0(这在实际中都满足),通过”接受率 = min(1, p/q) + 拒绝后重采样修正”的流程,可以严格保证最终序列的概率分布等于纯 p 采样。相当于你是在”预取”而不是在”篡改”。
为什么不用更大的 K(比如 K=64)一次赌到底?
因为猜对概率呈指数衰减。K=3 时全中概率 ~20%,K=5 可能只剩 3%,K=10 几乎永远第一位就错。反而 Verify 阶段 Prefill 变长拖慢 TTFT。工业界一般 K ∈ [3, 8] 是甜点。
Medusa、EAGLE 和 Speculative Decoding 是什么关系?
都是同类思路的衍生:Medusa 在目标模型后加几个小的分类头并行预测 K 步(不需要额外 Draft 模型);EAGLE 用一个更轻的自回归预测网络。核心数学不变,都是”先猜再并行验证”的投机范式,只是 Draft 的主体不同。