recipe-recommender

Par nvidia · skills

Recommande et personnalise des recettes Megatron Bridge pour le modèle, le nombre de GPU et l'objectif d'entraînement d'un utilisateur. Indexe les recettes de bibliothèque (pretrain/SFT/PEFT) et les recettes de performance.

npx skills add https://github.com/nvidia/skills --skill recipe-recommender

Auto Recipe — Index de recettes et recommandations

Cette skill indexe chaque recette livrée et aide les utilisateurs à choisir la bonne configuration de démarrage, à ajuster le parallélisme et à éviter les pièges courants.

Comment utiliser cette skill

  1. Demandez à l'utilisateur : nom/taille du modèle, nombre et type de GPU, objectif d'entraînement (pretrain / SFT / PEFT), et longueur de séquence (si non-défaut).
  2. Recherchez la meilleure recette correspondante dans l'index ci-dessous.
  3. Recommandez le nom de la fonction de recette + la commande d'entrée.
  4. Fournissez des conseils d'ajustement (redimensionnement du parallélisme, tuning de batch, pièges).

Points d'entrée

Recettes de bibliothèque (entraînement fonctionnel)

# Pretrain avec données factices
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 avec SQuAD
uv run python -m torch.distributed.run --nproc_per_node=8 scripts/training/run_recipe.py \
    --recipe <recipe_function_name> \
    --dataset llm-finetune

# Remplacer n'importe quel champ 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'

Recettes de performance (benchmarks de débit)

python scripts/performance/run_script.py \
    --recipe <model_family> \
    --gpu_type h100 \
    --num_gpus 64 \
    --data mock

Les recettes Perf ne sont PAS entièrement validées pour la correction. La plupart des conversations et tests ont été sur des données factices. Elles sont conçues pour la mesure du débit maximum, pas pour l'entraînement en production. Validez toujours les courbes de perte et la convergence indépendamment.


Unification des recettes (À venir — PR #2803)

La PR #2803 unifie les recettes de performance au même format fonction Python utilisé par les recettes de bibliothèque. Changements clés :

  • Les recettes Perf passent de scripts/performance/configs/src/megatron/bridge/recipes/<family>/<model>_perf.py
  • Chaque recette perf devient une fonction Python autonome (p. ex. llama3_8b_h100_bf16_pretrain_config())
  • Le pipeline ancien WorkloadBaseConfigset_workload_base_configsget_perf_optimized_recipe est supprimé
  • Helpers partagés : _benchmark_common() (50 itérations, timing, TE RNG), _perf_precision() (bf16 / fp8_cs / fp8_mx / nvfp4)

Pourquoi Python, pas YAML ? Les approches précédentes basées sur YAML avaient des problèmes : la logique des recettes était fractionnée sur plusieurs couches indirectes, les configs n'étaient pas autonomes, et le pipeline à deux niveaux rendait la maintenance et le débogage difficiles. Les fonctions Python sont explicites, cherchables et composables.

Après le merge de #2803, les recettes de bibliothèque et perf seront invocables via le même point d'entrée run_recipe.py.


Index des recettes de bibliothèque

Toutes les recettes se trouvent sous src/megatron/bridge/recipes/. Chaque fonction retourne un ConfigContainer avec les paramètres de modèle, entraînement, optimiseur et données.

Llama

Recette Mode TP PP CP SP GPUs (min) Seq Len
llama2_7b_pretrain_config Pretrain 2 1 2 4K
llama3_8b_pretrain_config Pretrain 2 1 2 8K
llama3_8b_16k_pretrain_config Pretrain 2 1 2 4 16K
llama3_8b_64k_pretrain_config Pretrain 2 1 4 8 64K
llama3_8b_128k_pretrain_config Pretrain 2 1 8 16 128K
llama3_70b_pretrain_config Pretrain 8 4 32 8K
llama3_70b_16k_pretrain_config Pretrain 8 4 2 64 16K
llama3_70b_64k_pretrain_config Pretrain 8 4 4 128 64K
llama31_405b_pretrain_config Pretrain 8 16 128 8K
llama3_8b_sft_config SFT 2 1 2 8K
llama3_70b_sft_config SFT 4 4 16 8K
llama31_405b_sft_config SFT 8 8 64 8K
llama3_8b_peft_config PEFT 1 1 1 8K
llama3_70b_peft_config PEFT 2 4 8 8K
llama31_405b_peft_config PEFT 4 8 32 8K

Qwen2 / Qwen2.5

Recette Mode TP PP Sizes
qwen2_*_{pretrain,sft,peft}_config All 1–8 1–4 500M, 1.5B, 7B, 14B, 32B, 72B
qwen25_*_{pretrain,sft,peft}_config All 1–8 1–4 500M, 1.5B, 3B, 7B, 14B, 32B, 72B

Qwen3 (Dense)

Recette Mode TP PP CP Sizes
qwen3_*_pretrain_config Pretrain 1–8 1–2 600M–32B
qwen3_*_sft_config SFT 1–8 1–2 600M–32B
qwen3_600m_sft_128k_config SFT 1 1 8 600M (128K seq)
qwen3_*_peft_config PEFT 1 1 600M–32B

Qwen3 MoE

Recette Mode TP PP EP CP GPUs
qwen3_30b_a3b_pretrain_config Pretrain 1 1 8 8
qwen3_30b_a3b_sft_config SFT 1 1 8 8
qwen3_30b_a3b_peft_config PEFT 1 1 1 1
qwen3_235b_a22b_pretrain_config Pretrain 4 16 8 2 512+
qwen3_235b_a22b_sft_config SFT 4 8 8 256
qwen3_235b_a22b_peft_config PEFT 1 4 4 16

Qwen3-Next

Recette Mode TP PP EP
qwen3_next_80b_a3b_pretrain_config Pretrain 1 4 8
qwen3_next_80b_a3b_sft_config SFT 1 2 8
qwen3_next_80b_a3b_peft_config PEFT 1 1 4

DeepSeek

Recette Mode TP PP EP GPUs
deepseek_v2_lite_pretrain_config Pretrain 1 1 8 8
deepseek_v2_pretrain_config Pretrain 1 4 32 128
deepseek_v3_pretrain_config Pretrain 2 16 64 2048
deepseek_v3_pretrain_config_32nodes Pretrain 2 8 32 256

GLM-4.5

Recette Mode TP PP EP GPUs
glm45_355b_pretrain_config Pretrain 2 8 16 256
glm45_air_106b_pretrain_config Pretrain 1 4 8 32
glm45_355b_sft_config SFT 2 8 16 256
glm45_air_106b_sft_config SFT 1 4 8 32
glm45_355b_peft_config PEFT 2 4 4 32
glm45_air_106b_peft_config PEFT 1 2 4 8

Gemma

Recette Mode TP PP Sizes
gemma2_*_{pretrain,sft,peft}_config All 2–8 1–2 2B, 9B, 27B
gemma3_1b_{pretrain,sft,peft}_config All 1 1 1B (32K seq)

NemotronH / Nemotron

Recette Mode TP PP EP Notes
nemotronh_{4b,8b,47b,56b}_*_config P/S/PEFT 1–8 1–4 Dense SSM-hybrid
nemotron_3_nano_*_config P/S/PEFT varies 1 8 MoE + Mamba
nemotron_3_super_*_config P/S/PEFT 4 1 8 MoE + Mamba, ~40% CUDA graph gain
nemotron_nano_{9b,12b}_v2_*_config P/S/PEFT varies 1 Dense

Autres modèles

Recette Mode Notes
moonlight_16b_{pretrain,sft,peft}_config All MoE EP=8
olmoe_7b_{pretrain,sft,peft}_config All MoE EP=8
ministral3_{3b,8b,14b}_{sft,peft}_config SFT/PEFT Dense
gpt_oss_20b_*_config All MoE + FP8/MXFP8 variants
gpt_oss_120b_*_config All MoE
vanilla_gpt_pretrain_config Pretrain MLM/Bridge parity baseline
gpt3_175b_pretrain_config Pretrain TP=4, PP=8, VP=6
kimi_k2_pretrain_config Pretrain 1T MoE, TP=2 PP=16 EP=32

Recettes VLM

Recette Mode TP PP EP GPUs
gemma3_vl_{4b,12b,27b}_{sft,peft}_config SFT/PEFT 1–8 1–2 1–16
qwen25_vl_{3b,7b,32b,72b}_{sft,peft}_config SFT/PEFT 1–8 1–4 1–32
qwen3_vl_{8b,30b_a3b,235b_a22b}_{sft,peft}_config SFT/PEFT 1–4 1–8 1–32 1–512
qwen35_vl_*_{sft,peft}_config SFT/PEFT varies varies varies varies
glm_45v_{sft,peft}_config SFT/PEFT 1 8 4–16 64–512
nemotron_nano_v2_vl_12b_{sft,peft}_config SFT/PEFT 2–4 1 8

Recettes Diffusion

Recette Mode TP CP
wan_1_3B_{pretrain,sft}_config P/SFT 1 8
wan_14B_{pretrain,sft}_config P/SFT 2 4
flux_12b_{pretrain,sft}_config P/SFT 2 1

Index des recettes de performance

Toutes les recettes perf se trouvent sous scripts/performance/. Elles sont invoquées via run_script.py et utilisent des présets WorkloadBaseConfig par type de GPU.

Important : Les recettes Perf sont conçues pour les benchmarks de débit maximum, pas pour l'entraînement en production. Elles exécutent 50 itérations sur des données factices par défaut. Les chiffres de débit sont des cibles aspirationnelles, pas des configurations de convergence validées.

Llama 3 / 3.1

Modèle GPUs Types de GPU Caractéristiques clés
Llama 3 8B 8 H100, B200, B300, GB200, GB300, R100 CUDA graphs (local), FSDP on GB variants
Llama 3 70B 64 H100, B200, B300, GB200, GB300 TP comm overlap (userbuffers), FSDP, CUDA graphs
Llama 3.1 405B 128–1024 H100, B200, B300, GB200, GB300 TP+CP comm overlap (userbuffers), FSDP, heavy PP/VP

Des variantes SFT/LoRA existent aussi (p. ex. 8B SFT avec packed sequences, 70B SFT sur 32 GPUs).

DeepSeek V3

Modèle GPUs Types de GPU Caractéristiques clés
DeepSeek V3 (671B MoE) 256–1024 H100, B200, B300, GB200, GB300 HybridEP dispatcher, MLA recompute, CUDA graphs (TE scoped)

Qwen3 MoE

Modèle GPUs Types de GPU Caractéristiques clés
Qwen3 30B-A3B 8–16 H100, B200, B300, GB200, GB300 MoE alltoall/flex dispatcher
Qwen3 235B-A22B 64–256 H100, B200, B300, GB200, GB300 TP comm overlap, CUDA graphs, MoE a2a overlap
Qwen3-Next 80B-A3B 64–128 H100, B200, B300, GB200, GB300 EP 64–128

Qwen3-VL

Modèle GPUs Types de GPU Caractéristiques clés
Qwen3-VL 30B-A3B 8–16 H100, B200, B300, GB200, GB300 VLM + MoE
Qwen3-VL 235B-A22B 64–256 H100, B200, B300, GB200, GB300 VLM + MoE, TP comm overlap

Kimi K2

Modèle GPUs Types de GPU Caractéristiques clés
Kimi K2 (1T MoE) 256–1024 H100, B200, B300, GB200, GB300 Muon/Adam optimizer, HybridEP, pipeline layout helpers

NemotronH

Modèle GPUs Types de GPU Caractéristiques clés
Nemotron 3 Nano (30B MoE+Mamba) 8–16 H100, B200, B300, GB200, GB300 TE CUDA graphs (attn+mamba+moe), HybridEP
Nemotron 3 Super 64 H100, B200, B300, GB200, GB300 TE CUDA graphs, EP=64
NemotronH 56B 64 H100, B200, B300 TP=2–8, TE graphs (mamba+attn)

GPT-OSS

Modèle GPUs Types de GPU Caractéristiques clés
GPT-OSS 120B 64 H100, B200, GB200 EP=64, HybridEP on GB200

Arbre de décision pour les recommandations

L'utilisateur veut entraîner un modèle
│
├─ Connaît le nom du modèle ?
│   ├─ Oui → Recherchez dans l'Index des recettes de bibliothèque ci-dessus
│   │   ├─ A une recette pour sa taille + mode ? → L'utiliser directement
│   │   └─ Pas de correspondance exacte ? → Utiliser la taille la plus proche, ajuster le parallélisme
│   └─ Non → Demander le nom du modèle, la taille et l'ID du modèle HF
│
├─ Quel est l'objectif d'entraînement ?
│   ├─ Pretrain → Utiliser *_pretrain_config
│   ├─ SFT (fine-tune complet) → Utiliser *_sft_config
│   └─ PEFT (LoRA/DoRA) → Utiliser *_peft_config (besoin GPU minimal)
│
├─ Combien de GPUs ?
│   ├─ 1 GPU → Seules les recettes PEFT fonctionnent (TP=1, PP=1)
│   ├─ 8 GPUs (1 nœud) → Plupart des modèles 8B–16B, petit MoE (EP=8)
│   ├─ 16–64 GPUs → 70B dense, MoE moyen
│   └─ 128+ GPUs → 405B+, grand MoE (DeepSeek V3, Kimi K2)
│
├─ Vouloir des benchmarks de débit ?
│   ├─ Oui → Utiliser des recettes perf (scripts/performance/)
│   │   └─ ⚠️ Ces recettes exécutent sur données factices pour perf upper-bound uniquement
│   └─ Non → Utiliser des recettes de bibliothèque (scripts/training/run_recipe.py)
│
└─ Contexte long ?
    ├─ > 8K → Besoin CP (context parallelism), vérifier variantes *_16k / *_64k / *_128k
    └─ ≤ 8K → Les recettes par défaut fonctionnent

Conseils d'ajustement (lors de la recommandation)

Règles de redimensionnement du parallélisme

Quand le nombre de GPU de l'utilisateur diffère du défaut de la recette :

  1. TP doit diviser num_key_value_heads (contrainte GQA). Par exemple, si num_key_value_heads=8, TP valide = {1, 2, 4, 8}.
  2. TP doit rester dans un seul nœud (NVLink). TP > 8 nécessite NVLink inter-nœuds (p. ex., GB200 NVL72).
  3. PP ajoute des bulles de pipeline. Minimiser PP ; augmenter seulement si TP seul ne peut pas tenir le modèle. Utiliser VP (virtual pipeline) pour atténuer le surcoût de bulle.
  4. EP ne réduit pas la mémoire des couches denses. Seuls les paramètres d'expert sont fragmentés avec EP. L'attention partagée/embeddings sont répliqués. Pour "OOM avec MoE", augmenter EP d'abord, pas TP.
  5. SP doit être True chaque fois que TP > 1. Cela élimine les copies d'activation redondantes et est essentiellement gratuit.
  6. CP nécessite all-to-all ou ring attention. Vérifier cp_comm_type. Pour les modèles GQA, a2a+p2p hierarchical CP permet CP > num_kv_heads.
  7. world_size = DP × TP × PP × CP × EP. DP est implicite. S'assurer que le produit des parallélismes explicites divise votre compte total de GPU.

Tuning de la taille de batch

  • Commencer avec le micro_batch_size de la recette. Si OOM, réduire à 1.
  • global_batch_size détermine la dynamique d'apprentissage. Échelonner avec DP : GBS = micro_batch_size × DP × gradient_accumulation_steps.
  • Pour MoE, micro_batch_size=1 est typique à grande échelle.

Pièges courants à avertir

Piège Symptôme Correction
TP > num_kv_heads Crash : "TP must divide num_query_groups" Réduire TP à un diviseur de num_kv_heads
PP sans VP Faible débit (grande bulle) Définir virtual_pipeline_model_parallel_size
EP trop bas pour grand MoE OOM sur paramètres experts Augmenter EP ; chaque expert vit sur EP/num_experts ranks
CUDA graphs + packed sequences Assert : "CUDA graph accepts only Tensor inputs" Désactiver packing ou utiliser graphs local full-iteration
CUDA graphs + full recompute Assert : "full recompute only with full iteration CUDA graph" Désactiver recompute ou basculer sur impl local
use_te_rng_tracker not set Assert on provider init quand CUDA graphs enabled Définir cfg.model.use_te_rng_tracker = True et cfg.rng.te_rng_tracker = True
FSDP + TP > 1 on H100 Possible comm bottleneck Préférer FSDP avec TP=1 ou TP=2 sur H100 ; FSDP shines on GB/B-series
Long context sans CP OOM sur activations Ajouter CP=2/4/8 ; utiliser variantes *_16k, *_64k, ou *_128k
MoE overlap_grad_reduce on H100 Peut hurter perf (False dans beaucoup de presets H100) Définir overlap_grad_reduce=False pour MoE sur H100
VLM SFT missing image data S'exécute mais produit du garbage Fournir dataset multimodal réel ou utiliser données VLM mock
Qwen35-VL MoE FSDP Testé sur Blackwell uniquement Peut ne pas fonctionner sur H100 ; valider d'abord

Exemples de remplacement de recette

# Échelonner Llama3 8B de 2 GPUs à 8 GPUs (augmenter 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

# Réduire le parallélisme pour Qwen3-MoE 30B pour tenir sur 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'

# Ajouter long context à une recette existante
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'

# Activer CUDA graphs sur n'importe quelle recette
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'

Référence rapide : Quelle recette pour ma situation ?

Je veux... Commencer avec GPUs nécessaires
Essayer Bridge pour la première fois llama3_8b_sft_config + mock data 2
Fine-tuner un modèle 7-8B llama3_8b_sft_config ou qwen3_8b_sft_config 2–8
LoRA sur 1 GPU llama3_8b_peft_config ou qwen3_8b_peft_config 1
Pretrain un dense 70B llama3_70b_pretrain_config 32–64
Entraîner un petit MoE qwen3_30b_a3b_pretrain_config 8
Entraîner un grand MoE (235B+) qwen3_235b_a22b_pretrain_config 256–512
Benchmarker le débit Recettes Perf via run_script.py Varies
Entraînement long-context llama3_8b_128k_pretrain_config ou ajouter override CP 16+
Fine-tuning VLM qwen3_vl_8b_sft_config ou gemma3_vl_*_sft_config 4–8
Entraînement Diffusion wan_1_3B_pretrain_config ou flux_12b_pretrain_config 8

Ancres de code

Quoi Chemin
Racine recettes de bibliothèque src/megatron/bridge/recipes/
Recette __init__.py (toutes les exports) src/megatron/bridge/recipes/__init__.py
Helpers recettes communes src/megatron/bridge/recipes/common.py
Point d'entrée entraînement scripts/training/run_recipe.py
Racine recettes Perf scripts/performance/
Point d'entrée Perf scripts/performance/run_script.py
Configs workload Perf scripts/performance/configs/<family>/
Overrides Perf (defaults benchmark) scripts/performance/utils/overrides.py

Skills similaires