MARS: Unleashing the Power of Speculative Decoding via Margin-Aware Verification
速读卡片 (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 上。
(EAGLE-3: 3.12×)
(Vicuna-13B mean)
(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:
- 独立小模型 (Vicuna-68M / SpD): 训一个完全独立的小 LLM 做 draft
- 蒸馏 (DistillSpec, SSD, Online SpecDec): 让 drafter 显式模仿 target 分布
- 架构耦合 (Medusa / Hydra): 给 target 加多 head 直接吐 k 个 token
- 特征复用 (EAGLE-1/2/3): 直接拿 target 的 hidden states 喂给一个 1-layer 的 draft head
- 无 drafter (Lookahead / Jacobi / REST): 用 n-gram / 检索 / fixed-point iteration 替代
这条线在 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) | 语义对齐(可能基于嵌入相似度) | 同样需要额外结构 / 训练 |
| MARS | target 自己的 top-1/top-2 logit ratio | training-free, 一行代码可加 |
1.3 这事为什么不平凡:rejection sampling 的隐藏假设
标准 rejection sampling 的"lossless"光环来自一个隐含假设:
target 在每个 step 都有 decisive 的偏好——argmax 那个 token 比所有其他 token 重要得多。
但实际 LLM 推理时,大量 step 是语义平局状态:
"The weather is really __"→ "good" / "nice" / "lovely" / "fine" 几个候选 logits 几乎贴着"so I will go for a __"→ "walk" / "stroll" 几乎等价- 句末标点 / 空格 / 同义词 / 风格性副词,都属于这种 indifferent 区域
在这种区域,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 重采)。
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 regime | r → 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̂):
- 采均匀随机数 u ~ U[0,1]
- 若 u ≤ p_t(v̂) / p_s(v̂):接受 v̂
- 否则:从修正分布 (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 的非线性放大
关键问题: 同一个 logit margin Δ,在不同 logit 量级下映射到完全不同的 prob ratio。看个具体例子:
| case | z_(1) | z_(2) | Δ | r = z_(2)/z_(1) | p_(2)/p_(1) = e^(−Δ) |
|---|---|---|---|---|---|
| A (low-magnitude) | 2.0 | 1.8 | 0.2 | 0.90 | 0.819 |
| B (mid-magnitude) | 10.0 | 9.0 | 1.0 | 0.90 | 0.368 |
| C (high-magnitude) | 40.0 | 36.0 | 4.0 | 0.90 | 0.018 |
三个 case 的 logit ratio 都是 0.90(相同程度的"语义平局"),但 prob ratio 跨越了 50× 量级。如果用 prob ratio 做阈值,你会:
- 在 case A (低 magnitude) 上把所有都判 indifferent → 过度放松
- 在 case C (高 magnitude) 上几乎从不放松 → 错失大部分机会
论文指出: 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 > θ:
翻译: 用 logit ratio 等价于一个自适应 margin: 当 z_(1) 大 (model 很 confident),要求的 margin Δ 也大才能算 decisive。这是相对量纲的判据,不像绝对 margin Δ < const 那样会被 calibration shift 整个移动。
3.3 经验验证:logit 几乎全为正
论文 Figure 4a 给出 Qwen3-8B 的 top-1 logit 分布: 0.0% 为负。这保证了 r = z_(2)/z_(1) 良定义且严格落在 (0, 1]。如果 z_(1) 可能为负,这个比值就会有符号陷阱(分母接近 0 或换号),那时 logit margin Δ 才是更稳的量。
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 后续 |
注意几个工程细节:
- 只看 top-1 / top-2: 不查 top-3 及之后,即使 v̂ = v_(3) 而 r_3 高也不放松。这是 deliberate 的——只接受最 conservative 的 tie-break。
- θ 全局固定 = 0.9: 不做 per-token / per-context 自适应,保持 plug-and-play 简洁性。
- Reject 时不再做 (p_t − p_s)+ 重采,而是直接用 v_(1)——本来就是 lossy 路径,不必装作 lossless。
- 与 stochastic / greedy / tree 完全正交: top-1 / top-2 的概念在 chain / tree 都成立,接 EAGLE / Medusa / SpD 全可。
4.2 Worked example: 两步 verify,一接一拒
设 K=4,draft 链 V̂ = [lovely, so, I, will],context 是 "The weather is really"。target 一次 forward 给出每位置的 logits(已截 top-3 简化展示):
| position | draft v̂ | target top-1 (z_(1)) | target top-2 (z_(2)) | r = z_(2)/z_(1) | 判定 |
|---|---|---|---|---|---|
| 1 | lovely | good (32.0) | lovely (29.15) | 0.911 | v̂ = top-2, r > 0.9 → Adaptive ACCEPT |
| 2 | so | so (28.5) | and (24.0) | 0.842 | v̂ = top-1 → Exact ACCEPT |
| 3 | I | I (27.0) | we (22.0) | 0.815 | v̂ = top-1 → Exact ACCEPT |
| 4 | will | want (35.0) | need (25.5) | 0.728 | v̂ ≠ 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-3 通常 logit 已经显著低于 top-1 / top-2,几乎不可能 r > 0.9 (低边际)
- 但偶发的极平 case 下确实存在 → 接受会引入更多分布偏离
- 实际 EAGLE-3 draft tree 的 top-2 / top-3 候选,后排候选已经很 noisy
论文选 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 在每个节点处独立判定:
5 · 公式推导与 sensitivity 分析
5.1 自适应 margin 推导
令 Δ = z_(1) − z_(2),则 r > θ 等价于 Δ < (1 − θ) · z_(1)。这表明:
- θ = 0.9 时,要求 Δ < 0.1 z_(1):放宽门槛是 z_(1) 的 10%。z_(1) 越大门槛越宽 (因为 prob 已被 softmax 撑开)。
- θ → 1 时,门槛 → 0,退化为严格 lossless rejection。
- θ → 0 时,门槛 = z_(1),即只要 z_(2) > 0 就放过 → 几乎全 accept,极度 lossy。
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.78 | 28.70 (-1.0) | ~3.2× |
| 0.88 | 宽 | ~0.84 | 29.34 | ~3.1× |
| 0.90 ★ | 默认 | 0.88 (peak) | 29.67 | ~3.05× |
| 0.92 | 紧 | ~0.86 | 29.59 | ~3.0× |
| 0.96 | 很紧 | ~0.84 | 29.39 | ~2.85× |
反直觉发现:accuracy 不是 θ 的单调函数。在 sampling (T=1) 下,过严格的 θ(高 θ)会触发更多rollback,而 rollback 用 (p_t − p_s)+ 重采时会引入tail noise (低概率 token 偶尔被采到)。这种 tail noise 反而拉低任务 acc。所以 θ 在 0.9 取得峰值是 quality + speed 双赢的甜点。
6 · 实验关键结果
6.1 主表 (Table 1, T=1, K=7)
| Model | EAGLE-3 mean speedup | MARS mean speedup | EAGLE-3 mean τ | MARS mean τ |
|---|---|---|---|---|
| Vicuna-13B | 3.12× | 3.74× (+20%) | 5.64 | 7.20 (上界 8) |
| LLaMA-3.1-8B | 3.24× | 4.00× (+23%) | 4.82 | 6.61 |
| LLaMA-3.1-70B | 4.40× | 4.76× (+8%) | 5.66 | 6.39 |
| Qwen3-8B | 2.96× | 3.23× (+9%) | 4.41 | 5.22 |
| Qwen3-32B | 3.01× | 3.49× (+16%) | 4.21 | 5.23 |
| Qwen3-235B-A22B | 2.95× | 3.42× (+16%) | 4.14 | 5.14 |
读表观察:
- 所有 6 个 model 都 monotonic 提升,从 8B 到 235B 一致 → 不是某个 size 的 cherry-pick
- τ 接近理论上限 K+1 = 8 (Vicuna 7.20)。这说明 MARS 在这个 K下几乎"耗尽"了 draft 链能给的 token
- 70B 增益最小 (+8%) — 推测是 70B 本身 logit 分布更 sharp,low-margin step 占比低
- Qwen3 系列增益稳定在 9–16%,对应 modern Qwen3 训练较 confident → 可放宽空间相对小
6.2 框架解耦验证 (Table 5)
把 MARS 加到 vanilla SPD (Leviathan 那种 chain-based, 用 Qwen3-0.6B → 32B):
| Pair | Bench | SPD speedup | SPD+MARS speedup |
|---|---|---|---|
| Qwen 0.6B → 32B | GSM8K | 2.15× | 2.70× |
| Qwen 0.6B → 32B | HumanEval | 2.23× | 2.76× |
| LLaMA 8B → 70B | HumanEval | 3.15× | 4.36× (+38%) |
这是论文最有说服力的 robustness 证据: 不依赖 EAGLE,任何 drafter 都受益。
6.3 质量保持 (Table 3, 4 + MT-Bench)
- CNN/DM ROUGE-L: MARS vs baseline 平均差 0.0008 (e.g. 0.1935 vs 0.1943)
- WMT19 BLEU: Qwen3-8B 29.67 vs baseline 29.71 (差 0.04)
- MT-Bench (GPT-5 judge, 8 类): 5 个 model 平均偏差 ≤ 0.18 分 (10 分制),Qwen3-8B 反而提升 0.18 (7.41 → 7.59)
这个"反而提升"在论文里没强调,但很有意思: lossy 反向带来质量提升的可能机制是,strict rejection 重采时引入的 tail-noise (上文 §5.3) 在 GPT-5 judge 看来是风格/语义噪声;放宽到 top-2 接受反而保持了流畅性。
6.4 K 的甜点是 9 (Table 2)
不是 K 越大越好。Qwen3-32B GSM8K:
- K=6: 3.96×, τ=5.79
- K=9: 4.15×, τ=6.58 (peak)
- K=12: 4.09×, τ=6.87
- K=15: 3.94×, τ=6.92 (饱和)
原因和经典 SD 一样: K 增长后 drafter 自身开销线性上涨,而 τ 边际递减(尤其 MARS 接近 K+1 上限)。K=9 是 MARS 推荐值,比标准 SD 的 K=4-6 大一些(因为 MARS 把 τ 拉得更高)。
7 · 与同类工作对比
| 方法 | 类型 | 动了什么 | 是否 lossless | 是否 plug-and-play | 本文与之差异 |
|---|---|---|---|---|---|
| Leviathan SD | verification | 定义了 rejection sampling | 是 | —(基线) | MARS 在 low-margin 区域放松 |
| EAGLE-2/3 | drafter | tree drafter, hidden state 复用 | 是 | 需训 head | 正交,可叠加 |
| Medusa | drafter | 多 head + tree | 是 | 需训 head | 正交,可叠加 |
| SpecInfer / SpecTr / Sequoia | tree verification | token tree + tree attention | 是 | 实现复杂 | 正交,verify rule 可换 MARS |
| BiLD (Kim 2023) | lossy | 看 draft confidence 跳过 verify | 否 | 是 | 看错对象 — MARS 看 target |
| Self-verify (Zhang 2025) | lossy | context-entropy 调阈值 | 否 | 较复杂 | MARS 阈值全局固定,更简单 |
| Judge Decoding (Bachmann) | lossy semantic | 训语义 judge 模型 | 否 | 否, 需训 judge | MARS training-free |
| LSD (Li 2025a) | lossy semantic | 语义对齐 | 否 | 否 | 同上 |
| MARS | lossy verification | logit-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 / 待验证问题
论文承认的局限
- Token-level 判据,没探索 phrase / span 级别
- θ 全局固定;context-aware adaptation 可能更好
- 未实验 > 235B 模型(资源限制)
我的额外质疑
- "训练-推理分布漂移"风险: 如果一个下游模型用 MARS 跑生成,然后用这些 trace 做 SFT / DPO 数据,接受 top-2 会让训练数据带 systematic bias —— top-2 token 频率被人为抬高。RL rollout 场景尤其要小心(NVIDIA-NeMoRL 论文强调 verifier-exact 就是反这个的)
- θ = 0.9 在 small / fine-tuned 模型上未必稳: 论文只测了 8B+,模型小或经过 RLHF 后 logit 量级 shift,需要重新调阈值
- 低 magnitude logit case: 如果 z_(1) 接近 0(论文 Fig 4a 显示 0% 负但 mode 在 ~5),r 会非常敏感于 z_(2) 的小扰动。bf16/fp16 量化误差是否会让 r 抖动?
- Tree 的 cascade 效应: 一条 path 上多个 top-2 接受会累积偏差。MARS 没分析"连续 k 次 relax"是否安全
- Greedy (T=0) 下的 acc deviations (Appendix B): 论文坦白 EAGLE-3 和 MARS 都有数值偏差,但没量化是 KV cache 还是 verification rule 贡献的
待验证问题
- MARS 在 long-CoT (32k+ token) 任务下,relaxation 的 cumulative drift 是否会触发推理"偏题"?论文最长 trace 是 GSM8K 几百 token
- RL rollout 用 MARS 替代 EAGLE-3 的标准 rejection,会不会破坏 NeMoRL/ReSpec 的 "verifier-exact" 假设?如果用,需要改 GRPO loss 计算吗?
- 是否能把 logit-ratio relax 推广到"top-1 vs top-1+2 sum"或"top-k summed margin"等更细的形式?
- 低 batch (B=1) 和高 batch (B=64) 下 MARS 的 speedup 差异?(memory-bound vs compute-bound 的边界附近,verification overhead 占比变化)
- MARS + FP8 推理: FP8 把 logit 重 quantize,r 的稳定性会怎样?
- MoE 模型 (Qwen3-235B) 的 routing 噪声是否让 logits 更"平",进而 MARS 更受益?表 1 数据似乎支持这点
记忆点
公式 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 系统集成)