MARS: Unleashing the Power of Speculative Decoding via Margin-Aware Verification

Song / Wang et al. (HKU · McGill · PKU · gradient · Alibaba · Mila) · 2026-04-11 · arXiv:2601.15498v2 · code: github.com/5SSjw/MARS
关键词: speculative decoding · verification · logit margin · lossy SD · EAGLE-3 · plug-and-play

速读卡片 (TL;DR)

一句话:近 10 年 SD 的 drafter 改了又改,verification 几乎没动。MARS 指出 verification 的真正瓶颈是 low-margin regime 的 wasteful rejection,改用 logit-ratio (z₂/z₁) 做"放松判据"——top-2 命中且 ratio > 0.9 时直接接受 draft——training-free,可叠加在任何 drafter 上。

3.74×
Vicuna-13B mean speedup
(EAGLE-3: 3.12×)
τ 5.64→7.20
平均接受长度提升
(Vicuna-13B mean)
±0.18
MT-Bench 质量偏差
(GPT-5 judge)

立场:这不是又一个 drafter 论文,而是 verification rule 的第一性原理重写。本质是 lossy SD,但精心选定的"top-2 + 高 logit-ratio"放松带是几乎免费的——目标分布在那个区域本来就是 indifferent,接受 top-2 与接受 top-1 的 KL 差距小到可以忽略。


1 · 动机:为什么 verification rule 才是真瓶颈

1.1 历史脉络:SD 这十年都在动 drafter,没人动 verifier

Speculative Decoding 自 2022–2023 (Leviathan, Chen et al.) 提出至今,几乎所有提速尝试都在 左半边——也就是 drafter:

这条线在 EAGLE-3 上几乎触顶: 接受长度 τ 已经 5–6, 接近 K+1 = 8 的理论上限。右半边的 verification rule 却几乎纹丝不动——大家都在用 Leviathan 2023 那套 rejection sampling: accept w.p. min(1, p_target/p_draft), 一旦拒绝立刻 truncate 整个 draft 链。

Verification 没人改的原因不是"它是最优的",而是"它有理论 lossless 保证"。修改 verification 等于放弃 lossless,大家不敢碰。

1.2 别的 verification-relax 方案为什么不够

其实有零星几篇尝试 lossy verification,但 MARS 把它们都批评了一遍:

方案放松依据问题
BiLD / Big-Little Decoder (Kim 2023)当 draft 自己置信度高时跳过 target 验证看 draft confidence,不看 target — 完全本末倒置
Self-verify (Zhang EMNLP 2025)用 context entropy 调阈值需要逐 batch 调,context-dependent;实现复杂
Judge Decoding (Bachmann ICLR 2025)训一个 semantic judge 模型代替 token-match需训练 + 维护 auxiliary judge,失去 plug-and-play
LSD (Li 2025a)语义对齐(可能基于嵌入相似度)同样需要额外结构 / 训练
MARStarget 自己的 top-1/top-2 logit ratiotraining-free, 一行代码可加
论文用一句话刺中所有竞品:它们要么看错了对象(看 draft 不看 target),要么用错了量(prob 而非 logit, 见 §3),要么引入额外学习(judge / drafter online update)。MARS 选择了"完全无训练 + 看 target 自己的 logits"——最廉价的那个角落。

1.3 这事为什么不平凡:rejection sampling 的隐藏假设

标准 rejection sampling 的"lossless"光环来自一个隐含假设:

target 在每个 step 都有 decisive 的偏好——argmax 那个 token 比所有其他 token 重要得多。

但实际 LLM 推理时,大量 step 是语义平局状态:

在这种区域,target 的 argmax 是采样噪声决定的,换一个 seed 就会换一个 top-1。但 rejection sampling 把这个采样噪声当成"金标准"来惩罚 draft——只要 draft 没猜中那个具体的噪声实例就 reject 掉,触发 rollback,整个 draft 链被砍掉。

论文用 Figure 1d 给了一个非常硬的数据: 在 logit-ratio > 0.9 的低边际区域,EAGLE-3 的 draft 实际上有 53.5% (2590/4838) 是被 strict verification "冤枉"拒绝的——它们要么是 top-2,要么是和 top-1 几乎平局的 token。这些拒绝几乎不带来分布的实质改善,却付出了完整的 rollback 代价(后续 draft 全废 + target 重采)。

Standard rejection 的"冤拒"现象 The weather is really Target 输出分布 good 0.34 nice 0.33 lovely 0.31 others 0.02 → low-margin regime argmax 取决于采样噪声 draft: "lovely" standard REJECT (若 sample 出 "good") rollback 整链 draft 代价: K-1 个 draft token 作废 MARS ACCEPT "lovely" draft 链继续, 收益 +1 token
低边际区域的两种处理。Standard rejection 看到 sampled top-1 ≠ "lovely" 就 reject,代价是整条 draft 链作废,而生成质量几乎不变(因为 good/nice/lovely 在语义上等价)。MARS 检测到 z₂/z₁ > 0.9 (target 自己也"无所谓"),直接接受 draft 提议,省掉一次 rollback。

2 · 背景速查

2.1 关键术语

术语含义
Speculative Decoding (SD)draft 一次提议 K 个 token,target 一次 forward 并行验证
Rejection sampling (Leviathan)以 min(1, p_t/p_s) 接受;拒绝时从 (p_t − p_s)+ 重采,数学上 lossless
Acceptance length τ每次 draft-verify 周期平均产出多少 token,理论上界 K+1
Logit margin Δz_(1) − z_(2),top-1 与 top-2 的 raw logit 差
Logit ratio r本文核心量: z_(2) / z_(1),∈ (0, 1]
Low-margin regimer → 1 (Δ → 0),target 对 top-1 vs top-2 几乎无偏好
Lossless SD输出分布严格等于直接从 target AR 采样
Lossy SD放弃严格分布等价,换更高吞吐 (MARS 属于这类)
EAGLE-3当前 SOTA drafter,target hidden state + 1-layer head
Draft tree多分支 draft 结构,target 用 tree-attention mask 一次验证多条候选路径

2.2 Leviathan rejection sampling 复习

给定上下文,target 算出 p_t,draft 给出提议 v̂ 和它当时的 p_s(v̂):

  1. 采均匀随机数 u ~ U[0,1]
  2. 若 u ≤ p_t(v̂) / p_s(v̂):接受 v̂
  3. 否则:从修正分布 (p_t − p_s)+ / norm 中重采一个 token,丢弃 draft 后续所有 token

关键: 这个流程的输出分布严格等同于直接从 p_t 采样。这就是 SD 的"lossless"金身。

在 greedy 模式 (T=0) 下退化为: draft = target 的 argmax 才接受。


3 · 核心观察:为什么是 logit ratio 而不是 probability ratio

这一节是论文最有"insight"的一段。问题: 既然要量化"target 是否 indifferent",最自然的量是概率——p_(2) / p_(1) 接近 1 表示 indifferent。但论文坚持用 logit ratio z_(2)/z_(1) 做判据,理由有数学的也有经验的。

3.1 Softmax 的非线性放大

p_(2) / p_(1) = exp(z_(2) − z_(1)) = exp(−Δ)

关键问题: 同一个 logit margin Δ,在不同 logit 量级下映射到完全不同的 prob ratio。看个具体例子:

casez_(1)z_(2)Δr = z_(2)/z_(1)p_(2)/p_(1) = e^(−Δ)
A (low-magnitude)2.01.80.20.900.819
B (mid-magnitude)10.09.01.00.900.368
C (high-magnitude)40.036.04.00.900.018

三个 case 的 logit ratio 都是 0.90(相同程度的"语义平局"),但 prob ratio 跨越了 50× 量级。如果用 prob ratio 做阈值,你会:

论文指出: Qwen3-8B 等 modern LLM 训练得 confident,top-1 logit 频繁达到 30–50 量级(Figure 4a)。在这个 regime 下,prob 因为 softmax 指数放大而 hyperinflated,即使 z_(1) 和 z_(2) 几乎一样,p_(1) 仍能压倒 p_(2)。所以 prob 是个被 calibration 污染的指标。

3.2 Logit ratio 的几何含义

从 Eq. 5 (论文里的) 可以重写阈值条件 r > θ:

r = 1 − Δ / z_(1)   ⇔   Δ < (1 − θ) · z_(1)

翻译: 用 logit ratio 等价于一个自适应 margin: 当 z_(1) 大 (model 很 confident),要求的 margin Δ 也大才能算 decisive。这是相对量纲的判据,不像绝对 margin Δ < const 那样会被 calibration shift 整个移动。

Logit ratio vs Probability ratio: 三种 magnitude 下的对比 (paper Fig 1c 抽象) Logit Ratio z_(2)/z_(1) → Probability Ratio p_(2)/p_(1) 1.0 0.5 0.0 0 0.5 1.0 r=0.9 阈值 prob 0.9 阈值 (对照) A: z=(2,1.8) → p_r ≈ 0.82 B: z=(10,9) → p_r ≈ 0.37 C: z=(40,36) → p_r ≈ 0.02 ↘ 三个点 logit ratio 都 = 0.9 本质上 "同等 indifferent" ↘ 但 prob ratio 从 0.82 跌到 0.02 prob 阈值会漏掉 B 和 C 为什么用 logit ratio: 同一"语义平局程度", prob ratio 被 magnitude 扭曲掉。
用三个具体的"打平局"case 解释为什么 prob ratio 不可靠。三个点在语义上同等 indifferent(z_(2) 仅比 z_(1) 低 10%),但因 logit magnitude 不同,prob ratio 跨越了 50×。这就是 paper Fig 1(c) 的核心: 红色 (relaxed) 点在 prob ratio 上分布在整个 [0, 1] 区间。

3.3 经验验证:logit 几乎全为正

论文 Figure 4a 给出 Qwen3-8B 的 top-1 logit 分布: 0.0% 为负。这保证了 r = z_(2)/z_(1) 良定义且严格落在 (0, 1]。如果 z_(1) 可能为负,这个比值就会有符号陷阱(分母接近 0 或换号),那时 logit margin Δ 才是更稳的量。

这是个工程性强的细节: 大模型 logits 几乎都正,所以 ratio 这种"无标度"量可用;但小模型或某些 fine-tuned 模型未必,迁移时要重新检查 logit 分布。

4 · MARS 算法 + worked example

4.1 算法主体 (Algorithm 1 in paper)

对于 draft 链 V̂ = [v̂₁, ..., v̂_K],并行得到 target 在每个位置的 logits Z = [z₁, ..., z_K]。逐位置 i:

条件动作说明
v̂ᵢ = v_(1)Accept v̂ᵢExact Match: 标准 SD 也接受
v̂ᵢ = v_(2) AND rᵢ > θ (=0.9)Accept v̂ᵢAdaptive Relaxation: MARS 新增的接受路径
否则Reject; 输出 v_(1); 终止本步Correction: 用 target top-1 修正,丢弃 draft 后续

注意几个工程细节:

4.2 Worked example: 两步 verify,一接一拒

设 K=4,draft 链 V̂ = [lovely, so, I, will],context 是 "The weather is really"。target 一次 forward 给出每位置的 logits(已截 top-3 简化展示):

positiondraft v̂target top-1 (z_(1))target top-2 (z_(2))r = z_(2)/z_(1)判定
1lovelygood (32.0)lovely (29.15)0.911v̂ = top-2, r > 0.9 → Adaptive ACCEPT
2soso (28.5)and (24.0)0.842v̂ = top-1 → Exact ACCEPT
3II (27.0)we (22.0)0.815v̂ = top-1 → Exact ACCEPT
4willwant (35.0)need (25.5)0.728v̂ ≠ top-1/top-2 (will 排第 3+) → REJECT, 输出 want, 截断

本 verify 周期产出: [lovely, so, I, want],共 4 个 token(原 3 个 draft + 1 个 correction),τ = 4。

对照: 标准 EAGLE-3 在 position 1 就因为 v̂ ≠ top-1 而拒绝,产出 [good],τ = 1。MARS 在这个 example 上 τ 提升 4×

反向论证: 为什么不放松 top-3?

假设算法允许 "v̂ = v_(3) 且 z_(3)/z_(1) > θ" 也接受。问题:

论文选 top-2 是个 deliberate 的"最保守的 lossy": 只在 target 自己也认为 top-1/top-2 几乎平起平坐时,才相信 draft 提议的 top-2。这是一个有意控制 lossy 程度的设计。

4.3 与 tree-based EAGLE-3 的兼容

EAGLE-3 用 draft tree, top_k=10, K=7。Tree 里每个节点都是一个候选 token,target 用 tree-attention mask 一次验证多条 path。MARS 在每个节点处独立判定:

EAGLE-3 draft tree × MARS verification (示意) ctx good top-1 ✓ Exact lovely top-2, r=0.91 ✓ Relax , top-1 ✓ today top-3+ ✗ Reject day top-1 ✓ evening top-2, r=0.93 ✓ ... ↑ 接受路径 比 standard 长
Tree verification 时 MARS 在每个节点独立运行 top-1/top-2 检查。一旦某个节点 reject,该子树被剪掉,但兄弟分支不受影响。所以 tree 结构里 MARS 增益尤其显著: 标准模式下"all-or-nothing" 砍枝问题被 logit ratio 化解成"局部 indifferent 区域绿灯"。

5 · 公式推导与 sensitivity 分析

5.1 自适应 margin 推导

rᵢ = z_(2) / z_(1)   ⇒   rᵢ > θ ⇔ z_(1) − z_(2) < (1 − θ)·z_(1)

令 Δ = z_(1) − z_(2),则 r > θ 等价于 Δ < (1 − θ) · z_(1)。这表明:

5.2 物理直觉

把 (1 − θ) 想成"我能容忍多大的相对决策犹豫"。0.1 = 10% 的相对 logit gap 在 confidence 高的位置(z_(1) = 40)对应绝对 Δ = 4,即 e⁻⁴ ≈ 1.8% 的概率比——这种程度的优势在 RL / sampling 噪声下基本不稳定,所以"信"它没什么意义,放过是合算的。

5.3 Sensitivity 表 (对应 paper Fig 3 + Table 4)

θ放宽强度HumanEval acc (Qwen3-8B)WMT BLEU (Qwen3-8B)Speedup
0.84极宽~0.7828.70 (-1.0)~3.2×
0.88~0.8429.34~3.1×
0.90默认0.88 (peak)29.67~3.05×
0.92~0.8629.59~3.0×
0.96很紧~0.8429.39~2.85×

反直觉发现:accuracy 不是 θ 的单调函数。在 sampling (T=1) 下,过严格的 θ(高 θ)会触发更多rollback,而 rollback 用 (p_t − p_s)+ 重采时会引入tail noise (低概率 token 偶尔被采到)。这种 tail noise 反而拉低任务 acc。所以 θ 在 0.9 取得峰值是 quality + speed 双赢的甜点。

记忆点: θ 太大不光降速,还可能降质——这是论文最讲究的细节,反向论证了 strict-is-better 的直觉是错的。这点对设计任何 lossy SD 都有指导意义。

6 · 实验关键结果

6.1 主表 (Table 1, T=1, K=7)

ModelEAGLE-3 mean speedupMARS mean speedupEAGLE-3 mean τMARS mean τ
Vicuna-13B3.12×3.74× (+20%)5.647.20 (上界 8)
LLaMA-3.1-8B3.24×4.00× (+23%)4.826.61
LLaMA-3.1-70B4.40×4.76× (+8%)5.666.39
Qwen3-8B2.96×3.23× (+9%)4.415.22
Qwen3-32B3.01×3.49× (+16%)4.215.23
Qwen3-235B-A22B2.95×3.42× (+16%)4.145.14

读表观察:

6.2 框架解耦验证 (Table 5)

把 MARS 加到 vanilla SPD (Leviathan 那种 chain-based, 用 Qwen3-0.6B → 32B):

PairBenchSPD speedupSPD+MARS speedup
Qwen 0.6B → 32BGSM8K2.15×2.70×
Qwen 0.6B → 32BHumanEval2.23×2.76×
LLaMA 8B → 70BHumanEval3.15×4.36× (+38%)

这是论文最有说服力的 robustness 证据: 不依赖 EAGLE,任何 drafter 都受益。

6.3 质量保持 (Table 3, 4 + MT-Bench)

这个"反而提升"在论文里没强调,但很有意思: lossy 反向带来质量提升的可能机制是,strict rejection 重采时引入的 tail-noise (上文 §5.3) 在 GPT-5 judge 看来是风格/语义噪声;放宽到 top-2 接受反而保持了流畅性。

6.4 K 的甜点是 9 (Table 2)

不是 K 越大越好。Qwen3-32B GSM8K:

原因和经典 SD 一样: K 增长后 drafter 自身开销线性上涨,而 τ 边际递减(尤其 MARS 接近 K+1 上限)。K=9 是 MARS 推荐值,比标准 SD 的 K=4-6 大一些(因为 MARS 把 τ 拉得更高)。


7 · 与同类工作对比

方法类型动了什么是否 lossless是否 plug-and-play本文与之差异
Leviathan SDverification定义了 rejection sampling—(基线)MARS 在 low-margin 区域放松
EAGLE-2/3draftertree drafter, hidden state 复用需训 head正交,可叠加
Medusadrafter多 head + tree需训 head正交,可叠加
SpecInfer / SpecTr / Sequoiatree verificationtoken tree + tree attention实现复杂正交,verify rule 可换 MARS
BiLD (Kim 2023)lossy看 draft confidence 跳过 verify看错对象 — MARS 看 target
Self-verify (Zhang 2025)lossycontext-entropy 调阈值较复杂MARS 阈值全局固定,更简单
Judge Decoding (Bachmann)lossy semantic训语义 judge 模型否, 需训 judgeMARS training-free
LSD (Li 2025a)lossy semantic语义对齐同上
MARSlossy verificationlogit-ratio top-2 放松否(可控)是, 一行代码本文

"see also" 注释: EAGLE 系列演化(EAGLE-1 / 2 / 3 / DFlash)的笔记可以参考 spec-rl/notes/02_EAGLE_evolution_DFlash.html; NVIDIA 把 EAGLE-3 嵌入到 RL rollout 里的工程报告参考 spec-rl/notes/01_NVIDIA_NeMoRL_EAGLE3.html。MARS 与这两条线完全正交——它修改的是 verification 环节,EAGLE 系列改的是 drafter 环节,两者可叠加。


8 · 局限 / 个人 take / 待验证问题

论文承认的局限

我的额外质疑

待验证问题

  1. MARS 在 long-CoT (32k+ token) 任务下,relaxation 的 cumulative drift 是否会触发推理"偏题"?论文最长 trace 是 GSM8K 几百 token
  2. RL rollout 用 MARS 替代 EAGLE-3 的标准 rejection,会不会破坏 NeMoRL/ReSpec 的 "verifier-exact" 假设?如果用,需要改 GRPO loss 计算吗?
  3. 是否能把 logit-ratio relax 推广到"top-1 vs top-1+2 sum"或"top-k summed margin"等更细的形式?
  4. 低 batch (B=1) 和高 batch (B=64) 下 MARS 的 speedup 差异?(memory-bound vs compute-bound 的边界附近,verification overhead 占比变化)
  5. MARS + FP8 推理: FP8 把 logit 重 quantize,r 的稳定性会怎样?
  6. MoE 模型 (Qwen3-235B) 的 routing 噪声是否让 logits 更"平",进而 MARS 更受益?表 1 数据似乎支持这点

记忆点

立场 SD 的真瓶颈是 verification 在 low-margin regime 的 wasteful rejection,不是 drafter
公式 r = z_(2)/z_(1) > θ ⇔ Δ < (1−θ)·z_(1) (自适应 margin)
关键洞见 用 logit 而非 prob 因为 softmax 会按 magnitude 非线性放大,prob 是被 calibration 污染的指标
阈值 θ = 0.9 全局固定;过严反而因 tail-noise 重采降质
规模 8B → 235B 都 +9% to +23% over EAGLE-3, τ 接近上界 K+1
解耦 与任意 drafter (SpD / Medusa / EAGLE-3 / tree) 正交,一行代码可加
陷阱 严格 lossy 而非 lossless;rollout-as-training-data 场景需谨慎

精读笔记 v1 · 2026-05-07 · 配套论文 PDF 在 /data/szhang967/papers/paper-notes/MARS_2601.15498.pdf
see also: spec-rl/notes/02_EAGLE_evolution_DFlash.html (EAGLE 演化), spec-rl/notes/01_NVIDIA_NeMoRL_EAGLE3.html (RL × SD 系统集成)