从 Bit 到 AGI第七章:训练(Training)

MoE 是什么

从 Bit 到 AGI · 第七章:训练 · 混合专家:大参数量、小激活算力

作者 David更新于 第 101 篇(共 186 篇)

MoE(Mixture of Experts,混合专家)把 Transformer 的 FFN 层换成多个并行专家网络,每 token 只激活其中 top-k 个(通常 k=2)。总参数量可达 数百 B 甚至 T 级,但每次 forward 只算 ~1/k 的 FFN 参数——用「稀疏激活」换容量。

Mixtral 8×7B、DeepSeek-V3、GPT-4(据推测)都属于 MoE 架构。

直觉:医院分科,不是每个病人看全部医生

稠密 70B 模型像每位病人跑遍全院所有科室——贵但简单。

MoE 像导诊台:根据症状把病人分给 2 位专科医生(top-2 experts)。医院有 8 个科室(8 experts),但每人只看 2 个——总「编制」大,实际忙的人少。

图表加载中…

定义

对 hidden state hh,router 输出 logits g(h)∈REg(h) \in \mathbb{R}^E(EE 个专家),取 top-k:

MoE(h)=∑i∈TopK(g(h))softmax(g(h))i⋅Experti(h)\text{MoE}(h) = \sum_{i \in \text{TopK}(g(h))} \text{softmax}(g(h))_i \cdot \text{Expert}_i(h)
符号Mixtral 8×7B 示例DeepSeek-V3 示例
总参数~47B(8×7B 专家 + 共享)~671B
激活参数~13B / token~37B / token
专家数 E8256+
top-k28

例子 1:训练 token 与算力

MoE 训练仍要更新全部专家权重(所有专家都会收到 token,只是不同 batch 不同专家忙)。

Mixtral 8×7B 预训练(公开量级):

项数值
训练 token~6T
激活参数~13B
训练 FLOPs(按激活算 forward)≈ 6 × 13×10⁹ × 6×10¹² ≈ 4.7×10²²
对比稠密 47B 全激活省 ~3.6× forward 算力
512× H100,~2 个月量级与官方训练周期同阶

存储:47B × 2 byte(BF16)≈ 94 GB 权重;8×80GB 卡需 张量并行 + 专家并行。

例子 2:负载均衡 auxiliary loss

若 router 总选 Expert 0,其余专家饿死(training instability)。加负载均衡损失:

Laux=α⋅E∑i=1Efi⋅Pi\mathcal{L}_{\text{aux}} = \alpha \cdot E \sum_{i=1}^{E} f_i \cdot P_i

fif_i = batch 中分给专家 ii 的 token 比例,PiP_i = router 对专家 ii 的平均概率。DeepSeek 还用 aux-loss-free 路由等改进。

无 aux loss有 aux loss
1–2 专家承担 80% token各专家 ~12.5%(8 专家)
验证 loss 震荡更稳定

量化:MoE vs 稠密

模型总参数激活参数1T token 训练 GPU·小时(粗算)
Llama 2 70B 稠密70B70B~290k
Mixtral 8×7B47B13B~54k(按激活)
7B 稠密7B7B~29k

MoE 推理也按激活参数计费——部署 Mixtral 像部署 ~13B,不是 47B。

深入:路由与部署

Router 通常是一个小线性层:hidden 向量映射到 EE 维 logits,再 softmax 取 top-k。DeepSeek-V3 把专家数推到 256+,top-k=8,意味着每个 token 同时咨询 8 位「专科医生」,表达能力远超 top-2 的 Mixtral,但 all-to-all 通信也更重——256 专家若跨 64 张 GPU,每个 token 的激活要在卡间跳转,网络带宽成为训练瓶颈之一。

推理部署时,常见三种模式:(1) 全专家加载——单节点多卡用 Expert Parallel 分片,延迟低但机器数固定;(2) 动态卸载——只把热门专家放 GPU,冷门放 CPU/NVMe,适合边缘;(3) 蒸馏成稠密——见 蒸馏,把 MoE 能力压进 7B 稠密,牺牲一点上限换简单运维。若你的 SLA 是「首 token 低于200ms」,Mixtral 级 MoE 在 8×A100 上 batch=1 时吞吐接近 13B 稠密的 1.2–1.5×,而非 47B 的 3×——路由与通信有固定开销。

训练 MoE 时,token 计数方式不变:仍按所有 token 累加,只是每个 token 只更新被激活的专家子集。若 8 专家 top-2,每个专家平均收到 25% token(理想均衡下),单专家见到的 token 数约为总量的 1/4;负载不均时某些专家可能见到 40%+,另一些 低于 5%,后者几乎不学习,前者过拟合——这就是 aux loss 存在的理由。规划 6T token 的 MoE 预训练时,除 FLOPs 外还要预算 比稠密多 20–40% 的 wall-clock,用于 all-to-all 与 checkpoint(47B 权重 + 优化器状态可能 >200 GB/shard)。

常见误区

  1. 「MoE 总参数 = 需要的显存」 — 推理/load 常需加载全部专家(除非 EP 分片到多机)。
  2. 「MoE 训练一定更便宜」 — 通信(all-to-all)、负载均衡、checkpoint 更大;工程复杂度更高。
  3. 「专家越多越强」 — 路由噪声、专家退化;需与 top-k、aux loss 联调。

小结

MoE = 多专家 FFN + top-k 路由;总参数大、激活参数小。Mixtral 8×7B 在 6T token 上训练,有效算力接近 13B 稠密 × 6T。适合在固定推理预算下追求更高容量。

下一篇:LoRA 是什么——只训低秩适配器,单卡微调大模型。

延伸:MoE 与稠密的选择题

选型口诀:推理预算固定、要更大容量 → MoE;训练/运维要简单 → 稠密。7B 稠密训 1T ~29k GPU·h 已是成熟路径;Mixtral 8×7B 训 6T 激活等价 ~13B×6T,forward 省但 总训练 token 更多、系统更复杂。中小团队 不要 从零训 MoE——加载 47B 专家、调试 all-to-all 的门槛远高于 7B 稠密。更现实:用 开源 MoE 基座(Mixtral、DeepSeek)做 LoRA SFT ~10 GPU·小时。MoE 时代「总参数量」用于 marketing,「激活参数量」用于 算力与延迟估算——读论文务必两栏都看。

本页目录