跳到主要内容

总览

核心要点

  • MoE 路由机制与 top-K 稀疏性
  • EP 组划分如何影响每芯片专家数与通信
  • Dispatch / Combine 两次 AllToAll 的语义
  • EP AllToAll 通信量公式与典型量级
  • 路由不均匀对延迟的影响,balls-into-bins 估算
  • EP 与 TP / moe_tp 的组合关系

专家并行 (Expert Parallelism, EP) 是 MoE 模型特有的并行:把不同 expert 分布到不同设备,通过 AllToAll 实现 token 跨设备路由。每个 token 只激活 top-K 个 expert,通信稀疏且数据依赖。

名词定义

本章节子文档默认这些名词已定义;父章节通用名词 (TP / DP / AllToAll 等) 见 05-LLM并行通信/01-总览 名词定义。

名词定义
ExpertMoE FFN 拆出的独立子网络,每层有 $E$ 个 (DeepSeek-V3 每层 256 个路由 expert + 1 个共享 expert)
top-KRouter 为每 token 选中的 expert 数,训练时定死,推理不可改 (DeepSeek-V3 K=8)
Router计算每 token 对各 expert 的路由分数并选出 top-K 的轻量网络
DispatchRouter 决策后,各芯片把本地 token 按目标 expert 发到目标芯片的 AllToAll
CombineExpert 计算完成后,按原始 token 归属把结果发回源芯片的 AllToAll (与 Dispatch 对称)
EP 组由连续芯片 ID 组成的 AllToAll 通信组,组内做 dispatch/combine,组间不通信
EP 度 ($N_{\text{EP}}$)EP 组大小,决定 expert 在多少卡上分布;EP 越大每芯片专家数越少,跨芯片概率越高
Logical expert模型权重定义的逻辑 expert 单元,数量固定 (如 DeepSeek-V3 每层 256 个)
Physical expert / ReplicaEPLB 等放置算法把 logical expert 复制后真正驻留在 GPU 上的实例,总数 num_replicas 必须是 num_gpus 的整数倍
Redundant expertlogical 数量之外额外预算的副本数 (如 256 logical + 32 redundant = 288 physical),用于复制热门 expert 拉平负载
Expert groupDeepSeek-V3 group-limited routing 的路由分组,token 只能路由到 top-M 个 group 内的 expert,约束跨节点流量
BalancednessMoE 层负载均衡度量:mean(GPU MoE 时间) / max(GPU MoE 时间),越接近 1 越均衡 (LMSYS 定义)
moe_tpMoE 内部对单个 expert 再做 TP 列/行切分的二次并行,与 EP 叠加可降低单卡专家显存
MTP (Multi-Token Prediction)DeepSeek-V3 的推测解码模块,主模型每层多一个 MTP block,一次预测 next-2 token

@tbl-ep-overview-glossary EP 子章共享名词表

MoE 路由机制是什么?top-K 怎么用?

MoE 层把 FFN 拆成多个 expert,每个 token 只激活 top-K 个

Input tokens
→ Router 对每个 token 计算路由分数, 选 top-K expert
→ Dispatch 把 token 发到对应 expert 所在的设备
→ Expert Compute 各 expert 独立做 FFN 计算
→ Combine 结果返回原始设备
→ Output tokens

top-K 是固定超参数

  • DeepSeek-V3: K=8,共 256 个路由 expert + 1 个共享 expert
  • 训练时定下,推理不可改
  • 大多数 expert 对任意单 token 都不激活,这是 MoE 稀疏性来源

EP 组怎么划分?影响什么?

EP 组由连续的芯片 ID 组成,组内 AllToAll,组间不通信。以 64 芯片 / 256 专家为例:

EP 大小每芯片专家数跨芯片概率单芯片显存/计算负担
644
328
832

@tbl-ep-01 EP 大小与各项指标的权衡

EP 越大,专家分布越分散,单芯片显存低但跨芯片通信概率上升;EP 越小则反之。单芯片"计算负担" $\propto$ 每芯片专家数 $\times$ 落到本地的 token 数,而每芯片专家数 $= N_\text{expert} / \text{EP}$,因此计算负担与 EP 成反比。

Dispatch 和 Combine 各做什么?

每个 MoE 层触发两次 AllToAll,对称结构

  • Dispatch AllToAll: Router 决策后,每芯片把本地 token 按目标芯片合并,向各目标芯片发送 token 的 hidden vector。所有芯片同时发起
  • Combine AllToAll: Expert 计算完成后,各芯片把结果按原始 token 归属发回源芯片

Dispatch 通信矩阵

通信矩阵完整描述 dispatch 通信行为:

$$\begin{equation} C[i][j] = n_{ij} \cdot h \cdot \text{dtype\_size} \label{eq:par-ep-dispatch-matrix} \end{equation}$$

其中 $n_{ij}$ 是芯片 $i$ 路由到芯片 $j$ 的 token 数,$h$ 是 hidden size。

以 EP=64, B=512 token, top-8, 256 专家 (每芯片 4 个) 为例:

  • 每芯片持 8 个 token
  • 一个 token 选 8 个 expert,落在 8 个目标芯片 (expert_id / 4 = chip_id)
  • 8 个 token 汇总后,单芯片需要向约 30–50 个目标芯片发送

单 token 扇出 vs 单芯片扇出不是一回事

  • 单 token 扇出:最多 K 个目标芯片 (top-8 → 8)
  • 单芯片扇出:随 token 数增长,batch 大时接近覆盖全 EP

通信量公式

EP 组内 dispatch 总通信量:

$$\begin{equation} M_{\text{total}} = B \cdot K \cdot h \cdot \text{dtype\_size} \label{eq:par-ep-comm-total} \end{equation}$$

每芯片平均发送:

$$\begin{equation} M_{\text{per\_chip}} = \frac{B \cdot K}{N_{\text{EP}}} \cdot h \cdot \text{dtype\_size} \label{eq:par-ep-comm-per-chip} \end{equation}$$

均匀路由下,每对芯片间数据量:

$$\begin{equation} m_{\text{pair}} = \frac{B \cdot K \cdot h \cdot \text{dtype\_size}}{N_{\text{EP}}^2} \label{eq:par-ep-comm-pair} \end{equation}$$

典型量级:

模型$B$$K$$h$$N_{\text{EP}}$每芯片发送 (BF16)每对芯片
DeepSeek-V3409687168647.3 MB117 KB
DeepSeek-V3409687168858.7 MB7.3 MB
Switch-Base20481768160.19 MB12 KB

@tbl-ep-02 典型模型的 EP AllToAll 通信量

EP AllToAll 为什么不同于普通 AllToAll?

EP 的 AllToAll 是稀疏且数据依赖的,跟拓扑相关性更强

  • token 级稀疏:每个 token 只与 $K$ 个目标芯片通信,$K \ll \text{EP}$
  • 芯片级稀疏度随 batch 变化:batch 小时通信矩阵稀疏 (EP=64, 512 token 时约 36% 芯片对无通信),batch 大时趋向 dense
  • 所有芯片同时发起:dispatch 不分步,每芯片同时向多目标并发发送,拓扑链路上产生竞争

节点限制路由 (DeepSeek-V3):每个 token 最多访问 $M=4$ 个节点 (每节点 8 GPU),节点内 NVLink 转发,减少跨节点 IB 流量。

路由不均匀对延迟有什么影响?

MoE 路由通常不均匀,少数 hot expert 接收远多于平均的 token,直接拉高延迟:

  • Dispatch AllToAll 通信量不对称
  • Expert 计算时间不均,Combine 前出现等待
  • 有效延迟高于均匀路由的理论预测值

详细的负载均衡算法见 8.3 EPLB

如何在不跑模型时估算 EP 负载?

Balls-into-Bins 近似:把 token 路由视作随机投球。$T$ 个 token 各选 $K$ 个 expert,共 $E$ 个 expert 分布在 $P$ 个芯片 (每芯片 $E/P$ 个),每芯片被至少一个 token 命中的 expert 数:

$$\begin{equation} E_{\text{active}} = \frac{E}{P} \cdot \left(1 - e^{-T \cdot K / E}\right) \label{eq:par-ep-active-experts} \end{equation}$$
  • $T$ 远大于 $E$:几乎所有 expert 都被激活
  • $T$ 较少:只有部分 expert 被命中,通信和计算量相应减少

蒙特卡洛模拟:采样数千次随机 top-K 选择,统计最繁忙芯片的期望负载,给出最坏情况上界。

EP 通信特征汇总

核心问题:EP 的 dispatch/combine 通信量、消息大小、频率和瓶颈如何汇总?

特征
通信原语AllToAll (稀疏)
消息大小0.1 MB ~ 60 MB (取决于模型 / batch)
通信组大小EP 组大小,通常 4 ~ 64
频率每 MoE 层 2 次 (Dispatch + Combine)
延迟敏感性高 (关键路径,难以 overlap)
特殊性通信量不均匀,取决于路由决策
推荐算法大消息 Pairwise,小消息 Bruck

@tbl-ep-03 EP 通信特征汇总

EP 跟 TP 怎么共存?

EP 和 TP 是独立维度,作用于不同层,同一批芯片复用

TPEP
作用层注意力层、dense FFNMoE 层
切分方式单层权重切分不同 expert 到不同芯片
通信原语AllReduce, AllGather, ReduceScatterAllToAll
通信模式确定性,所有芯片参与稀疏,数据依赖
典型组大小2, 4, 88, 16, 32, 64

@tbl-ep-04 TP 与 EP 区别

moe_tp:专家内张量并行

moe_tp 把单个 expert 的权重进一步切到多芯片 (TensorRT-LLM 等框架支持):

  • TP 作用于注意力层
  • moe_tp 作用于单 expert 内部

moe_tp > 1 时,MoE 层通信变成三次集合通信:

AllToAll (EP dispatch)
→ Expert Compute (moe_tp 内计算部分积)
→ AllReduce (moe_tp 内合并 expert 输出)
→ AllToAll (EP combine)

EP 通信组大小变为 ep * moe_tpDeepSeek-V3 不用 moe_tp (每个 expert 独占一个芯片),只有两次 AllToAll,无额外 AllReduce。

DeepSeek-V3 的实际并行配置[1]

场景配置说明
训练 (2048 H800)PP=16, EP=64, DP(ZeRO-1),不用 TP刻意避免 TP 以减少 NVLink 瓶颈
推理 Prefill注意力 TP=4+SP, MoE EP=32注意力与 MoE 用不同策略

@tbl-ep-05 DeepSeek-V3 的并行配置

EP + TP + moe_tp 的权衡

  • EP 大:expert 分布广,单 expert 显存低,跨节点 AllToAll 带宽成本高
  • TP 大:注意力切分细,单芯片显存低,增加 AllReduce 通信
  • moe_tp 大:支持更大 expert,每 MoE 层多一次 AllReduce

Takeaway

知识点核心结论
MoE 路由top-K 稀疏路由,K 是训练时固定超参
EP 组划分EP 大:分布广通信高;EP 小:集中通信少负担重
通信原语每 MoE 层 2 次 AllToAll (Dispatch + Combine)
通信量公式$B \times K \times h \times \text{dtype}$
稀疏 + 数据依赖与拓扑相关性强,大 batch 时趋向 dense
负载不均影响hot expert 拖慢,实际延迟 > 理论预测
负载估算Balls-into-bins 近似 / 蒙特卡洛模拟
组合策略TP 用于注意力,EP 用于 MoE, moe_tp 切单 expert

@tbl-ep-06 EP 核心知识点

深入子文档

EP 基础机制 (路由 / AllToAll / 负载) 见本篇,深入应用分四篇:

参考资料

  1. DeepSeek-AI, DeepSeek-V3 Technical Report, arXiv:2412.19437, 2024. https://arxiv.org/abs/2412.19437