专题 D · MoE:怎样把模型做大而不每次全开
⏱ 10 分钟 | 可选专题
🎯 一句话
MoE(混合专家)把一个很大的 FFN 换成很多“专家”FFN。每个 token 不必经过全部专家,只由路由器挑少数几个处理:总容量可以很大,单次计算却不用等比例变贵。
它真正省了什么,又没省什么
MoE 省的是一次前向计算:每个 token 只激活少数专家。它不一定省显存,因为所有专家的参数仍要放得下;多卡时还会有 token 在设备间搬运的通信成本。
所以看到“总参数 200B、激活参数 20B”时,读法是:每次计算大约只用 20B 的路径,但部署并不等于只需存 20B 的权重。
为什么常替换 FFN,不替换注意力
FFN 本来就是每个 token 独立计算的部分,最适合让不同 token 去不同专家。注意力需要 token 彼此看见,强行拆开会破坏它最重要的交流功能,也更难实现。
一个必须知道的代价:别让专家闲着或挤爆
路由器如果总把 token 送给同一两个专家,其他专家学不到东西,热门专家还会拥堵。这叫负载不均衡。训练 MoE 必须额外鼓励路由更均匀;因此它不是“白捡的大模型”。
✅ 检查点
- MoE = 很多 FFN 专家 + 路由器每次选少数。
- 激活参数少,代表一次计算少;不代表总权重和部署成本同样少。
- MoE 的难点是路由、负载均衡和跨设备通信。
点开核对
MoE 让路由器每次选少数 FFN 专家,所以一次计算更省;但所有专家仍要存下,且必须避免流量都挤到同几位专家。
🔗 想再深一层,去哪一套
| 去哪 | 为什么 |
|---|---|
| AI 基础设施 14 · 并行策略怎么组合 | ⭐ 「别让专家闲着或挤爆」在集群上的正题:MoE 要加专家并行,走的是 All2All 而不是 AllReduce,最头疼的正是负载不均 |
| AI 基础设施 09 · 显存优化全家桶 | 「所有柜台仍得在场」意味着显存照吃 —— 那一章是省显存的完整清单 |
| 专题 B · SwiGLU:筛选信息 | 两个专题动的是同一层:SwiGLU 改 FFN 内部,MoE 改「一次启用几个 FFN」 |
🛑 可以停在这里
如果你只是使用模型,知道“MoE 容量大但每次只开一部分”即可。top-k、辅助损失、共享专家属于训练与系统专题。
⚡ 走神救援
MoE 像一组专家柜台:每个 token 只被分配到少数柜台,因此一次处理不必启用整组人;但所有柜台仍得在场,也得避免只挤爆几个柜台。