> For the complete documentation index, see [llms.txt](https://yeasy.gitbook.io/llm_internals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yeasy.gitbook.io/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/10_inference_optimization/10.6_speculative_decoding.md).

# 10.6 投机解码：为什么“先猜后验”能加速

## 10.6.1 核心思想

**投机解码**（Speculative Decoding）打破了自回归解码“每步只生成一个词元”的限制。它使用一个小的**草稿模型**快速猜测多个后续词元，然后用大的**目标模型**并行验证所有猜测。

关键数学保证是：经典 speculative sampling 的接受/拒绝算法可以做到与目标模型原始自回归采样产生完全相同的分布，即在该设定下是“无损”的加速。Medusa、EAGLE、Lookahead 等变体是否保持严格同分布，取决于各自的验证和采样算法。

## 10.6.2 为什么有效

大语言模型中大量的词元实际上是“容易预测”的（如常见词组、语法词、标点等）。对于这些位置，小模型的猜测通常与大模型一致，因此可以一次性通过多个词元的验证。

只有在小模型猜错的位置，才需要回退并使用大模型的预测。统计上，一次投机解码步骤通常能接受 1-3 个词元，将吞吐量提升 1.5-2.5 倍（最优场景下可达 2-3 倍，取决于草稿模型质量和任务类型）。

## 10.6.3 实际部署

投机解码已成为主流推理框架中的常见可选优化。vLLM、TensorRT-LLM 和 SGLang 等框架提供了不同形态的支持，但生产收益高度依赖草稿模型质量、批量大小、采样温度和请求分布；是否启用以及如何自适应控制，需要用目标业务流量实测。

除了“小草稿模型 + 大目标模型”的经典形态，近年的系统还发展出几类变体：**Medusa** 在目标模型上增加多个解码头，用树状注意力一次提出多条候选；**EAGLE** 在倒数第二层特征空间预测草稿，再由原模型验证；**Lookahead Decoding** 则尝试用并行的 n-gram 候选和验证打破逐词串行瓶颈。这些方法的共同目标都是提高每次目标模型前向传播可接受的词元数。

## 10.6.4 性能因素与工程约束

投机解码的实际加速效果取决于三个关键因素：

1. **草稿词元成本**：生成草稿词元并非免费——它消耗计算和内存资源。目标模型的优势不在于“验证一个词元天然很便宜”，而在于一次并行前向可以验证多个草稿词元；只有当平均接受长度足以覆盖草稿模型和验证开销时，整体才会加速
2. **草稿序列长度**：每次前向传递生成的草稿词元数量。一旦某个草稿词元被拒绝，其后的所有词元也会被丢弃，因此应追求短而高命中率的序列
3. **词元接受率**：目标模型接受的草稿词元占比。接受率在序列早期较高，随深度递增而下降

工程中需要特别注意以下约束：

* **温度参数的影响**：较高的采样温度导致词元分布更难预测，降低投机解码的有效性。在创意写作等高温度场景下，投机解码的收益可能大幅缩水
* **批量大小的限制**：投机解码在低批量大小时最有效，因为此时 GPU 有空闲计算资源可用于验证。当批量增大、计算资源饱和时，投机解码需要被动态禁用
* **内容领域的差异**：草稿模型在不同主题上的预测准确度不同——如果草稿模型在数学领域比历史领域更擅长，那么数学相关生成的接受率会更高

实践中，找到正确的投机解码配置需要耐心的实验。据报道，推理工程师有时需要尝试数十种不同的配置组合，才能找到最优方案。技术之间也存在相互影响：量化 KV 缓存可以缓解分离式架构中的瓶颈，但增大批量大小会减少可用于投机验证的空闲计算资源。
