7.3 Speculative Decoding:投机采样加速


文档摘要

7.3 Speculative Decoding:投机采样加速 PagedAttention 让显存利用率提升、量化让权重变小,但 LLM 生成的「每步一次前向」的串行瓶颈仍未突破——Speculative Decoding 用「小模型草稿 + 大模型校验」的妙招,让大模型一次能生成多个 token,做到「无损加速」2-3 倍。 7.3.1 自回归的串行瓶颈 回顾第 6 章 6.2 节:LLM 自回归生成是「每步一次前向,每步一个 token」。这种严格的串行性是 LLM 生成的根本瓶颈——无论硬件多快,生成 N 个 token 至少要 N 次前向。 这种串行性在 Decode 阶段尤其浪费:每步只算 1 个 token,GPU 的并行计算能力严重闲置(瓶颈在显存带宽而非算力)。

7.3 Speculative Decoding:投机采样加速

PagedAttention 让显存利用率提升、量化让权重变小,但 LLM 生成的「每步一次前向」的串行瓶颈仍未突破——Speculative Decoding 用「小模型草稿 + 大模型校验」的妙招,让大模型一次能生成多个 token,做到「无损加速」2-3 倍。

7.3.1 自回归的串行瓶颈

回顾第 6 章 6.2 节:LLM 自回归生成是「每步一次前向,每步一个 token」。这种严格的串行性是 LLM 生成的根本瓶颈——无论硬件多快,生成 N 个 token 至少要 N 次前向。

这种串行性在 Decode 阶段尤其浪费:每步只算 1 个 token,GPU 的并行计算能力严重闲置(瓶颈在显存带宽而非算力)。如果能「一次算多个 token」,就能让闲置的算力派上用场。

Speculative Decoding(投机解码,也称 Speculative Sampling) 就是为此而生。它的核心思想是:用一个小的「草稿模型」快速猜多个 token,再用大的「目标模型」一次性校验,校验通过的 token 直接采纳

7.3.2 草稿-校验:投机采样原理

Speculative Decoding 的基本流程:

  1. 草稿生成:用一个小的草稿模型(draft model,如 1B 参数)自回归生成 γ 个候选 token(如 γ=4)。
  2. 大模型并行校验:用大的目标模型(target model,如 70B 参数)一次性前向,并行计算这 γ+1 个位置的 logits。
  3. 接受/拒绝采样:对比草稿模型与目标模型的概率分布,按接受概率决定每个 token 是否接受。
  4. 修正与继续:接受则继续下一个,拒绝则用目标模型的分布重新采样一个 token,并丢弃后续草稿。

关键观察:大模型校验 γ 个 token 只需一次前向(因为 Transformer 可以并行处理一个序列),而小模型生成 γ 个 token 需要 γ 次前向。所以:

  • 如果全部草稿都被接受:用 γ+1 次前向生成了 γ+1 个 token(1 次大模型 + γ 次小模型),相对纯大模型的 γ+1 次前向,节省了 γ 次大模型前向
  • 由于小模型前向远快于大模型(小模型算力需求小、Decode 快),整体加速显著。

7.3.3 为什么「无损」:接受/拒绝采样的精妙

Speculative Decoding 的精妙之处在于「无损保证」——它不是简单「接受或拒绝」,而是设计了一个接受/拒绝采样机制,让最终输出与纯大模型生成的分布严格一致

具体来说,对于草稿模型建议的 token x

  • 设草稿模型概率为 q(x),目标模型概率为 p(x)
  • 接受概率为 \min(1, p(x) / q(x))
  • 若拒绝,按 (p(x) - q(x))^+ 归一化后的分布重新采样。

这种「rejection sampling」保证了:

  • 最终输出的每个 token 都服从目标模型的分布 p(x)
  • 与「纯目标模型生成」的输出分布完全一致(数学上严格证明)。
  • 因此是「无损」加速——不牺牲任何输出质量。
P(\text{最终输出 } x) = p(x) \quad \text{(与纯目标模型生成一致)}

💡 判读:「无损」是 Speculative Decoding 区别于其他加速技术(如量化有损)的关键。它不改变输出质量,只是让目标模型更高效地工作。这种「数学上严格等价」的特性让它成为高敏感场景(如代码生成、数学推理)的首选加速方案。

7.3.4 加速比:取决于「命中率」

Speculative Decoding 的实际加速比取决于「草稿被接受的概率」(acceptance rate / hit rate):

  • 高命中率:草稿模型与目标模型相似度高(如都是 LLaMA 系列),草稿常被接受,加速明显(2-3x)。
  • 低命中率:草稿模型与目标模型差异大(如草稿是英文小模型、目标是中文大模型),草稿常被拒绝,加速微弱甚至变慢(小模型前向也算开销)。

影响命中率的因素:

因素 影响
草稿与目标的相似度 高 → 命中率高
γ(草稿长度) 适中最好,太大后面 token 命中率下降
任务类型 简单/重复任务命中率高,创造性任务低
温度 低温度(确定性强)命中率高
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 260" font-family="sans-serif" font-size="12"> <text x="360" y="22" text-anchor="middle" font-size="15" font-weight="bold">Speculative Decoding 加速比与命中率</text> <line x1="80" y1="220" x2="680" y2="220" stroke="#475569" stroke-width="1.5"/> <line x1="80" y1="220" x2="80" y2="50" stroke="#475569" stroke-width="1.5"/> <!-- 加速曲线 --> <path d="M 80 210 Q 250 200 400 130 T 680 60" fill="none" stroke="#16a34a" stroke-width="3"/> <text x="600" y="80" font-size="11" fill="#16a34a">加速比</text> <g font-size="10" fill="#64748b"> <text x="80" y="240" text-anchor="middle">0%</text> <text x="240" y="240" text-anchor="middle">25%</text> <text x="400" y="240" text-anchor="middle">50%</text> <text x="560" y="240" text-anchor="middle">75%</text> <text x="680" y="240" text-anchor="middle">100%</text> <text x="350" y="255" text-anchor="middle">命中率</text> <text x="74" y="225" text-anchor="end">1x</text> <text x="74" y="150" text-anchor="end">2x</text> <text x="74" y="80" text-anchor="end">3x</text> </g> <text x="360" y="180" text-anchor="middle" font-size="11" fill="#475569" font-style="italic">典型场景命中率 50%-80%,加速 1.5-2.5x</text> </svg>

⚠️ 现实代价:Speculative Decoding 不是「总是加速」。如果草稿模型选得差,命中率低,整体可能比纯大模型还慢(小模型前向的额外开销没被节省的大模型前向抵消)。生产部署要先 benchmark 命中率。

7.3.5 Speculative Decoding 的变体

围绕「草稿怎么生成」这一核心,业界演化出了多种变体:

经典 Speculative Decoding(两模型)

用一个独立的草稿模型生成。这是最早、最基础的方案。优势是简单,劣势是要维护两个模型。

Medusa:多头并行草稿

Medusa 在目标模型上额外训练几个「MEDUSA HEAD」,每个 head 预测后续若干位置的 token。这样草稿就是目标模型自己生成的,无需独立草稿模型。

  • 优势:无需独立草稿模型,部署简单。
  • 劣势:需要训练 Medusa head(要少量微调目标模型)。

EAGLE:基于特征的草稿

EAGLE 用目标模型的隐藏层特征(而非仅 token)作为草稿模型的输入,让草稿更精准。

  • 优势:命中率比 Medusa 高。
  • 劣势:草稿模型结构更复杂。

Self-Speculative:跳层草稿

Self-Speculative Decoding(如 LayerSkip)让目标模型「跳过几层」作为草稿模型——同一个模型,浅层作草稿、深层作校验。无需独立草稿模型,无需训练 head。

Lookahead Decoding:N-gram 草稿

Lookahead Decoding 用 N-gram 匹配(从已生成内容找候选)生成草稿,完全无需神经网络草稿模型。适合代码、结构化文本(重复模式多)的场景。

变体 草稿来源 训练成本 命中率 部署复杂度
经典(两模型) 独立小模型 无需 中-高
Medusa 目标模型 head 训练 head
EAGLE 特征驱动 训练草稿 中高
Self-Speculative 跳层 无需
Lookahead N-gram 无需 中(结构化高)

7.3.6 Speculative Decoding 与其他优化的关系

Speculative Decoding 与第 6-7 章的其他优化是叠加关系,可以同时使用:

Speculative + PagedAttention

二者完全兼容。草稿与目标模型的 KV Cache 都用 PagedAttention 管理,加速与高显存利用率兼得。

Speculative + 量化

草稿模型可以用 INT4 量化(更小、更快),目标模型也可以量化。叠加效果显著。

Speculative + Chunked Prefill

Speculative 主要加速 Decode(生成阶段),与 Prefill 阶段无关。二者作用于不同阶段,可同时用。

💡 判读:现代 LLM 推理优化的精髓是「多管齐下」——PagedAttention 治显存、量化治算力、Chunked Prefill 治调度、Speculative 治串行。这些优化作用在不同维度,可以叠加使用。一个生产 LLM 推理服务通常同时启用全部四种优化。

7.3.7 Speculative Decoding 的工程挑战

实际部署 Speculative Decoding 的几个挑战:

草稿模型选择

选什么作为草稿模型?理想是「与目标模型同家族、参数量 1/10-1/50」的小模型。如目标 LLaMA-70B,草稿可用 LLaMA-7B 或 1B。但有些模型没有同家族小模型,要训练专门的草稿。

草稿模型的算力开销

草稿模型自身也要算力。如果草稿模型大(如 7B),它生成 γ 个 token 的开销可能抵消大模型节省的开销。要权衡草稿大小与命中率。

γ 的选择

γ(草稿长度)选多少?太大后面 token 命中率下降、浪费;太小节省的开销少。典型值 4-8,要根据负载实测。

与 batching 的兼容

在 Continuous Batching 下,多个请求的草稿生成与校验要协调——可能不同请求的草稿长度不同,校验时机不同。这增加了调度复杂度,现代引擎(vLLM、SGLang)已较好支持。

调试与可观测性

Speculative Decoding 的命中率与加速比要可观测。如果命中率突然下降(如输入分布变化),加速比可能反转,要能监控并切换回纯目标模型。

7.3.8 何时用 Speculative Decoding

Speculative Decoding 不是「默认开」的优化,它有适用场景:

场景 推荐度 理由
实时聊天(低延迟优先) 强烈推荐 显著降低 TTFT/TPOT
代码生成 推荐 代码重复模式多,命中率高
数学推理 推荐 推理步骤确定性强
创意写作 一般 创造性高,命中率低
批量离线(吞吐优先) 不推荐 加速单请求不如直接大 batch
多租户高并发 看负载 高并发时算力已被 batch 占用,speculative 收益下降

💡 判读:Speculative Decoding 的最大价值在「延迟敏感」场景——让用户感觉「秒回」而非「等秒」。对延迟敏感的实时应用(聊天、代码助手),它几乎是必选项;对吞吐敏感的离线场景,量化与 PagedAttention 的优先级更高。

7.3.9 Speculative Decoding 的未来

Speculative Decoding 是 2023-2024 年最活跃的 LLM 推理研究方向之一。几个趋势:

  1. 草稿模型轻量化:用更小的草稿(如 100M 参数)配合更智能的接受策略。
  2. 草稿与目标模型协同训练:让目标模型在训练时就「配合」草稿,提升命中率。
  3. 树形草稿:不只生成一条草稿链,而是一棵「草稿树」,并行探索多个候选。
  4. 硬件加速:定制硬件(如 LPU、专用 ASIC)原生支持 speculative。

这些方向正在快速演进,未来 1-2 年的 LLM 推理延迟可能会有进一步突破。

本节小结

  • 自回归的串行瓶颈(每步一次前向)是 LLM 生成的根本限制,Speculative Decoding 用「草稿-校验」突破它。
  • 流程:小草稿模型生成 γ 个候选 token → 大目标模型一次前向并行校验 → 接受/拒绝采样。
  • 「无损保证」来自 rejection sampling:最终输出分布与纯目标模型严格一致。
  • 加速比取决于命中率:草稿与目标相似度高、任务确定性强 → 命中率高、加速 2-3x。
  • 变体:经典两模型、Medusa(多头)、EAGLE(特征)、Self-Speculative(跳层)、Lookahead(N-gram)。
  • 与 PagedAttention、量化、Chunked Prefill 是叠加关系,可同时使用——多管齐下是现代优化精髓。
  • 工程挑战:草稿选择、算力开销、γ 选择、batching 兼容、可观测性。
  • 适合场景:延迟敏感(聊天、代码、推理),不适合吞吐优先(离线批量)。
  • 未来方向:草稿轻量化、协同训练、树形草稿、硬件加速。

下一节《7.4 分离式推理与多模态/Agent 推理》将讲清 PD 分离这一架构级创新。


发布者: 作者: 灏天文库 转发
评论区 (0)
U