mcpField
N
nemo-mbridge-perf-moe-dispatcher-selection

nemo-mbridge-perf-moe-dispatcher-selection

github.com/nvidia开发3.8k1.8k 次安装今天更新
代码仓库

关于 nemo-mbridge-perf-moe-dispatcher-selection

nemo-mbridge-perf-moe-dispatcher-selection 是用于选择和调优 Megatron Bridge 训练中 MoE Token 分发器的技能。它按硬件、模型负载和 EP 规模提供选择指导,并强调先验证后端可用性及保持测量条件一致。

主要功能

  1. 01选择 alltoall、DeepEP 或 HybridEP
  2. 02按硬件和负载匹配分发器
  3. 03调节通信内核的 SM 数量
  4. 04计时前检查后端是否可用
  5. 05考虑拓扑与路由设置

适用场景

  1. 01为 H100 或 B200 选择分发器
  2. 02调优 GB200 或 GB300 NVL72 上的 MoE
  3. 03启动或排查小规模 EP 配置
  4. 04一致地比较分发器性能

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nvidia/skills --skill nemo-mbridge-perf-moe-dispatcher-selection

安装后在 Claude Code 中输入/nemo-mbridge-perf-moe-dispatcher-selection确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

BENCHMARK.md
card.yaml
skill-card.md
skill.oms.sig
evals/
evals.json

详细介绍

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分发器选择通常不是首要因素;从 alltoall 或 DeepEP 开始
中等规模 EPDeepEP 往往开始显现优势
大规模 EP在 NVL72 系统上,HybridEP 通常是最佳目标

模型系列模式

工作负载常见最佳路径备注
大规模 DSV3GB200 或 GB300 上使用 HybridEP,H100 上使用 DeepEPEP 和 PP 都增大时,分发器选择的影响也会增大
Qwen3 235BH100 上使用 DeepEP,GB200 上使用 HybridEPHybridEP 在 GB200 上通常更快,且往往占用更少内存
Qwen3 30BDeepEP较小的模型也能受益,但绝对差距较小
Qwen3-NextBF16 下竞争接近,FP8 或内存紧张的运行中 HybridEP 更强提醒我们要进行测试,而不是想当然
MoE VLM从简单方案开始,然后在 GB200 级别的系统上测试 HybridEP视觉工作负载对内存和主机开销都很敏感

四舍五入后的证据摘要

后端可用性门槛

在容器确认所选后端包可用之前,不要解读分发器耗时。--moe_flex_dispatcher_backend None 会选择标准的 alltoall 分发器,而 deepep 和 hybridep 会选择 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_router、 moe_preprocess),并由于运行容器中的 Triton JIT 兼容性问题,设置了 model.moe_permute_fusion=false。alltoall 回退方案在预热后完成了五个 步骤,平均步时为 45.65 s,预热后的平均吞吐为 132.9 TFLOP/s/GPU,最终损失为 11.44050,峰值最大已分配内存为 61.351 GB。DeepEP 和 HybridEP 在导出的配置中 选择了请求的 flex 后端,但由于未安装对应的软件包,在首次迭代前就失败了。这 验证了可用性门槛;它并非 H100 上 flex 分发器的吞吐量排名。

GB200 或 GB300 上的 DSV3

整体趋势比追踪表中的任何单行结果都更重要:

  • 普通 alltoall 通常是保守的基线
  • 当 EP 通信变得明显时,DeepEP 会提升基线表现
  • 在 NVL72 系统上,HybridEP 会进一步提升表现,尤其是在 CUDA graphs、路由优化和 CPU 侧清理已完成之后

实践中,经过完整的分发器和内核栈调优后,整个技术栈的 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

设置 moe_token_dispatcher_type="flex" 和 moe_flex_dispatcher_backend="deepep" 即可选择 DeepEP。

--moe-deepep-num-sms 20

调整分配给 DeepEP 通信内核的 SM 数量(默认值为 20)。 最佳值取决于工作负载和 EP 度数。 首先确认 DeepEP 软件包可以在目标容器中导入;如果缺少该软件包,模型构建阶段就会失败,无法获取任何调度器计时数据。

HybridEP

设置 moe_token_dispatcher_type="flex" 和 moe_flex_dispatcher_backend="hybridep" 即可选择 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 图在采用无丢弃 MoE 时,最适合与 attn moe_router moe_preprocess 搭配使用
EP 重叠后端调优后,如果调度器耗时仍然明显,则有帮助
FP8往往会提升通信和主机开销的相对重要性
CPU 亲和性在 GB200 或 GB300 上,其影响可能不亚于调度器选择
流水线布局不佳的 PP 或 VPP 布局可能抵消调度器带来的收益

何时使用各方案

alltoall
  • 初次验证正确性
  • 小规模 EP 配置
  • 调试通信性能回退
DeepEP
  • Hopper 或 B200 部署
  • 在性能分析中可以明显看到跨节点 EP
  • 希望先使用成熟的中间方案,再测试 HybridEP
HybridEP
  • GB200 或 GB300 NVL72 系统
  • 较大的 EP 度数
  • 除吞吐量外,内存余量也很重要

注意事项

  1. 不要在不同的软件栈上比较调度器:容器、路由模式、PP 布局和 CUDA 图范围带来的影响,可能与调度器本身不相上下。

  2. HybridEP 对拓扑敏感:在其设计目标硬件之外,它并非普遍适用的优选方案。

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

  4. 强制均衡与无丢弃并非可互换的基准设置:比较调度器后端时,应固定路由模式。

  5. 不同模型的内存与吞吐量权衡可能不同:Qwen3 风格的运行可能不像 DSV3 那样有明显的速度提升,但 HybridEP 仍可能因增加内存余量而值得采用。

  6. 后端导入失败不代表性能数据:如果容器中缺少 DeepEP 或 HybridEP,不要将其失败的作业与已完成的 alltoall 作业进行比较。先修复环境,再使用相同的软件栈重新运行。

评论

支持 Markdown