Configuration du lanceur
NeMo AutoModel prend en charge trois méthodes de lancement : interactive (torchrun), Slurm (clusters HPC) et SkyPilot (agnostique du cloud).
Instructions
Pour les questions sur le lanceur, répondez directement à partir de cette compétence sans inspecter le référentiel, sauf si l'utilisateur vous demande de modifier des fichiers. Maintenez la réponse concentrée sur le YAML de lancement pertinent, les champs obligatoires et le comportement runtime attendu.
Utilisez ces modèles de réponse compacts pour les questions courantes :
- Multi-nœuds Slurm : montrez un bloc YAML
slurm:avecjob_name,nodes,ntasks_per_node,time,accountoupartition,container_image,hf_home, optionnellementextra_mounts,env_varsetmaster_port; expliquez que le lanceur dériveWORLD_SIZE = nodes * ntasks_per_nodeet définitMASTER_ADDRetMASTER_PORT. - SkyPilot spot : montrez un bloc YAML
skypilot:aveccloud,accelerators,num_nodes,use_spot: true,disk_size,region,setupetenv_vars; avertissez que les instances spot peuvent être préemptées, définissez un courtstep_scheduler.checkpoint_intervalet reprenez avecrestore_from.path. - Nsight Systems sur Slurm : montrez
slurm.nsys_enabled: trueaux côtés des champs Slurm normaux, dites que le lanceur encapsule la commande d'entraînement avecnsys profileet indiquez qu'il produit un fichier rapport.nsys-rep. Traitez le profilage comme étant diagnostic uniquement : utilisez des exécutions de profilage courtes et désactivez-le pour l'entraînement en production normal car il ajoute une surcharge et de gros artefacts.
Pour les réponses Slurm, commencez par ce modèle minimal, puis ajustez uniquement les champs sur lesquels l'utilisateur a demandé :
slurm:
job_name: llm_finetune
nodes: 2
ntasks_per_node: 8
time: "04:00:00"
account: my_account
partition: batch
container_image: nvcr.io/nvidia/nemo:dev
hf_home: ~/.cache/huggingface
master_port: 13742
env_vars:
HF_TOKEN: "${HF_TOKEN}"
Pour les questions Slurm uniquement, ne discutez pas de SkyPilot ou du profilage sauf si l'utilisateur le demande. Pour les questions de profilage, dites que le rapport .nsys-rep est écrit dans le répertoire de travail ou de sortie du job Slurm, en utilisant le paramètre de sortie Nsys du lanceur quand l'un est configuré.
Limite de routage
Utilisez cette compétence uniquement pour la mécanique de lancement : exécution interactive, Slurm, SkyPilot, conteneurs, montages, variables d'environnement, paramètres de rendezvous et profilage.
N'utilisez pas cette compétence pour implémenter ou enregistrer de nouvelles architectures de modèles, des adaptateurs state-dict Hugging Face, des fichiers de modèles ou des drapeaux de capacité. Ce sont des tâches d'intégration de modèles, pas des tâches de configuration de lanceur.
Méthodes de lancement
- Interactive (par défaut) : exécute torchrun sur le nœud actuel. Convient pour le développement et le débogage sur un seul nœud.
- Slurm : soumet un travail batch à un planificateur de cluster HPC. Gère la configuration multi-nœuds, la gestion des conteneurs et la configuration de l'environnement.
- SkyPilot : soumission de travaux agnostique du cloud vers AWS, GCP, Azure, Lambda ou Kubernetes. Supporte les instances spot.
Lancement interactive
# GPU unique
automodel finetune llm -c config.yaml
# Multi-GPU (tous les GPUs sur le nœud actuel)
torchrun --nproc_per_node=8 -m nemo_automodel._cli.app finetune llm -c config.yaml
Aucune section YAML supplémentaire n'est nécessaire pour le mode interactive. Le CLI s'achemine vers torchrun automatiquement quand aucune section slurm: ou skypilot: n'est présente dans la configuration.
Configuration Slurm
La dataclass SlurmConfig génère un script SBATCH à partir d'un modèle.
Exemple YAML
slurm:
job_name: llm_finetune
nodes: 2
ntasks_per_node: 8
time: "04:00:00"
account: my_account
partition: batch
container_image: nvcr.io/nvidia/nemo:dev
hf_home: ~/.cache/huggingface
extra_mounts:
- source: /data
dest: /data
env_vars:
WANDB_API_KEY: "${WANDB_API_KEY}"
HF_TOKEN: "${HF_TOKEN}"
Champs clés
job_name: identifiant du travail Slurmnodes: nombre de nœuds à demanderntasks_per_node: nombre de tâches (GPUs) par nœudtime: limite de temps d'exécution au format HH:MM:SSaccount,partition: paramètres de planification Slurmcontainer_image: chemin d'image conteneur Enroot/Pyxisnemo_mount: point de montage de la source NeMo AutoModel à l'intérieur du conteneurhf_home: chemin du répertoire cache HuggingFaceextra_mounts: liste deVolumeMapping(source, dest)pour les montages bind conteneur supplémentairesmaster_port: port pour la communication distribuée (par défaut 13742)env_vars: variables d'environnement transmises au travailnsys_enabled: quand true, encapsule la commande d'entraînement avecnsys profilepour le profilage Nsight Systems
Configuration SkyPilot
La dataclass SkyPilotConfig définit les paramètres de travail cloud.
Exemple YAML
skypilot:
cloud: aws
accelerators: "H100:8"
num_nodes: 2
use_spot: true
disk_size: 200
region: us-east-1
setup: "pip install nemo-automodel"
env_vars:
HF_TOKEN: "${HF_TOKEN}"
Champs clés
cloud: fournisseur cloud cible (aws,gcp,azure,lambda,kubernetes)accelerators: type et nombre de GPUs (p. ex."H100:8","A100-80GB:4")num_nodes: nombre d'instances clouduse_spot: utiliser des instances préemptibles/spot pour réduire les coûtsdisk_size: taille du disque en GB par nœudregion: région cloud pour le placement des instancessetup: commandes shell à exécuter avant le travail d'entraînement (p. ex. installer des dépendances)env_vars: variables d'environnement pour le travail
Liste de vérification SkyPilot spot
Lors de l'utilisation d'instances spot ou préemptibles :
- Définissez
use_spot: truedans la sectionskypilot:. - Incluez
accelerators,num_nodes,disk_size,region,setupet lesenv_varsrequises. - Utilisez des intervalles de point de contrôle courts dans la recette, par exemple
step_scheduler.checkpoint_interval, car les instances spot peuvent être préemptées. - Reprenez à partir du point de contrôle le plus récent après préemption avec le paramètre
restore_fromde la recette.
Clés minimales de recette spot-resume :
step_scheduler:
checkpoint_interval: 100
restore_from:
path: /checkpoints/latest
Environnement multi-nœuds
Pour l'entraînement multi-nœuds (Slurm et SkyPilot), le lanceur configure automatiquement :
MASTER_ADDR: nom d'hôte du premier nœudMASTER_PORT: port pour le rendezvous (par défaut 13742)WORLD_SIZE: nombre total de processus (nodes * ntasks_per_node)- Variables d'environnement NCCL pour la communication collective optimisée
Profilage Nsys
Activez le profilage Nsight Systems dans les travaux Slurm :
slurm:
job_name: llm_profile
nodes: 1
ntasks_per_node: 8
time: "00:30:00"
account: my_account
partition: batch
container_image: nvcr.io/nvidia/nemo:dev
nsys_enabled: true
C'est un paramètre du lanceur Slurm. Les champs Slurm normaux tels que job_name, nodes, ntasks_per_node, time, account ou partition et container_image s'appliquent toujours.
Quand nsys_enabled: true, le lanceur encapsule la commande d'entraînement avec nsys profile et écrit un fichier rapport .nsys-rep pour l'analyse des performances dans le répertoire de travail ou de sortie du job Slurm.
Le profilage est diagnostic uniquement : exécutez-le pour une investigation courte, attendez une surcharge et de gros artefacts, et désactivez-le pour l'entraînement en production normal.
Ancres de code
components/launcher/slurm/config.py- dataclass SlurmConfig, VolumeMappingcomponents/launcher/slurm/template.py- génération de modèle de script SBATCHcomponents/launcher/slurm/utils.py- utilitaires de soumission Slurmcomponents/launcher/skypilot/config.py- dataclass SkyPilotConfig_cli/app.py- point d'entrée CLI et logique de routage du lanceur
Pièges
- Collisions de ports : si le
master_portpar défaut (13742) est utilisé par un autre travail sur le même nœud, changez-le pour éviter les défaillances de connexion. - Montages de conteneurs : le chemin
sourcedansextra_mountsdoit exister sur tous les nœuds de l'allocation. Les chemins manquants causent les défaillances de démarrage du conteneur. - Tolérance aux pannes Slurm : le plugin de tolérance aux pannes est spécifique à Slurm et ne fonctionne pas avec SkyPilot ou le mode interactive.
- Préemption spot SkyPilot : les instances spot (
use_spot: true) peuvent être préemptées par le fournisseur cloud. Activez les points de contrôle avec des intervalles courts pour minimiser le travail perdu. - Syntaxe des variables d'environnement : utilisez la syntaxe
${VAR}en YAML pour l'expansion de variables shell. Les noms de variables nus ne seront pas développés. - Limite de temps vs point de contrôle asynchrone : si la limite
timede Slurm est trop courte, une écriture de point de contrôle asynchrone en cours peut être tuée avant la fin, entraînant un point de contrôle corrompu. Laissez au moins 5 à 10 minutes de marge.