arXiv'26 | EcoSpec:MoE 投机解码别只顾接受率,草稿会把专家撒得到处都是
arXiv’26 | EcoSpec:MoE 投机解码别只顾接受率,草稿会把专家撒得到处都是
原文:Less Experts, Faster Decoding: Cost-Aware Speculative Decoding for Mixture-of-Experts
1. 前言:先把背景交代清楚
你有没有想过这样一个问题:在 MoE 模型上做投机解码,”验收”到底要付多少钱?
先把投机解码的账本摆出来。每轮解码:drafter 打出 γ 个草稿 token,target 模型一次并行 forward 验收,验收通过的直接收下。标准叙事里这笔账很好算:target 的验收是 prefill 式的批量计算,本来就要跑一遍,多算几个 token 的边际成本很低——所以只要草稿接受率够高就稳赚。DSpark(DeepSeek 线上方案:半自回归草稿 + 置信度决定每轮验收多长)优化的就是”验收预算怎么花”这个问题。
但这个”边际成本很低”的前提,在 MoE 上悄悄变质了。原因一句话:MoE 层的计算成本不由 token 数决定,而由这批 token 激活的专家并集决定。
Dense 模型验收 γ 个 token:多算几个 token ≈ 多一点 FLOPs,几乎免费
MoE 模型验收 γ 个 token:每个 token 各自路由 top-k 专家,
需要加载的权重 = 这 γ+1 组专家的并集
如果这 γ 个 token 路由高度重叠(都走同样 8 个专家),验收确实只多花一点 FLOPs;如果互不相交,专家加载量直接 ×γ。而坏消息是:按”接受概率最高”选出来的草稿 token,天然往第二种情况跑偏——概率高的候选分布在语义空间的不同区域,路由自然分散。论文给这个现象起了名字:expert scattering(专家散射)——草稿在概率空间里抱团,在专家空间里四散开花。
量化一下有多疼:EAGLE-3 在 Qwen3-235B 上,每个验收步平均激活 23.7 个专家/层(AR 解码 top-8 只需 8 个,3 倍带宽);DeepSeek-V3.1 配 MTP 更是 31.4 个。一个 DeepSeek 专家(FP8)就是 44MB 的 HBM 流量——在 61 层 MoE 上,每层每步只要多”撒”出 0.2 个专家,一轮投机解码就多烧约 0.5GB 的带宽。
EcoSpec(arXiv 2607.12696)做的事一句话讲完:在选草稿的时候,把”会激活哪些专家”算进成本函数——验收规则一个字不动(严格无损),在 DeepSeek-V3.1(671B)、Qwen3-235B、GPT-OSS-120B 上端到端最高 1.62× 加速。
这条问题和两篇旧文有直接的血缘:《ST-MoE expert-prefetch》的洞察是expert 激活有很强的时空相关性、可预测——那篇用它做”提前把专家搬上片”的预取,这篇用它做”选草稿时避开冷门专家”的调度,同一个洞察的两种变现;而”MoE 推理被内存带宽卡死”这个大前提,是 《SMoE》那篇的主线——expert 权重搬不动,才是 MoE 部署的核心矛盾,本文不过是把这个矛盾推进到了投机解码场景。
2. 病根:验收成本 = 专家并集,而草稿选择对并集一无所知
把这笔账算细一点。投机解码每轮的流程:
- drafter 打出一棵草稿树(EAGLE-3:3 步 forward、每步留 top-2,长出候选树);
- 从树里选 γ 个节点送去 target 验收(γ=4 是常用值);
- target 一次 forward 验收这 γ+1 个 token。
第 3 步在 MoE 层 $\ell$ 上需要加载的专家集合:
\[\mathcal{E}_\text{verify}^{\ell} = \bigcup_{t \in S} \mathcal{S}_\ell(x_t)\]| $S$ 是被验收的 token 集合,$\mathcal{S}_\ell(x_t)$ 是 token $t$ 在第 $\ell$ 层路由到的专家。**现有多数工作的草稿选择只优化 $ | S | $ 里被接受的期望 token 数,对 $\mathcal{E}_\text{verify}$ 的大小完全无感知。** |
更糟的是 batch 场景。论文扫了 batch size:batch=4 时 EAGLE-3 在 Qwen3-235B 上的加速直接掉到 1.00×(不赚不赔),因为每步的专家足迹膨胀到 54.9 个/层,撞上 HBM 带宽墙——验收慢到把投机赚的 时间 全吐回去。带宽是 MoE 投机解码的隐形天花板,而现有方法连这个天花板的存在都没意识到。

3. 方法:把专家成本写进草稿选择
EcoSpec 在 drafter 和验收之间插了三个组件,target 的验证规则原封不动——所以输出分布和标准投机解码严格一致,无损保证照单全收。

3.1 轻量 Expert Predictor:预测每个草稿 token 会路由到哪
第一个组件是一个小 decoder LM(Qwen3-0.6B 或 DeepSeek-R1-Distill-Qwen-1.5B,视目标模型家族而定),输入草稿 token(用目标模型的 embedding 层投影到自己的 hidden 空间),一次性输出所有 MoE 层的路由 logits $z \in \mathbb{R}^{L \times E}$,softmax 后每层取 Top-K(K 与目标模型的路由配置一致,如 Qwen3 的 Top-8、GPT-OSS 的 Top-4)得到预测专家集 $\mathcal{E}_\text{pred}$。
训练是纯监督的:把目标模型在七个评测数据集上跑出来的真实 router 轨迹收集起来,逐层交叉熵训练——监督目标是个把质量 1/K 均摊到 k 个被激活专家上的归一化分布。80/20 划分、100 epochs、Adam lr=1e-5。测试集上的 Top-K 路由预测准确率:GPT-OSS-120B 93%、Qwen3-235B 82%、DeepSeek-V3.1 80%。
开销:预测器每步约 4ms(对比:Qwen3 的验收本身 830ms),可以忽略。
3.2 全局 Expert Buffer:只有”新”专家才算成本
第二个组件维护一个集合 $\mathcal{B}$:已被本轮已选草稿覆盖的专家。它把成本从”绝对量”变成”边际量”——第一个走某专家的 token 付全款,后面的搭便车。这个设计直接决定了打分函数的性质(见 3.3 的前缀一致性)。
注意 $\mathcal{B}$ 是每个投机步重建的(从空集 $\mathcal{B}_0$ 开始,随贪心选择增长),不跨步持久——跨步的复用由系统层的 expert cache 负责,那不是这篇的战场。
3.3 Cost-Aware Draft Selection:贪心 + 边际成本
第三个组件是核心打分。对草稿树里每个候选节点 $t_i$:
\[S(t_i) = \frac{P(t_i)}{\Delta\text{Cost}(t_i \mid \mathcal{B}) + \epsilon}\]- $P(t_i)$:从根到 $t_i$ 路径上草稿概率的连乘——”这条路被接受的概率”代理(分子:接受率收益);
-
$\Delta\text{Cost}(t_i \mid \mathcal{B}) = \mathcal{E}_\text{traj}(t_i) \setminus \mathcal{B} $:$t_i$ 整条路径的预测专家足迹中,还没被 buffer 覆盖的新增专家数(分母:带宽成本); - $\epsilon$ 防除零。
选择是标准贪心:
def ecospec_select(draft_tree, P, E_pred, gamma):
# P[node]: 根到该节点路径的草稿概率连乘
# E_pred[node]: 该节点全路径的预测专家足迹 (layer, expert) 集合
S, B = set(), set() # 选中的节点 / 专家 buffer
while len(S) < gamma:
best = argmax(t for t in tree - S,
key=lambda t: P[t] / (len(E_pred[t] - B) + eps))
S.add(best)
B |= E_pred[best] # 后来的候选共享这些专家 = 边际成本归零
return S # 一次 target forward 验收
| 这个打分有一个很妙的结构性质——天然前缀一致(prefix-consistent)。因为子节点的路径概率 $P(\text{child}) = P(\text{parent}) \cdot P(\text{child} | \text{parent}) \leq P(\text{parent})$(条件概率 ≤ 1),而父节点的专家足迹是子节点足迹的子集($\Delta\text{Cost}$ 只会更小),所以子节点的分数不可能超过父节点(除并列外)。这意味着贪心选出的集合天然前缀闭合,和树形验证的 attention mask 结构严丝合缝,不需要任何额外的结构约束或修补项。 |
3.4 和 EAGLE-3 / GTO 的关系:正交可叠加
EcoSpec 不动 drafter 本身——EAGLE-3 照常生成草稿树和候选概率,EcoSpec 只接管”从树里挑哪些节点去验收”这一步。对比实验里 drafter 配置在 baseline 和 EcoSpec 之间严格保持一致,把变量隔离在选择阶段。它甚至可以叠加在 GTO(一种改进 drafter 训练的方法)上:GTO+EcoSpec 在 Qwen3 HumanEval 上 1.13×→1.29×——改草稿生成(GTO)和改验收选择(EcoSpec)是两个正交的轴。
4. 效果
4.1 主结果(8×H200、γ=4、贪心 T=0、7 个 benchmark)
| 模型 | baseline | EcoSpec | 专家/层 |
|---|---|---|---|
| Qwen3-235B-A22B | EAGLE-3 1.22× | 1.36×(MTBench 最高 1.62×) | 23.7→20.5 |
| GPT-OSS-120B | EAGLE-3 1.14× | 1.31×(MMStar/AMC 最高 1.45×) | 11.6→10.6 |
| DeepSeek-V3.1 | MTP 1.10× | 1.15× | 31.4→31.2 |
采样(T=1)下同样成立:Qwen3 1.28×→1.38×、GPT-OSS 1.18×→1.30×、DeepSeek 1.28×→1.33×。

最关键的佐证是接受长度几乎没动(Qwen3 贪心 2.41→2.32,GPT-OSS 1.88→1.86):提速全部来自”验收变便宜”,而不是”草稿变准”。这和 EAGLE 系列纯提 τ 的路线是完全不同的另一条轴——以前大家以为投机解码只有”接受率”一个旋钮,现在多了”验收成本”这个旋钮。
4.2 HBM 流量与延迟拆解
Table 2(每验收步的 HBM 读取量估算):
| 模型 | baseline | EcoSpec | 降幅 |
|---|---|---|---|
| Qwen3-235B | 99.3 GB | 88.1 GB | −11.2 GB(11.3%) |
| GPT-OSS-120B | 6.0 GB | 5.5 GB | −8.0% |
| DeepSeek-V3.1 | 97.3 GB | 96.8 GB | −1.0% |
Qwen3 的验收延迟从 0.832s 降到 0.730s(每步总延迟 0.840→0.742s)。三个模型的差异很有信息量:Qwen3 和 GPT-OSS 的专家使用模式集中(token 倾向复用热门专家),选择空间大,省得多;DeepSeek 的均衡路由(训得好的负载均衡反而让专家使用更分散)最难省——但它的单专家最大(44MB),每层每步省 0.2 个专家就值 0.5GB,所以哪怕百分比只有 1%,绝对收益仍然划算。
4.3 消融:边际成本、预测器、batch
边际成本 vs 静态全局成本:把 buffer 增量换成”路径足迹大小”的静态打分(不随选择更新),Qwen3 GSM8K 只有 1.28×;换成边际成本打分升到 1.39×(GPT-OSS 1.06×→1.11×、DeepSeek 1.16×→1.19× 同向)。“谁先来谁付全款”的建模是必要的,静态成本看不到候选之间的共享结构。
预测器鲁棒性:预测准确率从收敛值掉到 50%,Qwen3 GSM8K 加速从 1.39× 退到 1.17×——有影响但 gracefully degrade;更重要的是 oracle 专家集的结果(20.4 专家/层)和收敛预测器(20.5)几乎一样——说明 82–93% 的准确率已经不是瓶颈,继续卷预测器精度没有边际收益。
batch 扩展:batch=4 时 EAGLE-3 归零(1.00×),EcoSpec 保住 1.09×(专家足迹 45.7 vs 54.9)——带宽越紧张的并发场景,成本感知越值钱。这对线上部署(几乎永远有 batch)是最有说服力的一组数字。
γ 扫描:γ=3/4/5/6 上 EcoSpec 全区间领先,γ=4 是甜点——γ 再大,验收的专家并集膨胀,收益反而缩水。“多验收几个”在 MoE 上不是免费的,这条曲线就是证据。
5. 我的 Take
一,这篇换掉的是投机解码的那把尺子。 收益函数从”接受了几个 token”换成”每 GB 带宽换几个 token”。在 dense 模型上这两者单调对应,在 MoE 上中间隔着一个路由并集——以前的论文不是没优化成本,是这个成本项在 dense 假设下根本不存在。类似的”隐形式成本”在其他系统里也常见(比如 prefill 的 KV 产出、allreduce 的小包合并),每换一次底层架构,成本模型就得重写一遍——这是系统研究永远有的可做之处。
二,和 DSpark 是公式里的两个不同变量,可以叠。 DSpark 用置信度管理 verify 预算(分子上的 $T_\text{verify}$ 分配),EcoSpec 用专家成本管理 draft 选择(分母上的验收成本)——一个决定”验收多长”,一个决定”验收哪些”,组合起来就是完整的 MoE 投机解码调度器。我预期很快会有人把这两件事放进同一个目标函数里做联合优化。
三,”草稿的专家足迹”会成为一等公民。 随着 MoE 成为旗舰标配、投机解码成为默认配置,每个草稿 token 附带的”预计激活专家”会变成推理栈里需要显式管理的量——就像 KV Cache 的显存、batch 的槽位一样。预测路由这个组件(80–93% 准确率、4ms 开销)已经在 expert-prefetch(预取侧)、EcoSpec(选择侧)两篇里出场了,往后大概会变成 MoE 推理引擎的标准件。
如果这篇文章涉及的 MoE 推理、投机解码优化你想系统深入,可以看看我之前出版的《动手学AutoML:从 NAS 到大语言模型优化实战》,书里大模型优化章节讲的稀疏化与效率权衡,和本文”专家足迹管理”是同一套设计思路。
