技术笔记

稀疏 MoE:路由容量与负载不均衡

稀疏专家模型并非每个 token 都运行全部专家。

2026年5月20日阅读约 2 分钟
MoE路由分布式

总参数与激活参数

稀疏专家模型并非每个 token 都运行全部专家。路由器选择一部分专家进行计算,因此总参数量和单 token 激活参数量需要分别报告。减少激活计算并不会自动消除专家权重的存储成本。

假设有 T 个 token、E 个专家、每个 token 选择 k 个专家。平均路由请求为 T×k/E。容量因子 c 对应每个专家约 ceil(c×T×k/E) 个槽位。实际请求并不均匀,溢出的路由需要丢弃、备用专家或无丢弃调度策略。

路由诊断示例

下面统计 top-1 路由的专家负载。它只是一段调度诊断,不实现神经网络训练。

import assert from "node:assert/strict";
function loads(routes, experts) {
  const result = Array(experts).fill(0);
  for (const expert of routes) {
    if (!Number.isInteger(expert) || expert < 0 || expert >= experts)
      throw new Error("unknown expert");
    result[expert]++;
  }
  return result;
}
assert.deepEqual(loads([0, 0, 1, 3], 4), [2, 1, 0, 1]);
const capacity = Math.ceil(1.25 * 4 / 4);
assert.equal(capacity, 2);

分布式执行的约束

专家分散在不同设备时,token 需要经过分发与聚合。通信时间、每个专家的微批量大小、路由排序和 padding 都会影响吞吐。平均负载正常并不代表尾部延迟正常,应观察最大专家负载和跨设备流量。

训练需要关注专家塌缩与负载平衡;推理需要使用实际线上请求分布评估路由变化。不能仅依据激活参数比例宣称等比例省钱,也不能用均匀随机路由代替真实模型路由做生产容量规划。

原始资料

  • Switch Transformers:稀疏专家路由与训练稳定性研究。这里的容量计算是调度示例,不复现论文训练结果。

感谢阅读本文

如果你觉得内容有帮助,欢迎点赞支持或分享给同行开发者。

960 次阅读34 人赞过