跳到主要内容

专家并行(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-V3409687168858.7 MB
Switch-Base20481768160.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)

参考文献