专家并行(Expert Parallelism)
专家并行(EP)是 MoE(Mixture of Experts,混合专家)模型特有的并行策略。MoE 层中有大量 Expert,每个 Expert 只处理路由到它的 token。EP 将 Expert 分布在不同设备上,通过 AllToAll 通信实现 token 的跨设备路由。
MoE 路由机制
MoE 层的计算流程:
Input tokens
→ Router(路由器) # 对每个 token 计算路由分数,选出 top-K 个 Expert
→ Dispatch(分发) # 将 token 发送到对应 Expert 所在的设备
→ Expert Compute # 各 Expert 独立执行 FFN 计算
→ Combine(收集) # 将 Expert 计算结果返回原始设备
→ Output tokens
top-K 路由:每个 token 激活 $K$ 个 Expert(DeepSeek-V3 中 $K=8$,共 256 个 Expert)。大多数 Expert 对任意单个 token 都处于不激活状态,这是 MoE 稀疏性的来源。
AllToAll 通信时机
EP 在每个 MoE 层触发两次 AllToAll:
第一次:Dispatch AllToAll
- 触发时机:Router 完成路由决策后
- 语义:每个 EP rank 将本地 token 按路由结果分发到持有对应 Expert 的 rank
- 方向:token 从源设备流向目标 Expert 所在设备
第二次:Combine AllToAll
- 触发时机:Expert 计算完成后
- 语义:将 Expert 处理结果返回 token 的原始设备
- 方向:Expert 输出从目标设备流回源设备
EP rank 0 EP rank 1 EP rank 2 EP rank 3
[Expert 0] [Expert 1] [Expert 2] [Expert 3]
Dispatch: rank i → rank j,发送路由到 Expert j 的 token
Combine: rank j → rank i,返回 Expert j 对 token 的处理结果
通信量分析
每次 AllToAll 的总通信量(每个 EP rank 的发送量):
$M_{\text{EP}} = B \times K \times h \times \text{dtype\_size}$
其中 $B$ 为 token 总数,$K$ 为 top-K expert 数,$h$ 为 hidden dimension。
在均匀路由假设下,每对 EP rank 之间的数据量:
$m_{\text{pair}} = \frac{B \times K \times h \times \text{dtype}}{N_{\text{EP}}}$
典型模型的 EP AllToAll 通信量:
| 模型 | $B$ | $K$ | $h$ | $N_{\text{EP}}$ | 每对 rank 通信量(BF16) |
|---|---|---|---|---|---|
| DeepSeek-V3 | 4096 | 8 | 7168 | 8 | 58.7 MB |
| Switch-Base | 2048 | 1 | 768 | 16 | 0.19 MB |
DeepSeek-V3 是大消息场景(Pairwise AllToAll 最优),Switch-Base 是小消息场景(Bruck AllToAll 可能更优)。
EP 通信特征汇总:
| 特征 | 值 |
|---|---|
| 通信原语 | AllToAll |
| 消息大小 | 0.1 MB ~ 60 MB(取决于模型和 batch) |
| 通信组大小 | EP 组大小(通常 4 ~ 64) |
| 频率 | 每 MoE 层 2 次(Dispatch + Combine) |
| 延迟敏感性 | 高(在关键路径上,难以 overlap) |
| 特殊性 | 通信量不均匀(取决于路由决策) |
| 推荐算法 | 大消息用 Pairwise,小消息用 Bruck |
通信不均匀性
MoE 路由通常不均匀——某些 Expert 被频繁选中(hot Expert),导致对应 EP rank 收到的 token 数量远多于其他 rank。这种负载不均衡会导致:
- Dispatch AllToAll 的通信量不对称
- Expert 计算时间不均衡,导致 Combine AllToAll 前的等待
- 有效延迟高于均匀路由的理论预测值
与 TP 的组合方式
当 EP 和 TP 同时使用时,每个 Expert 可以进一步做 TP 内切分:
$\text{MoE 层总并行度} = EP \times TP$
通信模式(以单个 MoE 层为例):
AllToAll(EP dispatch)
→ Expert Compute(TP 内各 rank 独立计算部分积)
→ AllReduce(TP 内合并 Expert 输出)
→ AllToAll(EP combine)
每个 MoE 层的通信顺序:AllToAll → AllReduce → AllToAll(三次集合通信)。
EP+TP 组合的设计权衡:
- EP 大:Expert 分布更广,单 Expert 显存占用低,但跨节点 AllToAll 带宽成本高
- TP 大:单 Expert 被 TP 切分,显存进一步降低,但同层增加 AllReduce
- DeepSeek-V3 的选择:刻意避免 TP,只使用 EP,以减少 AllReduce 的延迟(AllToAll 的跨节点带宽可以通过 DualPipe 与计算 overlap)
参考文献
- Fedus et al., "Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity", JMLR 2022. https://arxiv.org/abs/2101.03961
- DeepSeek-AI, "DeepSeek-V3 Technical Report", arXiv 2024. https://arxiv.org/abs/2412.19437
- Lepikhin et al., "GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding", ICLR 2021. https://arxiv.org/abs/2006.16668