专家并行(Expert Parallelism, EP)是 MoE 架构的标配并行策略:把大模型拆成 N 个独立”专家”分布到不同 GPU,路由器为每个 token 选少量专家激活。突破”单卡装不下 + 算力浪费”的双重瓶颈。
三步原理
- 拆分专家:把稠密大模型替换为 N 个独立专家(小型 FFN 网络),每个专家放在不同 GPU,单卡只存自己负责的那一部分
- 路由分配:每个输入 token 经过路由器(一个小 MLP),打分后选 top-k(通常 k=1 或 2)专家;通过 All-to-All 通信把 token 送到目标 GPU
- 稀疏激活 + 汇总:只有被选中的专家参与计算,结果再次 All-to-All 送回原 GPU 拼接
稀疏激活是 MoE 的精髓:模型规模可达万亿参数,单步计算量却只随激活的 k 个专家增长。
与其他并行的区别
| 策略 | 拆什么 | 解决问题 |
|---|---|---|
| 数据并行(DP) | 把数据切给多卡,模型复制 | 数据量大,需提升吞吐 |
| 张量并行(TP) | 把单层权重切给多卡 | 单层过大,单卡装不下 |
| 流水并行(PP) | 把不同层放在不同卡 | 总参数过多,单卡装不下 |
| 专家并行(EP) | 把模型拆成多个独立专家分布到多卡 | 模型超大但希望计算稀疏 |
DP 解决”数据多”;TP/PP 解决”模型大”;EP 解决”模型超大且希望计算稀疏”。
实操两大坑
负载均衡
如果路由器总把 token 分给少数专家,会导致几张 GPU 过载、其他闲置。解决:
- 辅助损失:对路由概率加 KL 或方差惩罚(如 Switch Transformer 的负载均衡损失)
- 容量上限:设置每个专家的 token 容量,超过则丢弃或溢出到下一个专家
- 学习路由偏置:DeepSeekMoE 等用动态偏置项主动平衡
通信开销
每个 token 要经过两次 All-to-All(送出/收回),通信量随 batch 与专家数增长。要点:
- 高带宽互联(NVLink、InfiniBand)必备
- 与 ZeRO/FSDP/TP 组合时要小心通信冲突
- DeepSpeed-MoE、Megatron-MoE 等框架对此有针对性优化
典型案例
- Switch Transformer(Google):1.6 万亿参数,每个 token 只激活 1 个专家
- GLaM、Mixtral、DeepSeek V3:top-2 路由,激活参数远小于总参数
- 业内共识:MoE 是总参数 × 训练效率 × 推理成本三者权衡的最佳解之一