mcpField
N
nemo-mbridge-recipe-recommender

nemo-mbridge-recipe-recommender

github.com/promptingcompany开发042 次安装17 周前更新
代码仓库

关于 nemo-mbridge-recipe-recommender

nemo-mbridge-recipe-recommender 是用于选择和调整 Megatron Bridge 训练配方的技能。它根据模型、GPU 配置、训练目标和序列长度给出建议,并区分功能训练配置与使用模拟数据的吞吐基准。

主要功能

  1. 01索引库配方与性能配方
  2. 02按模型和训练目标匹配配方
  3. 03提供入口命令建议
  4. 04给出并行度与批次调整建议
  5. 05说明基准测试和初始测试注意事项

适用场景

  1. 01为预训练、SFT 或 PEFT 选择配方
  2. 02按现有 GPU 资源调整配方
  3. 03运行初次 Bridge 冒烟测试
  4. 04避免将基准配置误用为生产训练

安装

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

$npx skills add https://github.com/promptingcompany/nv-skills --skill nemo-mbridge-recipe-recommender

安装后在 Claude Code 中输入/nemo-mbridge-recipe-recommender确认已加载。

包含的文件

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

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

详细介绍

Auto Recipe — 配方索引与推荐

此技能会为所有已发布的配方建立索引,并帮助用户选择合适的起始配置、调整并行度以及避免常见问题。

如何使用此技能

  1. 向用户询问:模型名称/规模、GPU 数量与类型、训练目标 (预训练 / SFT / PEFT),以及序列长度(如果不是默认值)。
  2. 在下方索引中查找最匹配的配方。
  3. 推荐配方函数名称和入口命令。
  4. 提供调整建议(调整并行度、调节批次大小、规避问题)。

首次回答检查清单

推荐配方时,在提供详细索引之前,务必说明以下区别:

  1. src/megatron/bridge/recipes/ 下的库配方用于功能训练,并使用 scripts/training/run_recipe.py。
  2. scripts/performance/ 下的性能配方用于测量吞吐量上限。它们使用模拟数据,不应作为生产训练配方推荐。
  3. 首次进行 Bridge 冒烟测试时,建议使用 llama3_8b_sft_config,并通过 --dataset llm-pretrain-mock 使用模拟数据。除非用户明确需要 SFT 数据路径,否则不要在仅用于测试配置的试运行中使用 llm-finetune。
  4. 常规 SFT 推荐使用 --dataset llm-finetune;预训练和模拟验证推荐使用 --dataset llm-pretrain-mock。
  5. 给出配方和数据集后,说明必要的调整规则:TP 必须能整除 num_key_value_heads;除非使用 NVL72 级别的互连,否则 TP 应限制在单个节点内;TP > 1 时启用 SP;长上下文需配置 CP;DP 为隐式配置;遇到 OOM 时先减小 micro_batch_size。

入口

库配方(功能训练)
# Pretrain with mock data
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe <recipe_function_name> \
    --dataset llm-pretrain-mock

# SFT with SQuAD
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe <recipe_function_name> \
    --dataset llm-finetune

# Override any field via CLI
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe llama3_8b_pretrain_config \
    --dataset llm-pretrain-mock \
    'model.tensor_model_parallel_size=2' \
    'training.global_batch_size=64'
性能配方(吞吐量基准测试)
python scripts/performance/run_script.py \
    --recipe <model_family> \
    --gpu_type h100 \
    --num_gpus 64 \
    --data mock

在将这些配方用于吞吐量基准测试以外的用途之前,请参阅性能配方索引中的重要注意事项。


配方统一(即将推出 — PR #2803)

PR #2803 正在将性能配方统一为与库配方相同的 Python 函数格式。主要变更:

  • 性能配方从 scripts/performance/configs/ 移至 src/megatron/bridge/recipes/<family>/<model>_perf.py
  • 每个性能配方都将成为一个独立的 Python 函数(例如 llama3_8b_h100_bf16_pretrain_config())
  • 移除旧的 WorkloadBaseConfig → set_workload_base_configs → get_perf_optimized_recipe 流程
  • 共享辅助函数:_benchmark_common()(50 次迭代、计时、TE RNG)、_perf_precision()(bf16 / fp8_cs / fp8_mx / nvfp4)

为什么用 Python,而不是 YAML? 之前基于 YAML 的方案存在一些问题: 配方逻辑分散在多个间接层中,配置并非独立完整,而且两级流程让维护和调试 变得困难。Python 函数清晰明确、便于搜索,也易于组合。

#2803 合并后,库配方和性能配方都将通过相同的 run_recipe.py 入口运行。


库配方索引

所有配方均位于 src/megatron/bridge/recipes/ 下。每个函数都会返回一个 ConfigContainer,其中包含模型、训练、优化器和数据设置。

Llama
RecipeModeTPPPCPSPGPUs (min)Seq Len
llama2_7b_pretrain_configPretrain21——24K
llama3_8b_pretrain_configPretrain21—✓28K
llama3_8b_16k_pretrain_configPretrain212✓416K
llama3_8b_64k_pretrain_configPretrain214✓864K
llama3_8b_128k_pretrain_configPretrain218✓16128K
llama3_70b_pretrain_configPretrain84—✓328K
llama3_70b_16k_pretrain_configPretrain842✓6416K
llama3_70b_64k_pretrain_configPretrain844✓12864K
llama31_405b_pretrain_configPretrain816—✓1288K
llama3_8b_sft_configSFT21—✓28K
llama3_70b_sft_configSFT44—✓168K
llama31_405b_sft_configSFT88—✓648K
llama3_8b_peft_configPEFT11——18K
llama3_70b_peft_configPEFT24—✓88K
llama31_405b_peft_configPEFT48—✓328K
Qwen2 / Qwen2.5
RecipeModeTPPPSizes
qwen2_*_{pretrain,sft,peft}_configAll1–81–4500M, 1.5B, 7B, 14B, 32B, 72B
qwen25_*_{pretrain,sft,peft}_configAll1–81–4500M, 1.5B, 3B, 7B, 14B, 32B, 72B
Qwen3 (Dense)
RecipeModeTPPPCPSizes
qwen3_*_pretrain_configPretrain1–81–2—600M–32B
qwen3_*_sft_configSFT1–81–2—600M–32B
qwen3_600m_sft_128k_configSFT118600M (128K seq)
qwen3_*_peft_configPEFT11—600M–32B
Qwen3 MoE
RecipeModeTPPPEPCPGPUs
qwen3_30b_a3b_pretrain_configPretrain118—8
qwen3_30b_a3b_sft_configSFT118—8
qwen3_30b_a3b_peft_configPEFT111—1
qwen3_235b_a22b_pretrain_configPretrain41682512+
qwen3_235b_a22b_sft_configSFT488—256
qwen3_235b_a22b_peft_configPEFT144—16
Qwen3-Next
RecipeModeTPPPEP
qwen3_next_80b_a3b_pretrain_configPretrain148
qwen3_next_80b_a3b_sft_configSFT128
qwen3_next_80b_a3b_peft_configPEFT114
DeepSeek
RecipeModeTPPPEPGPUs
deepseek_v2_lite_pretrain_configPretrain1188
deepseek_v2_pretrain_configPretrain1432128
deepseek_v3_pretrain_configPretrain216642048
deepseek_v3_pretrain_config_32nodesPretrain2832256
GLM-4.5
RecipeModeTPPPEPGPUs
glm45_355b_pretrain_configPretrain2816256
glm45_air_106b_pretrain_configPretrain14832
glm45_355b_sft_configSFT2816256
glm45_air_106b_sft_configSFT14832
glm45_355b_peft_configPEFT24432
glm45_air_106b_peft_configPEFT1248
Gemma
RecipeModeTPPPSizes
gemma2_*_{pretrain,sft,peft}_configAll2–81–22B, 9B, 27B
gemma3_1b_{pretrain,sft,peft}_configAll111B (32K seq)
NemotronH / Nemotron
配方模式TPPPEP备注
nemotronh_{4b,8b,47b,56b}_*_configP/S/PEFT1–81–4—稠密 SSM 混合架构
nemotron_3_nano_*_configP/S/PEFT不定18MoE + Mamba
nemotron_3_super_*_configP/S/PEFT418MoE + Mamba,CUDA graph 性能提升约 40%
nemotron_nano_{9b,12b}_v2_*_configP/S/PEFT不定1—稠密
其他模型
配方模式备注
moonlight_16b_{pretrain,sft,peft}_config全部MoE EP=8
olmoe_7b_{pretrain,sft,peft}_config全部MoE EP=8
ministral3_{3b,8b,14b}_{sft,peft}_configSFT/PEFT稠密
gpt_oss_20b_*_config全部MoE + FP8/MXFP8 变体
gpt_oss_120b_*_config全部MoE
vanilla_gpt_pretrain_config预训练MLM/Bridge 对齐基线
gpt3_175b_pretrain_config预训练TP=4,PP=8,VP=6
kimi_k2_pretrain_config预训练1T MoE,TP=2 PP=16 EP=32
VLM 配方
配方模式TPPPEPGPU 数量
gemma3_vl_{4b,12b,27b}_{sft,peft}_configSFT/PEFT1–81–2—1–16
qwen25_vl_{3b,7b,32b,72b}_{sft,peft}_configSFT/PEFT1–81–4—1–32
qwen3_vl_{8b,30b_a3b,235b_a22b}_{sft,peft}_configSFT/PEFT1–41–81–321–512
qwen35_vl_*_{sft,peft}_configSFT/PEFT不定不定不定不定
glm_45v_{sft,peft}_configSFT/PEFT184–1664–512
nemotron_nano_v2_vl_12b_{sft,peft}_configSFT/PEFT2–41—8
Diffusion 配方
配方模式TPCP
wan_1_3B_{pretrain,sft}_configP/SFT18
wan_14B_{pretrain,sft}_configP/SFT24
flux_12b_{pretrain,sft}_configP/SFT21

性能配方索引

所有性能配方都位于 scripts/performance/ 下。通过 run_script.py 调用,并根据 GPU 类型使用 WorkloadBaseConfig 预设。

重要: 性能配方用于上限吞吐量基准测试, 而非生产训练。默认情况下,它们会使用模拟数据运行 50 次迭代。 吞吐量数值是期望目标,不是经过验证的收敛配置。

Llama 3 / 3.1
模型GPU 数量GPU 类型主要特性
Llama 3 8B8H100、B200、B300、GB200、GB300、R100CUDA graphs(本地),GB 变体上使用 FSDP
Llama 3 70B64H100、B200、B300、GB200、GB300TP 通信重叠(userbuffers)、FSDP、CUDA graphs
Llama 3.1 405B128–1024H100、B200、B300、GB200、GB300TP+CP 通信重叠(userbuffers)、FSDP、大规模 PP/VP

也有 SFT/LoRA 变体(例如,使用打包序列的 8B SFT、在 32 个 GPU 上运行的 70B SFT)。

DeepSeek V3
模型GPU 数量GPU 类型主要特性
DeepSeek V3(671B MoE)256–1024H100、B200、B300、GB200、GB300HybridEP 分发器、MLA 重计算、CUDA graphs(TE 作用域)
Qwen3 MoE
模型GPU 数量GPU 类型主要特性
Qwen3 30B-A3B8–16H100、B200、B300、GB200、GB300MoE alltoall/flex 分发器
Qwen3 235B-A22B64–256H100、B200、B300、GB200、GB300TP 通信重叠、CUDA graphs、MoE a2a 重叠
Qwen3-Next 80B-A3B64–128H100、B200、B300、GB200、GB300EP 64–128
Qwen3-VL
模型GPU 数量GPU 类型主要特性
Qwen3-VL 30B-A3B8–16H100、B200、B300、GB200、GB300VLM + MoE
Qwen3-VL 235B-A22B64–256H100、B200、B300、GB200、GB300VLM + MoE、TP 通信重叠
Kimi K2
模型GPU 数量GPU 类型主要特性
Kimi K2(1T MoE)256–1024H100、B200、B300、GB200、GB300Muon/Adam 优化器、HybridEP、流水线布局辅助工具
NemotronH
模型GPU 数量GPU 类型主要特性
Nemotron 3 Nano (30B MoE+Mamba)8–16H100, B200, B300, GB200, GB300TE CUDA graphs (attn+mamba+moe)、HybridEP
Nemotron 3 Super64H100, B200, B300, GB200, GB300TE CUDA graphs、EP=64
NemotronH 56B64H100, B200, B300TP=2–8、TE graphs (mamba+attn)
GPT-OSS
模型GPU 数量GPU 类型主要特性
GPT-OSS 120B64H100, B200, GB200EP=64、GB200 上使用 HybridEP

推荐决策树

User wants to train a model
│
├─ Know the model name?
│   ├─ Yes → Look up in Library Recipe Index above
│   │   ├─ Has a recipe for their size + mode? → Use it directly
│   │   └─ No exact match? → Use closest size, adjust parallelism
│   └─ No → Ask for model name, size, and HF model ID
│
├─ What's the training goal?
│   ├─ Pretrain → Use *_pretrain_config
│   ├─ SFT (full fine-tune) → Use *_sft_config
│   └─ PEFT (LoRA/DoRA) → Use *_peft_config (lowest GPU requirement)
│
├─ How many GPUs?
│   ├─ 1 GPU → Only PEFT recipes work (TP=1, PP=1)
│   ├─ 8 GPUs (1 node) → Most 8B–16B models, small MoE (EP=8)
│   ├─ 16–64 GPUs → 70B dense, medium MoE
│   └─ 128+ GPUs → 405B+, large MoE (DeepSeek V3, Kimi K2)
│
├─ Want throughput benchmarks?
│   ├─ Yes → Use perf recipes (scripts/performance/)
│   │   └─ ⚠️ These run on mock data for upper-bound perf only
│   └─ No → Use library recipes (scripts/training/run_recipe.py)
│
└─ Long context?
    ├─ > 8K → Need CP (context parallelism), check *_16k / *_64k / *_128k variants
    └─ ≤ 8K → Default recipes work

调整建议(推荐时)

并行度调整规则

当用户的 GPU 数量与配方默认值不同时:

  1. TP 必须能整除 num_key_value_heads(GQA 限制)。例如,如果 num_key_value_heads=8,有效的 TP = {1, 2, 4, 8}。
  2. TP 应限制在单个节点内(NVLink)。TP > 8 需要节点间 NVLink(例如 GB200 NVL72)。
  3. PP 会产生流水线气泡。 尽量减少 PP;仅在单靠 TP 无法容纳模型时才增加。 使用 VP(虚拟流水线)来缓解气泡开销。
  4. EP 不会减少稠密层的内存占用。 只有专家参数会通过 EP 分片。共享注意力层/嵌入层会被复制。对于“MoE 显存溢出”,应先增加 EP,而不是 TP。
  5. 只要 TP > 1,SP 就应为 True。 它可以消除冗余的激活副本,且几乎没有额外开销。
  6. CP 需要全互联或环形注意力。 检查 cp_comm_type。对于 GQA 模型,a2a+p2p 分层 CP 允许 CP > num_kv_heads。
  7. world_size = DP × TP × PP × CP × EP。 DP 是隐式的。确保显式并行度的乘积能整除 GPU 总数。
批次大小调优
  • 从配方的 micro_batch_size 开始。如果显存溢出,将其减小到 1。
  • global_batch_size 决定学习动态。按 DP 缩放: GBS = micro_batch_size × DP × gradient_accumulation_steps。
  • 对于 MoE,大规模训练时通常将 micro_batch_size=1。
需要提醒的常见陷阱
陷阱症状修复方法
TP > num_kv_heads崩溃:“TP must divide num_query_groups”将 TP 降低到 num_kv_heads 的因数
PP 未使用 VP吞吐量差(气泡较大)设置 virtual_pipeline_model_parallel_size
大型 MoE 的 EP 过低专家参数导致显存溢出增加 EP;每个专家分布在 EP/num_experts 个 rank 上
CUDA graphs + packed sequences断言:“CUDA graph accepts only Tensor inputs”禁用打包,或使用 local 全迭代图
CUDA graphs + full recompute断言:“full recompute only with full iteration CUDA graph”禁用 recompute,或切换到 local 实现
未设置 use_te_rng_tracker启用 CUDA graphs 时,provider 初始化触发断言设置 cfg.model.use_te_rng_tracker = True 和 cfg.rng.te_rng_tracker = True
H100 上 FSDP + TP > 1可能出现通信瓶颈H100 上优先使用 TP=1 或 TP=2 的 FSDP;FSDP 在 GB/B 系列上效果更好
长上下文但未使用 CP激活值导致显存溢出添加 CP=2/4/8;使用 *_16k、*_64k 或 *_128k 配方变体
H100 上 MoE 的 overlap_grad_reduce可能影响性能(许多 H100 预设中为 False)在 H100 上训练 MoE 时设置 overlap_grad_reduce=False
VLM SFT 缺少图像数据可以运行,但生成结果毫无意义提供实际的多模态数据集,或使用模拟 VLM 数据
Qwen35-VL MoE FSDP仅在 Blackwell 上测试过可能无法在 H100 上运行;请先验证
配方覆盖示例
# Scale Llama3 8B from 2 GPUs to 8 GPUs (increase DP)
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe llama3_8b_pretrain_config \
    --dataset llm-pretrain-mock

# Reduce parallelism for Qwen3-MoE 30B to fit on 4 GPUs
uv run python -m torch.distributed.run --nproc_per_node=4 scripts/training/run_recipe.py \
    --recipe qwen3_30b_a3b_sft_config \
    --dataset llm-finetune \
    'model.expert_model_parallel_size=4'

# Add long context to an existing recipe
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe llama3_8b_pretrain_config \
    --dataset llm-pretrain-mock \
    'model.seq_length=32768' \
    'model.context_parallel_size=4'

# Enable CUDA graphs on any recipe
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe qwen3_30b_a3b_pretrain_config \
    --dataset llm-pretrain-mock \
    'model.cuda_graph_impl=transformer_engine' \
    'model.cuda_graph_scope=[attn,moe_router,moe_preprocess]' \
    'model.use_te_rng_tracker=True' \
    'rng.te_rng_tracker=True'

快速参考:我的情况适合哪种配置?

我想要……从以下配置开始所需 GPU 数量
首次试用 Bridgellama3_8b_sft_config + 模拟数据2
微调 7–8B 模型llama3_8b_sft_config 或 qwen3_8b_sft_config2–8
在 1 个 GPU 上使用 LoRAllama3_8b_peft_config 或 qwen3_8b_peft_config1
预训练稠密型 70B 模型llama3_70b_pretrain_config32–64
训练小型 MoEqwen3_30b_a3b_pretrain_config8
训练大型 MoE(235B 以上)qwen3_235b_a22b_pretrain_config256–512
对吞吐量进行基准测试通过 run_script.py 使用性能配置不定
进行长上下文训练llama3_8b_128k_pretrain_config 或添加 CP 覆盖配置16 以上
微调 VLMqwen3_vl_8b_sft_config 或 gemma3_vl_*_sft_config4–8
进行扩散模型训练wan_1_3B_pretrain_config 或 flux_12b_pretrain_config8

代码索引

内容路径
库配置根目录src/megatron/bridge/recipes/
配置 __init__.py(所有导出项)src/megatron/bridge/recipes/__init__.py
通用配置辅助项src/megatron/bridge/recipes/common.py
训练入口scripts/training/run_recipe.py
性能配置根目录scripts/performance/
性能入口scripts/performance/run_script.py
性能工作负载配置scripts/performance/configs/<family>/
性能覆盖配置(基准默认值)scripts/performance/utils/overrides.py

评论

支持 Markdown