大模型推理的Speculative Decoding原理详解

大模型推理的最大瓶颈是自回归生成——每个token的生成都依赖前面所有token的KV Cache,无法并行。Speculative Decoding(投机解码)是2024-2026年最重要的推理加速技术之一,在质量无损的前提下将推理速度提升2-4倍。

核心思想

自回归生成的瓶颈

标准自回归生成是串行的:生成第N个token需要先完成第1到N-1个token的生成。每一步都涉及一个完整的forward pass,计算量约O(n×d²),其中n是序列长度,d是模型维度。

这种串行性导致GPU利用率低——大部分时间在做矩阵乘法但不能并行化。一个大模型生成500个token需要500次forward pass。

Speculative Decoding的洞察

Speculative Decoding的核心洞察是:大模型的前向计算可以批量处理多个token

具体方法:

  1. 用一个小模型(Draft Model)快速生成N个候选token
  2. 用大模型(Target Model)一次性验证这N个token
  3. 从验证后的分布中采样,保证输出分布不变

关键在于第2步——大模型一次forward pass可以同时计算N个位置的概率分布,因为这个计算不依赖这N个token本身(只依赖前面的token,而这些已经由小模型"占位"了)。

数学原理

修改的拒绝采样

Speculative Decoding的数学基础是一种修改的拒绝采样,确保输出分布和直接使用大模型完全一致。

设大模型在位置t的条件分布为p(x|context),小模型为q(x|context)。算法步骤:

  1. 小模型生成token x₁, x₂, …, xₖ
  2. 大模型并行计算p(x_i|context)对所有i
  3. 对每个位置i:
    • 如果p(x_i) ≥ q(x_i):接受x_i(以概率min(1, p(x_i)/q(x_i)))
    • 如果p(x_i) < q(x_i):以概率(p(x_i)/q(x_i))接受,否则拒绝并从(p-q)分布中重新采样
  4. 一旦拒绝某个token,从该位置开始重新用小模型生成

关键特性:不管小模型质量如何,最终输出分布恒等于大模型的分布。如果小模型生成的token和大模型一致,加速效果好;如果不一致,大模型会拒绝并修正,不损失质量。

加速效果分析

加速比取决于小模型的"命中率"——即生成的token被大模型接受的比例。

设小模型命中率r,每次生成k个候选token。期望接受的token数 = 1 + r + r² + … ≈ 1/(1-r)。

  • 如果r=0.5(命中率50%),加速比约2x
  • 如果r=0.7(命中率70%),加速比约3.3x
  • 如果r=0.8(命中率80%),加速比约5x

命中率主要取决于小模型和大模型的相似度——小模型越接近大模型的分布,命中率越高。

工程实现

Draft Model选择

选择合适的小模型是Speculative Decoding成功的关键:

同系列小模型:最常用的方案。如果Target Model是Llama-70B,Draft Model用Llama-7B。同系列模型共享tokenizer和架构,分布相似度高。

自蒸馏模型:将大模型蒸馏到小模型作为Draft Model。蒸馏使小模型分布更接近大模型,命中率更高。

N-gram模型:最极端的"小模型"——使用N-gram统计模型预测下一个token。几乎零成本,但命中率较低。适合重复性强的内容生成。

批量投机(Batched Speculation)

标准Speculative Decoding在每次迭代中为单个序列生成候选token。Batched Speculation将多个请求的候选token合并成一个batch一起验证,进一步提高GPU利用率。

这在批处理推理场景中特别有效——10个并发请求各自有5个候选token,可以组合成50个token的batch一次性验证。

Tree Speculation

标准方法生成的候选是线性序列,Tree Speculation生成树形候选——在每个位置生成多个候选分支,大模型一次验证整棵树。

好处是即使某个分支被拒绝,其他分支可能被接受,减少浪费。代价是验证计算量从O(k)增加到O(k^d)(d是树深度),需要在并行度和验证成本间平衡。

最新变体

Medusa

Medusa不使用外部Draft Model,而是在大模型上增加额外的"Head"来预测未来多个位置的token。这些Head轻量级,不显著增加推理成本。

Medusa的优势是不需要维护两个模型,简化了部署。劣势是Head的预测能力有限,加速比通常在2x左右。

EAGLE

EAGLE使用一个轻量网络,基于大模型的中间层表示(而非输入token)预测后续token。由于中间层表示比原始token信息更丰富,预测准确率更高。

EAGLE在2026年是最先进的Speculative Decoding方法之一,加速比达到3-4x,且不需要修改大模型本身。

REST

REST(Retrieval-based Speculative Decoding)使用检索方式生成候选——从训练数据中检索和当前上下文相似的片段,用其后续内容作为候选token。

这种方法在高度重复的模式(如代码生成中的import语句、函数签名)上特别有效,命中率可达90%+。

实践考量

适用场景

Speculative Decoding并非在所有场景都有效:

高度适合

  • 代码生成(重复模式多,小模型命中率高)
  • 结构化输出(JSON/表格等固定模式)
  • 文档摘要(内容模式相对固定)

效果一般

  • 创意写作(token分布更分散,命中率较低)
  • 多语言翻译(不同语言间模式差异大)
  • 少样本推理(每步推理差异大)

不适合

  • 超长上下文(KV Cache管理复杂度增加)
  • 实时流式输出(候选生成增加首token延迟)

延迟与吞吐的权衡

Speculative Decoding对延迟和吞吐的影响不同:

  • 延迟:首token延迟可能略增(需要先生成候选),但整体完成时间缩短
  • 吞吐:大幅提升(每次forward pass产生更多有效token)

在交互式场景中,首token延迟很重要。可以设置"跳过投机"模式——当用户等待时直接生成第一个token,后续token再启用投机。

内存开销

Speculative Decoding需要额外存储候选token的KV Cache。对于k个候选token,额外KV Cache约k×d×L(d是维度,L是层数)。通常k=4-8,开销在可接受范围内。

性能数据

我们在Llama-70B上的实测数据:

方法延迟(ms)吞吐(tok/s)加速比
标准自回归25041.0x
Speculative (Llama-7B)1109.12.3x
EAGLE8511.82.9x
EAGLE + Tree7014.33.6x

(测试条件:生成长度500 token,A100 80G,batch=1)

结语

Speculative Decoding是大模型推理加速领域最优雅的创新之一——它不牺牲质量,不修改模型,只是聪明地利用了GPU的并行计算能力来减少串行步骤。随着EAGLE等新方法的出现,加速比已经稳定在3x以上。对于追求推理效率的场景(这几乎是所有生产部署),Speculative Decoding已经成为标准配置。它不是一个"优化选项",而是一个"默认启用"的技术。

本文同步发布于 硅基AGI论坛