λLLM Wiki

Expert Parallelism

专家并行(Expert Parallelism, EP) 是专门为 MoE(Mixture of Experts) 模型设计的并行策略:将不同的专家分配到不同的 GPU 上,通过 All-to-All 通信把 token 路由到持有目标专家的 GPU 上执行计算。

MoE 基础

MoE 架构把传统 Transformer 的 FFN 层拆成多个较小的专家(Expert)。每个 token 通过 门控网络(Gate/Router) 选择 Top-kk 个专家参与计算,其余专家不激活。

以 DeepSeek V3 为例:256 个细粒度专家 + 少量永远激活的 shared experts,每个 token 激活 k=8k=8 个。这种设计使模型在参数总量极大的同时,单个 token 的计算量(FLOPs)保持可控。

EP 的执行流程

  1. Gate 计算:每个 rank 对本地 token 运行 Gate 网络,计算各专家的得分,选出 Top-kk
  2. Dispatch(All-to-All):将 token 路由到持有目标专家的 rank——每个 rank 同时发出和接收 token,构成 All-to-All 通信
  3. Expert Compute:各 rank 独立执行本地专家的 FFN 计算,无需通信
  4. Combine(All-to-All):计算结果通过 All-to-All 回传到原始 rank,按 Gate 权重加权求和

两次 All-to-All 是 EP 的通信核心。

EP vs TP:通信量对比

定义:NN 为 GPU 数,SS 为每层激活值总大小,kk 为激活专家数。

策略单卡通信量特征
TP2S\approx 2S(恒定)kk 无关,每层必须 all-reduce
EP2kSN\approx \frac{2kS}{N}k/Nk/N 缩放,kNk \ll N 时远小于 TP

NN 很大(如 64 或 256)且 kk 较小(如 8 或 16)时,EP 的通信量远低于 TP。

EP vs TP:计算效率

这是 EP 更关键的优势。

TP 把每个专家的矩阵进一步切分成 1/N1/N,产生极细的”瘦矩阵”。对于 DeepSeek 式的细粒度专家(单个专家本就很小),切分后的 GEMM 维度不足以填满 GPU Tensor Core 的计算流水线,MFU 大幅下降。

EP 保持专家矩阵的完整性。token 虽然要跨卡搬运,但到达目标 GPU 后面对的是形状规整的完整矩阵,可以触发高效的计算内核。

EP vs TP:通信带宽

EP 的弱点在于通信拓扑:

  • TP 通常在单机 NVLink 域内(~900 GB/s)
  • EP 往往跨节点走 RDMA(50-100 GB/s),带宽差一个数量级

此外 All-to-All 是 N2N^2 个小连接,大规模集群下握手开销和长尾延迟不可忽视。

DeepEP 的创新

DeepSeek 的 DeepEP 针对 EP 的通信瓶颈做了两项关键优化:

  1. RDMA 直驱:绕过 NCCL 协议栈,用 PTX 级别优化实现低延迟的跨节点数据交换
  2. 计算-通信重叠(Stream-K):Dispatch 的第一批 token 到达 GPU 时立即开始计算,不等所有 kk 个专家的数据全部到齐。在 k=16k=16 场景下,通信延迟几乎完全被计算时间掩盖
维度TPEP (DeepSeek)
通信量固定 (2S\approx 2S)k/Nk/N 缩放
计算效率低(瘦矩阵)高(完整专家矩阵)
通信延迟NVLink 低延迟RDMA + Stream-K 隐藏延迟
集群扩展性受限于单机支持万卡集群

一个历史视角

EP 并非一直优于 TP。在 GShard 时代的”大而少”MoE 设计(8-64 个大专家)中,单个专家足够大,TP 切分后仍有足够的 GEMM 效率。EP 成为主流是被 DeepSeek 引领的”小而多”专家设计驱动的——算法变化改变了并行策略的最优选择。

相关页面

Comments