LLM 推理 · 投机解码

大模型投机解码详解:
让小模型打草稿,推理速度提升 2~3 倍

「小模型猜、大模型验」——一个数学上无损、工程上白得 2~3 倍加速的技术

大模型推理慢,慢在哪里?慢在 Decode。每生成一个 token,都要把整个模型的权重从显存搬一遍,却只做一次极小的矩阵运算——GPU 算力大量空转在等数据(详见《Prefill 和 Decode》与《HBM 显存》)。

投机解码(Speculative Decoding)就是为这个场景设计的:用一个便宜的小模型快速「猜」出接下来几个 token,再让大模型一次性并行验证。猜对了白赚,猜错了回退——而且数学上严格保证:输出分布与大模型独立生成完全一致。

为什么需要

一、为什么需要投机解码:Decode 的访存困境

1. Decode 的病根:算力在挨饿

阶段计算形态瓶颈
Prefill大矩阵 × 大矩阵(矩阵乘矩阵)算力
Decode1×d 向量 × d×d 矩阵(矩阵乘向量)显存带宽

Decode 每步只处理一个 token,却要读取全部权重和 KV Cache。运算强度(每字节约运算次数)远低于拐点——显存带宽跑满,Tensor Core 闲着。

2. 投机解码的本质:把「矩阵乘向量」变回「矩阵乘矩阵」

既然 Decode 的瓶颈是访存而不是算力,那就让每一次大模型的调用多算几个 token:

朴素解码:  [1 个 token]  → 大模型 → [1 个 token]  → ...   (每步都读一遍权重)
投机解码:  [K 个候选]    → 大模型一次并行验证 → [多个 token] (读一遍权重算 K+1 个)

同样的权重读取开销,一次产出多个 token——用闲置的算力换时间。这与 continuous batching 的思路异曲同工(后者跨请求拼 batch,投机解码在单请求内拼 token)。

核心原理

二、核心原理:草稿 → 验证 → 拒绝采样

1. 三步流程

  1. 草稿(Draft):小模型(或额外预测头)自回归快速生成 K 个候选 token
  2. 验证(Verify):大模型接收 前缀 + K 个候选,一次前向并行算出这 K+1 个位置的完整概率分布(用因果 mask 保证每个位置只看前面)
  3. 接受/拒绝:从前往后逐位比对——
情况处理
目标模型概率 ≥ 草稿模型概率直接接受该 token
目标模型概率 < 草稿概率以「两概率之比」为概率随机接受;否则拒绝
某位置被拒绝从目标模型在该位置的分布重新采样,丢弃其后所有草稿 token

2. 无损:不是近似,是严格相同

上述第三步的「按比值随机接受 + 拒绝后从目标分布重采样」,正是经典的拒绝采样(rejection sampling)。它带来一个严格结论:

投机解码的输出分布,与目标模型独立自回归生成的分布完全一致。

不是近似、不是「差不多」——是数学上相同。所以投机解码是「无损加速」:质量不降,只是更快。

3. 加速比:接受率决定一切

设单 token 接受率为 α、草稿模型速度是大模型的 r 倍、每次猜 K 个:

加速比 ≈ (1 + α + α² + ... + α^K) / (1 + K/r)

现实中的经验值:

一句话:接受率是投机解码的生命线。草稿模型越懂目标模型,α 越高,收益越大。

方案谱系

三、方案谱系:从独立草稿模型到特征级预测

1. 原始方案:独立小模型草稿

最早由 Google Research(Leviathan 等,2022 年底)提出:直接拿一个同族小模型(如 7B 模型的 1B 版本)当草稿模型。

2. Medusa:多头预测,不要草稿模型

在目标模型上挂多个预测头(Medusa Heads),并行预测未来多个位置的 token:

3. EAGLE / EAGLE-2 / EAGLE-3:特征级预测(当前主流)

EAGLE 的关键洞察:草稿阶段不应该预测 token,而应该预测特征(hidden state)——因为顶层特征能编码更丰富的信息。

4. Lookahead Decoding:不用草稿模型

用 Jacobi 迭代并行生成 n-gram 候选,再验证——不需要额外模型也不需要训练,但加速比相对有限(约 1.94x)。

5. Prompt Lookup Decoding:最省事的 n-gram 检索

直接从当前 prompt 里检索重复片段当草稿(类似 n-gram 查表):

6. 方案对比

方案是否需要草稿模型是否需要训练典型加速比特点
原始 Speculative是(同族小模型)否2x 左右简单,接受率一般
Medusa否(多头)是~1.6x省显存,树状验证
EAGLE轻量草稿模型是2.7~3.5x特征级预测,当前主流
EAGLE-2同上是更高动态草稿树
EAGLE-3同上是~3.5x直接预测 token,数据扩 8 倍
Lookahead否否~1.9xJacobi 迭代,免训练
Prompt Lookup否否视任务n-gram 检索,实现最简
工程实践

四、工程实践:怎么配、怎么调

1. vLLM 配置(示例)

from vllm import LLM, SamplingParams

llm = LLM(
    model="Qwen/Qwen3-8B",
    speculative_config={
        "model": "Qwen/Qwen3-8B-eagle3",   # EAGLE-3 草稿模型
        "num_speculative_tokens": 4,        # 每轮猜 4 个 token
    },
    tensor_parallel_size=1,
    gpu_memory_utilization=0.9,
)

params = SamplingParams(temperature=0.0, max_tokens=2048)  # 贪心解码接受率最高

vLLM 0.4+ 已原生支持 eagle / eagle3 等草稿模型类型。

2. SGLang 参数

参数作用
--speculative-algorithm EAGLE启用 EAGLE 投机解码
--speculative-num-steps每步草稿展开层数
--speculative-eagle-topk每步候选分支数(1 表示单路径)
--speculative-num-draft-tokens单次校验的草稿 token 总数

3. 核心调优开关

开关建议
num_speculative_tokens(K)从 4 起步,逐级试 4/6/8;K 太大收益递减且验证开销上升
temperature贪心(0)接受率最高;temperature 越高,草稿分布越难对齐,α 越低
草稿模型选择与目标模型「同族 + 经 EAGLE 训练」效果最好
树宽(topk)EAGLE-2/3 可适度加宽分支,提升命中率,但验证成本上升

4. 关键指标:盯住接受率

5. 什么时候用、什么时候别用

场景是否适合原因
低并发、降单请求延迟✅ 非常适合正是把带宽瓶颈换成算力
贪心/低 temperature 生成✅ 适合接受率最高
输入输出高度重叠(摘要/改写/代码)✅ 适合可用 Prompt Lookup 零成本拿到收益
大 batch 高并发⚠️ 收益下降算力已被 batch 填满,投机解码挤不进闲置算力
高 temperature 创意写作⚠️ 收益差分布随机性大,接受率低
草稿模型与目标模型不同族❌ 别用接受率低,反而更慢

6. 与其他优化叠加

落地要点

五、落地设计要点(八条)

  1. 先确认瓶颈在 Decode:如果请求是长 prompt 短输出(Prefill 为主),投机解码收益有限
  2. 优先选 EAGLE-3 系草稿模型:与目标模型同族、经过专门训练,接受率最高
  3. 从 K=4 起步调 K:观察接受率与端到端延时,K 过大反而拖慢
  4. 接受率低于 0.5 就换方案:先换草稿模型,再考虑调参
  5. 贪心场景优先启用:temperature=0 时收益最大,是高确定性任务的默认优化
  6. 高并发场景要实测:大 batch 下收益会被摊薄,务必用真实流量压测
  7. 显存预算要重算:草稿模型 + 树状 KV 会额外占用显存,gpu_memory_utilization 留出余量
  8. 与连续批处理叠加而非替代:它解决的是「单请求内的并行」,两者互补
总结

六、写在最后

投机解码之所以优雅,在于它同时满足三个条件:

它的收益不来自「更强的硬件」,而来自认清瓶颈后换一种计算方式——这正是大模型推理优化的通用方法论。

关于向量云:大模型落地,把基础设施的复杂性留给我们

推理加速、显存调度、成本控制,都是持续的基础设施工程。向量云(南京)科技有限公司依托字节跳动火山方舟官方授权,专注大模型应用落地:

向量云能力说明
官方授权接入火山方舟官方 API 与官方 Key 直连
低折扣 Token专属折扣价,用量越大越划算
独享接入点独立接入点,缓存与配额不被公共池挤占
缓存隔离降本上下文缓存红利稳定落袋
计费灵活按量计费、即用即扣、注册充值 10 元起
协议兼容OpenAI 兼容协议,业务代码几乎零改动

接入方式:注册后获取官方 API Key,把 base_url 指向向量云接入点即可直接调用火山方舟官方模型。

获取 API Key:https://ark.tokenrize.cn/ · 火山方舟官方 API 与 Key 直连,注册即用

一句话总结:小模型猜、大模型验、拒绝采样保无损——投机解码把 Decode 浪费的算力收回来,是「白得」的 2~3 倍加速。

关于向量云
向量云(南京)科技有限公司

面向大模型应用落地的技术服务型企业,依托字节跳动火山方舟能力,为合作方提供低折扣模型 Token、可独立部署的运营支撑平台及全链路运营支持。

火山方舟官方授权 官方 API Key 独享接入点 缓存隔离降本 低折扣 Token 即用即扣 · 不设账期

常见问题(FAQ)

火山方舟官方 API 与官方 Key 直连 · 向量云 · 大模型推理加速

Q1. 投机解码是什么?为什么能加速?

A. 投机解码(Speculative Decoding)用一个轻量草稿模型快速生成 K 个候选 token,再由目标大模型一次前向并行验证。它加速的本质是把 Decode 阶段「矩阵乘向量」的低效计算,变成「矩阵乘矩阵」——同样的权重读取开销一次产出多个 token,从而用闲置算力换时间。

Q2. 投机解码会损失模型质量吗?

A. 不会,且是严格无损。验证阶段采用拒绝采样:目标模型概率不低于草稿模型就直接接受,否则按概率之比随机接受,被拒绝的位置从目标模型分布重新采样并丢弃后续草稿。数学上可证明输出分布与目标模型独立生成完全一致——不是近似。

Q3. 加速比由什么决定?

A. 主要由接受率 α 与草稿成本决定,公式约为 (1 + α + α² + ... + α^K) / (1 + K/r)。实践中 α 通常 0.6~0.8、K 取 4~8,加速比 2~3 倍;EAGLE-3 等优化方案接受率可达 80%~85%,加速比可到 3~6 倍。α 低于 0.5 时加速有限甚至变慢。

Q4. Medusa、EAGLE、Lookahead 有什么区别?

A. Medusa 在目标模型上挂多个预测头,无需独立草稿模型,用树状注意力验证多条路径(约 1.6x);EAGLE 系列在特征层做自回归草稿,EAGLE-2 用动态草稿树,EAGLE-3 直接预测 token 并把训练数据扩到约 8 倍(约 3.5x),当前最主流;Lookahead 用 Jacobi 迭代并行生成候选,免草稿模型也免训练(约 1.9x)。

Q5. 什么场景适合用投机解码?

A. 最适合「低并发、降单请求延迟、temperature 较低(贪心)」的场景,以及输入输出高度重叠的任务(摘要、改写、代码编辑——可用 Prompt Lookup 零成本获益)。相反,大 batch 高并发时算力已被填满,收益被摊薄;高 temperature 创意写作分布随机性大、接受率低,收益也差。

Q6. 在 vLLM 里怎么配置?

A. 在 LLM() 中传 speculative_config,指定 EAGLE-3 等草稿模型路径与 num_speculative_tokens(如 4),采样时 temperature 设为 0(贪心)可获得最高接受率。vLLM 0.4+ 已原生支持 eagle/eagle3 等类型。SGLang 侧用 --speculative-algorithm EAGLE 配合 --speculative-num-steps、--speculative-eagle-topk、--speculative-num-draft-tokens 调优。

Q7. 投机解码和连续批处理、量化冲突吗?

A. 不冲突,三者正交可叠加。连续批处理是吞吐提升的第一大来源(跨请求拼 batch),投机解码是叠加其上的第二层收益(单请求内拼 token);量化降低显存与带宽压力。要注意的是草稿模型与树状 KV 会额外占显存,需重算 gpu_memory_utilization 并留出余量。