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
- 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).
- Recherchez la meilleure recette correspondante dans l'index ci-dessous.
- Recommandez le nom de la fonction de recette + la commande d'entrée.
- 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
WorkloadBaseConfig → set_workload_base_configs → get_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 :
- TP doit diviser
num_key_value_heads (contrainte GQA). Par exemple, si
num_key_value_heads=8, TP valide = {1, 2, 4, 8}.
- TP doit rester dans un seul nœud (NVLink). TP > 8 nécessite
NVLink inter-nœuds (p. ex., GB200 NVL72).
- 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.
- 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.
- SP doit être True chaque fois que TP > 1. Cela élimine les copies d'activation redondantes
et est essentiellement gratuit.
- 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.
- 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 |