C
ChaoBro

清华 ZEDA:已训练好的 MoE 模型,用自蒸馏就能跳过一半专家,推理提速 1.2 倍

MoE(Mixture of Experts)已经成为大模型的标配架构。但 MoE 有个尴尬的处境:训练完就"定型"了——专家数量是固定的,每个 token 激活多少专家也是预设好的。

这意味着即使用户问的是"1+1等于几"这种简单问题,模型依然要激活同样数量的专家,花同样的算力。

清华团队的新工作 ZEDA(Zero-Expert Self-Distillation Adaptation) 就想解决这个浪费问题。

从静态到动态:让模型自己学会"偷懒"

核心思路很优雅:给已经训练好的 MoE 模型注入"零输出专家"(zero-output experts)——这些专家什么都不做,输出恒为零。然后让模型通过自蒸馏学习:简单任务交给零专家处理,复杂任务才调用真正的专家。

听起来简单,但做起来有三个难点:

1. 架构转换的稳定性

突然往训练好的模型里加一堆零专家,模型会"懵"。原有的路由权重是在固定专家数量上训练出来的,改了架构后路由行为会完全混乱。

ZEDA 的方案是两阶段自蒸馏

  • 第一阶段:用原始 MoE 作为冻结的 teacher,让新模型学习保持原有行为
  • 第二阶段:引入 group-level balancing loss,确保各专家之间的负载平衡,防止所有 token 都涌向零专家

2. 零专家的设计

零专家不是随便加个常数输出就行。ZEDA 注入的是参数化的零专家——初始化为零输出,但在训练过程中可以逐渐"苏醒"。这样模型就能根据任务难度动态决定需要多少计算量。

3. 路由策略的自适应

动态 MoE 的路由器需要学会在不同输入下选择不同数量的专家。ZEDA 通过自蒸馏过程中的奖励信号,让路由器自动学会这个能力——不需要额外的标注数据。

实测效果:省一半算力,精度几乎不掉

在 Qwen3-30B-A3B 和 GLM-4.7-Flash 两个模型上的测试:

  • 消除超过 50% 的专家 FLOPs——简单任务时大部分 token 只激活极少专家
  • 精度损失极小——在数学、编码、指令跟随等 11 个 benchmark 上,性能下降在可接受范围内
  • 端到端推理提速约 1.2 倍——考虑到只是后处理适配,这个速度提升相当可观
  • 超越最强的动态 MoE baseline 6.1 和 4.0 分——分别对应两个模型

为什么这件事比听起来更重要

MoE 推理成本的优化,是目前大模型商业化落地的核心痛点之一。Anthropic、OpenAI 等头部玩家的 MoE 模型都在追求"用更少的活跃参数做更多的事"。

ZEDA 的独特价值在于:它不需要从头训练。现有的 Qwen3、GLM-4.7 等开源 MoE 模型,理论上都可以直接用 ZEDA 做一次"瘦身"适配,立刻获得推理加速。

这对中小规模的推理服务商尤其有吸引力——不需要投入千万级的训练成本,只需几天的自蒸馏训练,就能获得显著的成本优化。

冷静看待

当然也有需要注意的地方:

  • 50% FLOPs 消除是"over"而非"exactly"——实际消除比例取决于输入分布,简单任务多时效果好,复杂任务多时效果差
  • 1.2x 端到端加速在绝对值上不算特别大,考虑到 ZEDA 是一个后处理方案,这个结果已经不错了
  • GitHub 上目前 5 Stars,代码可能还在整理中

主要来源: