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 の初回スモークテストには、--dataset llm-pretrain-mock でモックデータを使用する llama3_8b_sft_config をおすすめします。セットアップのみを試す場合は、ユーザーが SFT のデータパスを明示的に求めない限り、llm-finetune を使用しないでください。
  4. 通常の SFT には --dataset llm-finetune を、事前学習およびモック検証には --dataset llm-pretrain-mock を使用しておすすめしてください。
  5. レシピとデータセットの後に、必須のサイズ変更ルールを提示します:TP は num_key_value_heads を割り切れる必要があり、NVL72 クラスのインターコネクトを使用しない限り、TP を 1 ノード以内に収めます。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)

なぜ YAML ではなく Python なのか? 以前の YAML ベースの方法には問題がありました: レシピのロジックが複数の間接レイヤーに分散し、設定が自己完結しておらず、2 段階のパイプラインによって保守やデバッグが困難でした。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グラフで約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
拡散モデルのレシピ
レシピモード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グラフ(ローカル)、GBバリアントでFSDP
Llama 3 70B64H100、B200、B300、GB200、GB300TP通信のオーバーラップ(userbuffers)、FSDP、CUDAグラフ
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グラフ(TEの範囲内)
Qwen3 MoE
モデルGPU数GPUタイプ主な機能
Qwen3 30B-A3B8–16H100、B200、B300、GB200、GB300MoE alltoall/flexディスパッチャー
Qwen3 235B-A22B64–256H100、B200、B300、GB200、GB300TP通信のオーバーラップ、CUDAグラフ、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 で OOM」が発生した場合は、TP ではなく、まず EP を増やしてください。
  5. TP > 1 の場合は、SP を常に True にしてください。 冗長なアクティベーションのコピーをなくし、実質的にコストはかかりません。
  6. CP には all-to-all または ring attention が必要です。 cp_comm_type を確認してください。GQA モデルでは、a2a+p2p の階層型 CP により、CP を num_kv_heads より大きくできます。
  7. world_size = DP × TP × PP × CP × EP。 DP は暗黙的です。明示的に指定した並列度の積が、GPU の合計数を割り切れることを確認してください。
バッチサイズの調整
  • レシピの micro_batch_size から始めてください。OOM が発生した場合は 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 の約数に減らす
VP なしの PPスループットの低下(大きなバブル)virtual_pipeline_model_parallel_size を設定する
大規模 MoE に対して EP が小さすぎるエキスパートのパラメーターで OOMEP を増やす。各エキスパートは EP/num_experts 個のランクに配置される
CUDA graphs とパック済みシーケンスの併用アサーション:「CUDA graph accepts only Tensor inputs」パッキングを無効にするか、local の全イテレーショングラフを使用する
CUDA graphs と完全な再計算の併用アサーション:「full recompute only with full iteration CUDA graph」再計算を無効にするか、local 実装に切り替える
use_te_rng_tracker が未設定CUDA graphs 有効時、プロバイダーの初期化でアサーション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 なしの長いコンテキストアクティベーションで OOMCP=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 FSDPBlackwell でのみテスト済み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 数
Bridge を初めて試すllama3_8b_sft_config + モックデータ2
7~8B モデルをファインチューニングするllama3_8b_sft_config または qwen3_8b_sft_config2~8
1 GPU で LoRA を行うllama3_8b_peft_config または qwen3_8b_peft_config1
高密度な 70B モデルを事前学習するllama3_70b_pretrain_config32~64
小規模な MoE を学習するqwen3_30b_a3b_pretrain_config8
大規模な MoE(235B 以上)を学習するqwen3_235b_a22b_pretrain_config256~512
スループットをベンチマークするrun_script.py 経由で Perf レシピを実行する環境によって異なります
長いコンテキストで学習するllama3_8b_128k_pretrain_config を使うか、CP オーバーライドを追加する16 以上
VLM をファインチューニングするqwen3_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
Perf レシピのルートscripts/performance/
Perf のエントリーポイントscripts/performance/run_script.py
Perf ワークロード設定scripts/performance/configs/<family>/
Perf オーバーライド(ベンチマークのデフォルト値)scripts/performance/utils/overrides.py

コメント