总览
核心要点:
- 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-总览 名词定义。
| 名词 | 定义 |
|---|---|
| Expert | MoE FFN 拆出的独立子网络,每层有 $E$ 个 (DeepSeek-V3 每层 256 个路由 expert + 1 个共享 expert) |
| top-K | Router 为每 token 选中的 expert 数,训练时定死,推理不可改 (DeepSeek-V3 K=8) |
| Router | 计算每 token 对各 expert 的路由分数并选出 top-K 的轻量网络 |
| Dispatch | Router 决策后,各芯片把本地 token 按目标 expert 发到目标芯片的 AllToAll |
| Combine | Expert 计算完成后,按原始 token 归属把结果发回源芯片的 AllToAll (与 Dispatch 对称) |
| EP 组 | 由连续芯片 ID 组成的 AllToAll 通信组,组内做 dispatch/combine,组间不通信 |
| EP 度 ($N_{\text{EP}}$) | EP 组大小,决定 expert 在多少卡上分布;EP 越大每芯片专家数越少,跨芯片概率越高 |
| Logical expert | 模型权重定义的逻辑 expert 单元,数量固定 (如 DeepSeek-V3 每层 256 个) |
| Physical expert / Replica | EPLB 等放置算法把 logical expert 复制后真正驻留在 GPU 上的实例,总数 num_replicas 必须是 num_gpus 的整数倍 |
| Redundant expert | logical 数量之外额外预算的副本数 (如 256 logical + 32 redundant = 288 physical),用于复制热门 expert 拉平负载 |
| Expert group | DeepSeek-V3 group-limited routing 的路由分组,token 只能路由到 top-M 个 group 内的 expert,约束跨节点流量 |
| Balancedness | MoE 层负载均衡度量:mean(GPU MoE 时间) / max(GPU MoE 时间),越接近 1 越均衡 (LMSYS 定义) |
| moe_tp | MoE 内部对单个 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 大小 | 每芯片专家数 | 跨芯片概率 | 单芯片显存/计算负担 |
|---|---|---|---|
| 64 | 4 | 高 | 低 |
| 32 | 8 | 中 | 中 |
| 8 | 32 | 低 | 高 |
@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-V3 | 4096 | 8 | 7168 | 64 | 7.3 MB | 117 KB |
| DeepSeek-V3 | 4096 | 8 | 7168 | 8 | 58.7 MB | 7.3 MB |
| Switch-Base | 2048 | 1 | 768 | 16 | 0.19 MB | 12 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 是独立维度,作用于不同层,同一批芯片复用:
| TP | EP | |
|---|---|---|
| 作用层 | 注意力层、dense FFN | MoE 层 |
| 切分方式 | 单层权重切分 | 不同 expert 到不同芯片 |
| 通信原语 | AllReduce, AllGather, ReduceScatter | AllToAll |
| 通信模式 | 确定性,所有芯片参与 | 稀疏,数据依赖 |
| 典型组大小 | 2, 4, 8 | 8, 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_tp。DeepSeek-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 / 负载) 见本篇,深入应用分四篇:
- 8.2 DeepEP — Normal / Low-Latency kernel、IBGDA、SM 占用、公开实测
- 8.3 EPLB — Hierarchical / Global 策略、Redundant Expert、协作分工
- 8.4 EP All-to-All 通信建模 — α-β 公式、NVLink/RDMA 临界点、与实测对照
- 8.5 大规模 EP 部署实测 — LMSYS 96 H100 案例:五项调优组合与瓶颈分析
参考资料
- DeepSeek-AI, DeepSeek-V3 Technical Report, arXiv:2412.19437, 2024. https://arxiv.org/abs/2412.19437