Skip to content

Speculative Decoding

用一个快但可能"糊涂"的小模型去"猜",用一个慢但精确的大模型去"验"——这就是 Speculative Decoding。它是当前最实用的 LLM 推理加速技术,在不损失任何质量的前提下实现 2-3x 速度提升。

Overview

Speculative Decoding(推测解码,也称 Speculative Execution)是一种利用大模型和小模型的级联来加速自回归生成的技术。核心思想是:小模型生成速度快但可能不准确,大模型准确但生成速度慢——让小模型先"猜"几个 token,大模型一次性验证这些猜测,接受部分、拒绝部分、然后继续。

关键特性:Speculative Decoding 是无损失的——最终输出分布与单独使用大模型完全相同。

How It Works

核心流程

1. 小模型(Draft Model)快速生成 K 个 token 的序列:[d1, d2, d3, ...]
2. 大模型(Target Model)一次性对这 K 个 token 进行并行验证
3. 从第一个不匹配的位置开始重新生成
4. 重复步骤 1-3

接受/拒绝机制

对于第 i 个猜测 token:

如果 draft 模型的预测与 target 模型的预测一致 → 接受
如果不一致 → 从 target 模型的分布中重新采样,并停止验证后续猜测

关键观察:即使 draft 模型猜错了,我们也获得了一个来自 target 模型的真正 token ——这是无损失的关键。

加速比分析

加速比取决于两个因素:

Speedup ≈ α / (1 - β)

α = draft 模型速度 / target 模型速度  →  小模型越快越好
β = draft 模型的接受率  →  小模型越准越好

实际数据

  • 小模型速度通常是大模型的 3-5 倍
  • 接受率通常在 60-80%
  • 实际加速:2-3x

Draft Model Strategies

策略Draft 模型优点缺点
独立小模型专门训练的小号模型(如 Llama 68M)接受率最高需要额外训练和存储
同模型小版本目标模型的小版本(如 7B → 1B)兼容性好仍需额外资源
自拆解目标模型本身的早期层无需额外模型接受率较低
Medusa / Lookahead学习多 token 头预测无需单独 draft 模型训练复杂

Medusa: 无需 Draft 模型的方案

Medusa 在目标模型上增加辅助头,同时预测未来多个 token:

标准 Transformer: 输出 hidden → 一个 lm_head → 一个 token
Medusa: 输出 hidden → 多个 medusa_head → 多个未来 token 预测

好处:无需加载第二个模型,内存占用更少。

Implementation in Production

框架支持情况特点
vLLM✅ 原生支持支持多种 draft 策略,包括模型级联和自拆解
TensorRT-LLM✅ 原生支持NVIDIA GPU 上最优化的实现
llama.cpp✅ 原生支持端侧/本地部署的标准方案
TGI (Hugging Face)✅ 原生支持生产级服务器支持
SGLang✅ 原生支持高性能实现

配置示例(vLLM)

python
from vllm import LLM

llm = LLM(
    model="meta-llama/Llama-2-70b",
    speculative_model="meta-llama/Llama-2-7b",  # draft 模型
    num_speculative_tokens=5,  # 每次猜测 5 个 token
)

Limitations

限制说明
内存开销需要同时加载两个模型(或至少更多的参数)
小批量效果差批量大时(batch size > 1)加速效果下降
短输出效果差输出 token 数很少时,启动开销占比高
任务依赖对于难度高的任务,draft 模型接受率会下降

Why It Matters

  • 唯一无损失的加速方案:与量化、知识蒸馏等会影响质量的方法不同,Speculative Decoding 保证输出分布完全一致
  • 线性复杂度的突破:在 Transformer 的自回归生成线性复杂度局限下,这是最实用的加速路径
  • 生产环境必备:vLLM、TensorRT-LLM 等所有主流框架都已原生支持
  • 与其他技术正交:可以与量化、并行推理、内存优化等技术同时使用

Relationships

  • 推理基础:Model Inference & Deployment — 推理优化的核心技术之一
  • 量化关联:Model Quantization — 可以与量化结合使用,如 QLoRA + Speculative Decoding
  • 并行推理:与 Tensor 并行、Pipeline 并行等技术正交
  • 架构创新:Mixture of Experts — MoE 模型的稀疏激活特性与 Speculative Decoding 有协同效应
  • 工具实现:vLLM、llama.cpp、TensorRT-LLM 均已原生支持

Open Questions

  • 当批量大时(batch size > 8),Speculative Decoding 的加速效果如何保持?是否需要新的算法变体?
  • 多模态生成(图文混合)中的 Speculative Decoding 是否可行?图像 token 和文本 token 的猜测策略如何设计?
  • 在端侧设备上,如何在有限内存中实现高效的 draft 策略?
  • 动态调整猜测长度:根据当前任务难度和历史接受率动态调整每次猜测的 token 数量?

Sources

AI Knowledge Base — 持续积累