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

## 10.6.1 核心思想

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

关键数学保证是：**验证过程可以做到与原始自回归解码产生完全相同的分布**——即投机解码是“无损”的加速。

## 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. **草稿 Token 成本**：生成草稿 Token 并非免费——它消耗计算和内存资源。不过，目标模型验证一个草稿 Token 远比自行生成一个 Token 快得多。类比数独游戏：解题很难，但检查答案是否正确很容易
2. **草稿序列长度**：每次前向传递生成的草稿 Token 数量。一旦某个草稿 Token 被拒绝，其后的所有 Token 也会被丢弃，因此应追求短而高命中率的序列
3. **Token 接受率**：目标模型接受的草稿 Token 占比。接受率在序列早期较高，随深度递增而下降

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/llm_internals/di-san-bu-fen-tui-li-yu-bu-shu-pian/10_inference_optimization/10.6_speculative_decoding.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
