Self-Speculative Decoding 简史:不引入额外模型,用自己给自己打草稿这件事到底能走多远

Self-Speculative Decoding 简史:不引入额外模型,用自己给自己打草稿这件事到底能走多远

声明:本文是对以下七篇论文的简单概要,基于论文原文和博客整理,内容有所精简,不构成完整综述。如需深入了解,建议阅读各论文原文(正文附有链接)。


1. 为什么要研究 Self-Speculative Decoding

Speculative Decoding(投机解码)这两年在 LLM 推理加速领域火了起来。核心思路人尽皆知:找一个便宜的小模型快速起草(draft)一批 token,再让大模型一次性并行验证,输出分布完全等价于原始自回归解码——无损加速。

但标准 Speculative Decoding 有个绕不开的工程麻烦:小模型从哪来?

7B 的 target 模型要配一个 700M 的 draft 模型,词表得对齐,输出分布得相近,还得额外占一份显存,运维两个模型。这在工业落地里是个实实在在的负担——不是每家都有现成配好的 draft 模型,也不是每个场景都有多余显存放它。

Self-Speculative Decoding(SSD)的出发点就是把这个外部依赖砍掉:不引入任何额外模型,用同一个模型的某个”瘦身版”来起草,完整版来验证,权重完全共享,零额外显存开销。

从 2023 年第一篇正式提出这个范式,到 2026 年已经扩展到 MoE、扩散语言模型、语音识别等多个方向。这篇文章把这条线索梳理一遍。


2. 范式起点:Draft & Verify(EMNLP 2023)

论文Draft & Verify: Lossless Large Language Model Acceleration via Self-Speculative Decoding

这篇 IBM Research 的工作正式提出了 SSD 的基本范式:跳过部分中间层来生成 draft,完整模型来 verify

关键观察是 LLM 的层稀疏性——中间层的 attention 和 MLP 对很多 token 的贡献其实很小,跳过它们输出分布变化不大。跳掉若干层就得到一个权重共享的”瘦身版子模型”,草稿阶段用它,验证阶段走完整模型,verify 通过就接受,否则从完整模型的分布重采样,输出分布有严格的理论保证。

最大的工程问题:跳哪些层?论文用贝叶斯优化来搜,每次搜索要跑 6-7 小时,而且是 task-specific 的——在摘要任务上搜出的最优配置,拿到代码生成任务上用,acceptance rate 从 92% 直接跌到 68%。换个任务,重新搜。

这个痛点直接催生了后面两篇工作。


3. 训练端的解法:LayerSkip(ACL 2024)

论文LayerSkip: Enabling Early Exit Inference and Self-Speculative Decoding(Meta)

Draft & Verify 的问题根源在于:模型训练时从来没有为”跳层推理”做过准备,越靠后的层对前面所有层的依赖越深,强行跳掉中间层质量当然不稳定。

LayerSkip 的思路是从训练端解决:让模型从一开始就学会在任意早期层退出

训练时加了两个改动:

层级 Dropout:普通 dropout 作用在神经元,这里 dropout 作用在整个 Transformer 层,且越靠后的层 dropout 概率越高($p_l = (l/L) \times p_{\max}$)。后面的层经常”消失”,模型被迫在更浅的层学会有意义的表征。

共享 Early Exit Loss:所有层共享同一个 LM Head,训练时对多个中间层同时算 cross-entropy,加权求和作总 loss。浅层 hidden state 被强制对齐词表空间,从中间层退出也能输出有意义的 token。

推理时,draft 阶段只跑前 E 层然后用共享 LM Head 出 token,verify 阶段走完整 L 层。在 Llama 2 系列上实测加速比最高 2.16×,而且跨任务迁移稳定,不需要任何搜索。

代价是:必须用特定配方重新训练模型,已有的 checkpoint 不能直接用。


4. 免训练免搜索:SWIFT(ICLR 2025)

论文SWIFT: On-the-Fly Self-Speculative Decoding for LLM Inference Acceleration

两个问题:Draft & Verify 需要离线搜索几个小时,LayerSkip 需要重训模型。SWIFT 的主张是:层稀疏性是 LLM 的内在属性,可以在推理过程中即时发现,搜索开销只占总推理时间的 0.8%。

SWIFT 做了一个反直觉的实验:对 LLaMA-2 直接均匀跳掉一半的层(every other layer),acceptance rate 高达 90% 以上,初步加速 1.22×——说明层稀疏性比大家以为的要强得多。

但均匀跳层离最优还有差距,而且跨任务迁移很差(从摘要任务搜出的配置用到 reasoning 上,speedup 从 1.47× 跌到 0.99×)。

SWIFT 的解法:把搜索放进推理流程本身。生成序列的前几个 token 用作在线优化阶段——拿已生成的 token 当 ground truth,评估不同层配置的 matchness(预测匹配率),用进化算法快速找到当前 prompt 的最优跳层配置。之后切换到置信度感知加速模式,高置信度位置用跳层 draft,低置信度位置走完整模型。

完全即插即用,不改模型,不离线搜索。在 LLaMA 和 Mistral 系列上,speedup 可以达到 1.3×~1.6×。


5. 向 MoE 扩展:SS-MoE(WWW 2026)

论文SS-MoE: Self-Speculative Decoding for MoE Inference under Memory Constraints

前三篇都是 Dense 模型。SS-MoE 把 SSD 搬到了 MoE 架构,而且专门针对端侧显存受限场景——这是一个完全不同的问题设定。

MoE 的核心矛盾:稀疏激活节省计算,但全量加载消耗显存,CPU offloading 引入 IO 瓶颈。每个 decode step,router 决定用哪几个 expert 之前,根本无法预取,只能等 IO 延迟。

SS-MoE 的思路是:draft 阶段用更少的 expert(如 top-3 代替 top-6),需要加载的参数更少,IO 更快;verify 阶段用完整 expert 数,理论上输出分布不变。实验显示 top-3 expert 能达到 top-6 约 94% 的精度,acceptance rate 在 85% 以上,结合置信度感知策略(高置信度的 token 不做 verify,直接接受),在 CPU offloading 场景下实测加速 2.37×

这是 SSD 在资源受限端侧场景的第一次系统性探索。


6. 向扩散语言模型扩展:SSD for dLLMs(2025)

论文Speculative Decoding for Diffusion Language Models

自回归语言模型的解码是严格串行的,但扩散语言模型(dLLM,如 MDLM、LLaDA)的生成方式完全不同——它通过多步去噪过程生成,每步都在处理整个序列,本身就有一定的并行性。

SSD for dLLMs 把推测解码的思想移植过来:用更少的去噪步数快速生成 draft 序列,再用完整步数 verify。dLLM 的特殊性在于 verify 阶段可以对所有 token 一次性做,天然比自回归模型高效。

实测加速比最高 3.46×,是目前这几篇里绝对数字最高的,说明 dLLM 的结构更适合推测式加速。


7. 向语音识别扩展:SSD for ASR(arXiv 2026)

论文Self-Speculative Decoding for Speech Recognition

ASR 系统里,CTC 和自回归 LLM 的组合很常见。CTC 是 Conformer encoder 上的附属头,不需要 LLM 就能做一遍快速的整句转录,速度快但质量略差。

这篇工作的思路:用 CTC 输出当 draft,LLM 来 verify。流程分两道 filter:先算 CTC 帧级熵,熵低说明 CTC 非常确信,直接接受跳过 LLM;熵高的 token 再送进 LLM,计算 LLM 的 log-likelihood,超过阈值则接受 CTC 的结果,否则走完整 AR 解码。第二道 filter 是一次 O(1) 的并行 forward,速度接近 prefill。

整体比完整 AR 快 3.79×,同时 WER 几乎无损——CTC 和 LLM 共享了 encoder,天然语义对齐,这是 SSD 思路在 ASR 领域能奏效的关键原因。


8. 回到大 batch serving:SparseSpec(2026)

论文SparseSpec: Sparse Attention with Self-Speculative Decoding for Efficient LLM Serving

如果说前面几篇解决的是”单请求怎么快”,SparseSpec 解决的是 “大 batch 服务场景下怎么拿到接近理论的加速比”

标准推测解码在大 batch 场景里折扣很大:草稿阶段只处理部分请求,GPU 利用率低;验证阶段再切回来,两头都低效。SparseSpec 结合稀疏 attention 和 SSD:draft 阶段用稀疏 attention(只 attend top-K 重要 token,显存带宽消耗压缩到完整 attention 的 5% 左右),verify 阶段走完整 attention——本质是一种 SSD,draft model 和 target model 用同一套参数,差别只是 attention 的稀疏程度。

关键创新是 PillarAttn:用 verify 阶段的完整 attention pattern 来指导下一轮 draft 阶段的稀疏 pattern,而不是静态选 top-K。这解决了”草稿阶段该 attend 哪些 token”这个问题,实测在大 batch 场景下达到 2.1×,同时 GPU 利用率显著提升。


9. 整体脉络

把这七篇放在一起看,SSD 的演化轨迹很清晰:

范式确立(2023):Draft & Verify 提出跳层 SSD,证明可行,但搜索代价高、跨任务差。

训练支持(2024):LayerSkip 从根本上解决跨任务问题,代价是需要重训。

免训练自适应(2025):SWIFT 把搜索嵌进推理流程,即插即用,覆盖现有 checkpoint。

向更多场景扩展(2025-2026):SSD 的核心思路——用”便宜版自己”起草,”完整版自己”验证——被证明在 MoE、扩散模型、语音识别等场景同样有效,而且每个场景都有其独特的加速来源(端侧 IO 瓶颈、去噪并行性、CTC 快速转录)。

回到工程现实(2026):SparseSpec 把 SSD 和稀疏 attention 结合,在大 batch serving 场景里拿到工程上真正有意义的加速。

工作 发表 核心方法 加速比 特点
Draft & Verify EMNLP’23 贝叶斯搜索跳层配置 1.99× 开山之作,需离线搜索
LayerSkip ACL’24 训练时层级 dropout + Early Exit Loss 2.16× 跨任务稳定,需重训
SWIFT ICLR’25 推理时在线自适应层配置 1.3~1.6× 即插即用,零额外成本
SS-MoE WWW’26 MoE + 少 expert 起草 + CPU offloading 2.37× 端侧显存受限场景
SSD for dLLMs 2025 少步去噪起草 + 完整步 verify 3.46× 扩散语言模型
SSD for ASR arXiv’26 CTC 起草 + LLM verify 3.79× 语音识别,利用模态差异
SparseSpec 2026 稀疏 attention 起草 + PillarAttn 2.1× 大 batch serving 场景

这条线还没走完。”用同一个模型的便宜版本给自己打草稿”这件事,背后可以挖的东西还有不少:怎么在不重训的情况下进一步提升 acceptance rate?SSD 和 KV cache 管理的联动怎么解?端侧量化模型上 SSD 的表现?有兴趣的欢迎评论区聊聊。


这篇梳理的是 Self-Speculative Decoding 这条线。我们团队做 LLM 效率优化,也出了本从不同角度切入这个话题的书:《动手学 AutoML:从 NAS 到大语言模型优化实战》——侧重 NAS 和 AutoML 怎么用在大模型架构搜索和超参优化上,和推测解码是两条路,但目标都是让大模型跑得更好、更省资源。

动手学AutoML书籍封面

Flag Counter