Paper

Speculative Speculative Decoding:让草稿模型永不等待的异步推理加速

7 min read ·

一句话总结:推测解码让小模型帮大模型「打草稿」已经是标准做法,但草稿模型还得等大模型验证完才能继续。SSD 说:别等了,猜一下验证结果直接往前跑。

推测解码回顾:快在哪,卡在哪

标准推测解码(Speculative Decoding)的核心思路在 2023 年被提出后迅速成为 LLM 推理优化的标配。简单回顾:

核心流程

  1. 草稿阶段:用一个小而快的草稿模型(draft model)自回归生成 K 个候选 token
  2. 验证阶段:将这 K 个 token 一次性喂给大的目标模型(target model),通过一次前向传播并行验证所有位置
  3. 接受/拒绝:根据概率比较决定接受还是拒绝每个草稿 token,从第一个被拒绝的位置开始重新生成

为什么快:目标模型只需要一次前向传播就能验证 K 个 token,相比逐个生成节省了 K-1 次前向传播。验证和逐 token 生成使用同样的计算资源,但一次处理更多 token。

卡在哪:整个流程是严格串行的——

[草稿: 生成K个token] → [等待] → [验证: 一次前向传播] → [等待] → [草稿: 生成K个token] → ...

草稿模型在等验证结果,验证模型在等草稿输出。两者交替执行,任何时刻只有一个在工作。对于部署在同一 GPU 上的场景,这意味着硬件利用率远低于理论上限。

SSD 的核心洞察:预判验证结果

Speculative Speculative Decoding(SSD)的关键思路用一句话概括:草稿模型不等验证结果,而是预判验证结果后直接开始下一轮推测

具体来说,SSD 引入了一个新的时间重叠机制:

标准推测解码:
  [草稿 1] ──────── [验证 1] ──────── [草稿 2] ──────── [验证 2]

SSD:
  [草稿 1] ──[草稿 2(预判版)]──[草稿 3(预判版)]──...
            [验证 1] ──────────── [验证 2] ──────────

在目标模型验证第一批草稿 token 的同时,草稿模型已经假设这些 token 全部被接受,开始生成下一批。当验证结果返回时:

这和 CPU 的分支预测(branch prediction)思路如出一辙:预判正确就赚了一个周期,预判错误就付出回滚代价。只要预判正确率足够高(对应推测解码的「接受率」),整体就是净正收益。

算法细节

乐观预判策略

SSD 使用最简单的预判策略——乐观假设所有草稿 token 都会被接受。这基于一个经验观察:好的草稿模型-目标模型配对通常能达到 70-90% 的接受率。

在高接受率下,乐观预判大部分时候是对的。即使偶尔预判失败,回滚的代价也只是丢弃几个草稿 token——草稿模型推理成本很低,白算一些 token 不是大问题。

回滚机制

当验证结果返回后发现位置 i 被拒绝:

  1. 丢弃位置 i 及之后的所有预判 token
  2. 使用验证过程中目标模型在位置 i 的采样结果作为正确 token
  3. 从位置 i+1 开始重新进入正常的推测-验证循环

并行流水线

SSD 的理想执行形态是一个三阶段流水线:

时间片草稿模型目标模型状态管理
T1生成草稿批次 1空闲-
T2生成草稿批次 2(预判)验证批次 1-
T3生成草稿批次 3(预判)验证批次 2处理批次 1 的结果
T4生成草稿批次 4(预判)验证批次 3处理批次 2 的结果,可能回滚

从 T2 开始,草稿模型和目标模型就完全并行运行。草稿模型的延迟被完全隐藏在目标模型的验证延迟之下。

数学保证

SSD 不改变输出分布。验证阶段仍然使用标准的推测解码验证算法(基于概率比较的接受/拒绝),预判只是一种调度优化。被接受的 token 序列的概率分布与直接从目标模型采样完全一致。

性能分析

加速上界

设草稿生成 K 个 token 的延迟为 T_d,验证延迟为 T_v,接受率为 α

标准推测解码的每轮延迟T_d + T_v

SSD 的每轮延迟max(T_d, T_v) (理想情况,预判全部正确时)

T_d < T_v(草稿模型比目标模型快,通常成立)时,SSD 的理想加速比为:

加速比 = (T_d + T_v) / T_v = 1 + T_d / T_v

如果草稿模型延迟是目标模型的 1/5(常见配置),理论加速比为 1.2 倍(相对标准推测解码)。加上标准推测解码本身相对自回归的 3-5 倍加速,SSD 的端到端加速可以达到 4-6 倍。

接受率的影响

接受率 α 直接决定 SSD 的实际收益。下表展示不同接受率下的预期表现:

接受率回滚频率SSD 相对标准 SD 的加速推荐
>85%极低1.3-1.5x强烈推荐
70-85%1.1-1.3x推荐
50-70%中等1.0-1.1x边际收益
<50%<1.0x(可能变慢)不推荐

高接受率是 SSD 的生命线。选择草稿模型时必须确保足够高的接受率。

AMD MI300X 上的工程实现

AMD 在 ROCm 博客中公布了 SSD 在 MI300X 上的实现细节,是目前最完整的工程落地参考。

架构设计

MI300X 的实现利用了 AMD 的 HIP(Heterogeneous-Compute Interface for Portability)编程模型,关键设计包括:

关键优化

  1. 预判深度自适应:根据运行时接受率动态调整预判的批次数量。接受率高时加深预判(预判 3-4 批),接受率低时减少预判(只预判 1 批)
  2. 异步内存管理:KV cache 的分配和释放在独立的内存管理流中执行,不阻塞计算流
  3. 批次大小对齐:将草稿批次大小对齐到 MI300X 的 wavefront 大小(64 threads),最大化 SIMD 利用率

实测数据

AMD 公布的数据显示(Llama 3.1 70B 目标模型 + Llama 3.1 8B 草稿模型):

标准自回归:      ~30 tokens/s
标准推测解码 (SD): ~85 tokens/s  (2.8x)
SSD:             ~120 tokens/s (4.0x, 相对 SD 1.4x)

SSD 相对标准推测解码的额外加速约 40%,与理论预估吻合。

与其他推测解码变体的关系

推测解码自 2023 年提出以来已经衍生出多个变体,SSD 在这个家族中的定位:

方法核心改进与 SSD 的关系
EAGLE用目标模型的隐藏层特征辅助草稿生成提高接受率,与 SSD 互补
EAGLE-3多头并行草稿生成提高接受率 + 草稿多样性
Medusa在目标模型上加多个预测头无需独立草稿模型,可与 SSD 结合
PARD并行自回归草稿 + 验证思路类似但机制不同
SSD草稿-验证异步流水线正交优化,可叠加

SSD 的最大优势在于正交性——它不修改草稿模型或验证算法本身,只改变调度方式。这意味着 SSD 可以和任何提高接受率的方法(EAGLE、Medusa 等)组合使用,收益叠加。

实际部署建议

适用场景

不适用场景

草稿模型选择

草稿模型是 SSD 成败的关键。选择原则:

  1. 同系列优先:Llama 70B + Llama 8B 优于 Llama 70B + Phi-3
  2. 知识蒸馏版:专门为推测解码训练的草稿模型效果最好
  3. 接受率 >70%:低于此阈值 SSD 的收益可忽略

总结

SSD 的贡献在概念上很简洁:标准推测解码中草稿模型有一半时间在空等验证结果,SSD 让它预判结果后继续工作。这个看似简单的改变带来了 30-40% 的额外加速。

更重要的是,SSD 与其他推测解码优化完全正交。随着 EAGLE-3、Medusa 等方法不断提高草稿接受率,SSD 的收益也随之放大——接受率越高,预判正确的概率越大,浪费的计算越少。

对于 LLM 推理优化从业者来说,SSD 的信号很明确:当算法层面的单步优化逼近极限时,调度层面的并行化是下一个突破口

Frequently asked questions

SSD 和标准推测解码的核心区别是什么?
标准推测解码中草稿模型必须等待目标模型验证完成后才能开始下一轮推测。SSD 让草稿模型在验证进行的同时就开始预测下一批 token,通过预判验证结果消除等待时间
SSD 的预判如果错了怎么办?
SSD 使用乐观预判策略,假设草稿 token 大部分会被接受。当验证结果回来后发现某个位置被拒绝,后续预判的 token 全部作废,从拒绝点重新开始。这与分支预测的思路类似
SSD 适合所有 LLM 推理场景吗?
SSD 在草稿接受率高的场景收益最大。当接受率低于 50% 时,频繁的预判失败和回滚会抵消并行化收益。因此选择高质量的草稿模型仍然是关键
SSD 需要修改目标模型吗?
不需要。SSD 是纯推理层面的优化,只修改草稿模型和验证流程的调度逻辑,目标模型保持不变,输出分布与标准采样完全一致
SSD 目前有哪些框架支持?
AMD 已在 ROCm 平台的 vLLM 分支中实现了 SSD,针对 MI300X 优化。NVIDIA 生态的 TensorRT-LLM 和主线 vLLM 也在积极集成中,预计 2026 年下半年进入主线
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.