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 怎么用在大模型架构搜索和超参优化上,和推测解码是两条路,但目标都是让大模型跑得更好、更省资源。
