MoE分发器选择指南Skill nemo-mbridge-perf-moe-dispatcher-selection

本技能用于为 MoE(混合专家)模型选择最佳令牌分发器(alltoall、DeepEP、HybridEP),涵盖硬件(H100/B200/GB200/NVL72等)、EP 规模、模型系列(DSV3、Qwen3、Qwen3-Next 等)、调优参数及常见陷阱,是分布式训练调优的关键参考。关键词:MoE、令牌分发器、alltoall、DeepEP、HybridEP、EP、NVL72、分布式训练、模型训练优化。

分布式训练调优 0 次安装 0 次浏览 更新于 9/7/2026
名称 nemo-mbridge-perf-moe-dispatcher-selection
描述 为硬件、EP 度和优化阶段选择合适的 MoE 令牌分发器(alltoall、DeepEP 或 HybridEP)。总结了 DSV3、Qwen3、Qwen3-Next 和 VLM 项目中的经验模式。
开源协议 Apache-2.0 when_to_use: 选择 MoE 令牌分发器,或将 MoE 回归或崩溃追溯到分发器配置变更;关键词包括’which dispatcher’, ‘alltoall vs DeepEP’, ‘HybridEP’, ‘MoE dispatcher’, ‘flex backend’, ‘EP dispatcher selection’。

MoE 分发器选择指南

稳定文档:@docs/training/moe-optimization.md 卡片:@skills/nemo-mbridge-perf-moe-dispatcher-selection/card.yaml

快速决策

按硬件选择

硬件 首选 原因
H100 DeepEP(如果已安装运行时包) 在 Hopper 上进行跨节点 EP 的强默认选择
B200 DeepEP(如果已安装运行时包) 除非有平台特定的 HybridEP 路径可用,否则是不错的首选
GB200 / GB300 NVL72 HybridEP(如果已安装运行时包) 最适合 NVLink 域感知分发,且内存压力更低
未知或首次搭建 alltoall 最容易实现正确性和调试

按 EP 度(EP 规模)选择

EP 规模 指导建议
小 EP 分发器选择通常是次要因素;从 alltoall 或 DeepEP 开始
中 EP DeepEP 通常变得有价值
大 EP HybridEP 通常是 NVL72 系统上的最佳目标

模型系列模式

工作负载 常见最佳路径 备注
大规模 DSV3 GB200/GB300 上使用 HybridEP,H100 上使用 DeepEP 随着 EP 和 PP 都增加,分发器选择变得更加重要
Qwen3 235B H100 上使用 DeepEP,GB200 上使用 HybridEP 在 GB200 上 HybridEP 通常胜出,且内存占用通常更少
Qwen3 30B DeepEP 较小的模型仍然受益,但绝对差距较小
Qwen3-Next BF16 下竞争激烈,FP8 或内存紧张场景下 HybridEP 更强 提醒我们要实际测试而非臆断
MoE 视觉语言模型(VLM) 从简单开始,然后在 GB200 级系统上测试 HybridEP 视觉工作负载对内存和主机开销都很敏感

全面的实证摘要

后端可用性检查

在容器环境确认所选后端包可用之前,不要解读任何分发器计时数据。--moe_flex_dispatcher_backend None 选择标准的 alltoall 分发器,而 deepephybridep 则选择 moe_token_dispatcher_type="flex",并在模型构建时要求安装相应的运行时包。如果缺少 DeepEP 或 HybridEP,请将导入失败记录为环境限制,并将 alltoall 作为该次运行中唯一经过正确性验证的备选方案。

H100 上的 Qwen3 30B A3B

2026-05-17 在 H100 上进行了一次短暂的冒烟测试,使用 Qwen3 30B A3B BF16、16 张 GPU、EP=16、配置中的 Transformer Engine CUDA graph 作用域(moe_routermoe_preprocess),并因运行容器中的 Triton JIT 兼容性问题而设置了 model.moe_permute_fusion=falsealltoall 备选方案完成了五个步骤,预热后平均每步时间为 45.65 秒,预热后平均每 GPU 达 132.9 TFLOP/s,最终损失为 11.44050,峰值最大分配内存为 61.351 GB。DeepEP 和 HybridEP 在导出的配置中选择了所请求的 flex 后端,但因为未安装相应包而在第一次迭代前失败。这证实了可用性门控;它并不是 H100 上 flex 分发器的吞吐量排名。

GB200 或 GB300 上的 DSV3

总体趋势比跟踪表中的任何单一行都更重要:

  • 普通的 alltoall 通常是保守的基线
  • 一旦 EP 通信变得显著,DeepEP 就能改进该基线
  • 在 NVL72 系统上,HybridEP 还能进一步提升,尤其是在 CUDA graphs、路由优化和 CPU 端清理已经就绪之后

在实践中,经过完整的分发器和内核栈调优后,计算栈通常从“十几低位 MFU”的未调优基线,进入“十几高位到二十出头 MFU”的水平。

GB200 上的 Qwen3 235B

对于 Qwen3 235B,实际的顺序通常是:

  1. 使用 alltoall 进行初始搭建
  2. 如果你想要一条熟悉的调优路径,使用 DeepEP
  3. 在 GB200 上使用 HybridEP 以获得最强的稳态结果

在此工作负载上,HybridEP 通常比 alltoall 略有优势,并且往往拥有更好的内存余量。

GB200 上的 Qwen3-Next

该模型系列很好地提醒我们,分发器的优势是与工作负载相关的:

  • 在 BF16 下,alltoall 和 HybridEP 可能非常接近
  • 在 FP8 或内存受限的设置下,HybridEP 往往表现更好
  • 流水线布局和分组 GEMM 的变化可能与分发器本身几乎同等重要

调优参数

DeepEP

DeepEP 通过设置 moe_token_dispatcher_type="flex"moe_flex_dispatcher_backend="deepep" 来选择。

--moe-deepep-num-sms 20

调整分配给 DeepEP 通信内核的 SM 数量(默认 20)。最佳值取决于工作负载和 EP 度。首先确认目标容器中能够导入 DeepEP 包;如果缺少该包,会在模型构建期间失败,此时任何分发器计时数据都还不可用。

HybridEP

HybridEP 通过设置 moe_token_dispatcher_type="flex"moe_flex_dispatcher_backend="hybridep" 来选择。

--moe-hybridep-num-sms 16

调整分配给 HybridEP 通信的 SM 数量(默认 16)。性能测试工具对 HybridEP 工作负载使用 32。针对目标硬件在 16 到 32 之间扫描。设置 NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN 以匹配部署的 NVLink 域大小。如果与实际拓扑不匹配,性能会下降,有时甚至会出现正确性问题。 首先确认目标容器中能够导入 HybridEP 包;如果缺少该包,会在模型构建期间失败,此时任何分发器计时数据都还不可用。

路由模式

--moe-router-force-load-balancing

对于性能基准测试,强制均衡路由是更安全的默认选项。在大规模基准测试中,它通常优于“无丢失”路由,并且使结果在不同分发器后端之间更具可比性。

关键交互

特性 交互影响
CUDA graphs 在无丢失 MoE 上与 attn moe_router moe_preprocess 配合最佳
EP 重叠 在后端调优后仍有分发器时间可见时有帮助
FP8 通常会提高通信和主机开销的相对重要性
CPU 亲和性 在 GB200 或 GB300 上可能与分发器选择同样重要
流水线布局 糟糕的 PP 或 VPP 布局会抵消分发器带来的收益

各自的使用时机

alltoall

  • 首次进行正确性搭建
  • 小规模 EP 配置
  • 调试通信性能回退问题

DeepEP

  • Hopper 或 B200 部署
  • profile 中跨节点 EP 清晰可见
  • 在测试 HybridEP 之前想要一个成熟的中间步骤

HybridEP

  • GB200 或 GB300 NVL72 系统
  • 大 EP 度
  • 除了吞吐量之外,内存余量也很重要

常见陷阱

  1. 不要在不同技术栈上比较分发器:容器、路由模式、PP 布局和 CUDA-graph 作用域对结果的影响可能与分发器本身一样大。

  2. HybridEP 对拓扑敏感:在它设计的硬件之外,它并不是普遍优势。

  3. 两种分发器都需要 SM 调优:默认的 moe_deepep_num_sms (20) 和 moe_hybridep_num_sms (16) 是合理的起点,但很少是最优值。

  4. 强制均衡和无丢失路由不是可互换的基线:在比较分发器后端时,保持路由模式固定。

  5. 内存和吞吐量在不同模型上的权衡不同:Qwen3 类运行可能比 DSV3 显示出更小的速度差异,但仍可能因内存余量而选择 HybridEP。

  6. 后端导入失败不是性能数据:如果容器中缺少 DeepEP 或 HybridEP,不要将它的失败任务与已完成的 alltoall 任务进行比较。先修复环境,然后重跑相同技术栈。