Ce guide vous explique comment utiliser l'écosystème NVIDIA NeMo sur un cluster de formation gérée pour le développement de modèles d'IA générative de bout en bout. Il fournit des instructions détaillées pour les workflows distincts, mais associés suivants, chacun étant abordé dans sa propre section dédiée :
- NVIDIA NeMo : pour le développement de modèles de fondation, suivez ces instructions pour effectuer un pré-entraînement à grande échelle, un pré-entraînement continu (CPT) et un affinage supervisé (SFT).
- NVIDIA NeMo-RL : pour l'alignement des modèles et le réglage des préférences, utilisez cette section pour appliquer des techniques avancées telles que l'apprentissage par renforcement (RL) afin d'aligner votre modèle sur les instructions et les préférences humaines.
Que vous créiez un modèle à partir de zéro ou que vous en affiniez un existant, ce document vous explique comment configurer votre environnement, gérer les tâches conteneurisées et lancer des scripts d'entraînement sur le cluster.
NVIDIA NeMo
Le framework NVIDIA NeMo est une plate-forme de bout en bout permettant de créer, de personnaliser et de déployer des modèles d'IA générative. Cette section du guide est spécifiquement destinée aux développeurs et aux chercheurs qui se concentrent sur les étapes fondamentales du développement de modèles. Elle fournit des instructions détaillées sur l'utilisation de NeMo pour effectuer un pré-entraînement à grande échelle, un pré-entraînement continu (CPT) et un réglage fin supervisé (SFT) sur un cluster de formation gérée.
Ce guide sur les clusters d'entraînement fournit le workflow complet pour exécuter une tâche d'entraînement avec le framework NeMo. Le processus est divisé en deux parties principales : la configuration initiale unique de votre environnement et les étapes récurrentes pour lancer une tâche.
Configurer votre environnement
Avant de lancer une tâche, vous devez préparer votre environnement en vous assurant de disposer d'une image de conteneur et des scripts d'entraînement nécessaires.
Installer NeMo-Run
pip install git+https://github.com/NVIDIA/NeMo-Run.git
Préparer une image de conteneur
Deux options s'offrent à vous pour l'image de conteneur : utiliser une image prédéfinie (recommandé) ou en créer une personnalisée.
Utiliser une image prédéfinie (recommandé)
Les images de conteneurs prédéfinies sont fournies au format .squashfs. Copiez l'image appropriée pour votre région dans votre répertoire de travail.
# Example for the US region
gcloud storage cp gs://vmds-containers-us/vmds_nemo_squashfs/nemo-20250721.sqsh .
Créer un conteneur personnalisé (avancé)
Ne suivez ces étapes que si les conteneurs prédéfinis ne répondent pas à vos besoins.
Cette procédure vous explique comment convertir une image de conteneur personnalisé au format .squashfs à l'aide de enroot.
Étape 1 : Authentifiez-vous auprès de Cloud de Confiance by S3NS.
Utilisez les commandes suivantes pour vous assurer que votre Cloud de Confiance by S3NS compte utilisateur et le registre Docker où votre image est hébergée sont authentifiés :
gcloud auth login
gcloud auth configure-docker us-docker.pkg.dev
Étape 2 : Créez le script de conversion.
Créez un fichier nommé enroot-convert.sh et ajoutez le contenu de script suivant. Avant d'exécuter ce script, vous devez mettre à jour les variables REMOTE_IMG et LOCAL_IMG pour qu'elles pointent vers votre image de conteneur et le chemin de sortie de votre choix.
#!/bin/bash
#SBATCH --gpus-per-node=8
#SBATCH --exclusive
#SBATCH --mem=0
#SBATCH --ntasks-per-node=1
# Run this script on the slurm login node:
# sbatch -N 1 enroot-convert.sh
set -x
set -e
# The remote docker image URI.
REMOTE_IMG="docker://us-docker.pkg.dev/{YOUR_CONTAINER_IMG_URI}:{YOUR_CONTAINER_IMAGE_TAG}"
# The local path to the to be imported enroot squash file.
LOCAL_IMG="${HOME}/my_nemo.sqsh"
# The path to the enroot config file.
TMP_ENROOT_CONFIG_PATH="/tmp/\$(id -u --name)/config/enroot"
# Download the docker image to each node.
srun -l -N "${SLURM_NNODES}" \
bash -c "
mkdir -p ${TMP_ENROOT_CONFIG_PATH};
echo 'machine us-docker.pkg.dev login oauth2accesstoken password $(gcloud auth print-access-token)' > ${TMP_ENROOT_CONFIG_PATH}/.credentials;
rm -f ${LOCAL_IMG};
ENROOT_CONFIG_PATH=${TMP_ENROOT_CONFIG_PATH} ENROOT_MAX_PROCESSORS=$(( $(nproc) / 2 )) enroot import -o ${LOCAL_IMG} ${REMOTE_IMG};
"
Étape 3 : Exécutez le script et vérifiez la sortie.
Exécutez le script sur le nœud de connexion Slurm.
sbatch -N 1 enroot-convert.sh
Une fois la tâche terminée, recherchez les journaux de conversion dans un fichier nommé
slurm-<JOB_ID>.out et l'image de conteneur finale dans le chemin que vous avez spécifié
pour LOCAL_IMG.
Télécharger les recettes d'entraînement
Les recettes d'entraînement sont stockées dans un dépôt googlesource.com privé.
Pour y accéder avec la ligne de commande Git, vous devez d'abord générer des identifiants d'authentification.
Générez des identifiants d'authentification.
Accédez à l'URL suivante et suivez les instructions à l'écran. Cela configure votre environnement local pour l'authentification auprès du dépôt. https://www.googlesource.com/new-password
Clonez le dépôt.
Une fois les identifiants authentifiés, exécutez la commande suivante pour télécharger les recettes.
git clone -b release-allowlist-ga https://vertex-model-garden.googlesource.com/vertex-oss-training
Lancer une tâche d'entraînement
Une fois votre environnement configuré, vous pouvez lancer une tâche d'entraînement.
Étape 1 : Définissez les variables d'environnement
Les variables d'environnement suivantes peuvent être requises pour votre tâche :
HF_TOKENest requis pour télécharger des modèles et des ensembles de données depuis Hugging Face.- Le
WANDB_API_KEYest requis pour utiliser Weights & Biases pour l'analyse des tests.
export HF_TOKEN=YOUR_HF_TOKEN
export WANDB_API_KEY=YOUR_WANDB_API_KEY
Étape 2 : Exécutez le script de lancement
Accédez à votre répertoire de travail et exécutez le script run.py pour démarrer une tâche. Cet exemple lance une tâche d'entraînement de démonstration avec Llama 3.1-2b.
# Set the working directory
export WORK_DIR=$HOME/vertex-oss-training/nemo
cd $WORK_DIR
gcloud storage cp
gs://vmds-containers-<region>/vmds_nemo_squashfs/nemo-20250721.sqsh nemo-demo.sqsh
# Launch the training job
export NEMORUN_HOME=$WORK_DIR && \
python3 run.py -e slurm --slurm-type hcc-a3m --partition a3m \
-d $WORK_DIR -i $WORK_DIR/nemo-demo.sqsh \
-s pretrain/llama3p1_2b_pt.py -n 2 \
--experiment-name nemo-demo-run
Paramètres de lancement
--slurm-typeest défini en fonction du type de cluster (par exemple,hcc-a3m,hcc-a3u,hcc-a4).--partitiondoit être défini sur une partition disponible. Vous pouvez vérifier les noms de partition avec la commandesinfo.- Le script
run.pymonte automatiquement plusieurs répertoires sur le conteneur Docker, y compris--log-dir,--cache-diret--data-dir, s'ils sont définis.
Surveiller l'état et les journaux des tâches
Une fois la tâche lancée, un bloc d'état s'affiche :
Experiment Status for nemo-demo-run_1753123402
Task 0: nemo-demo-run
- Status: RUNNING
- Executor: SlurmExecutor on @localhost
- Job id: 75
- Local Directory: $NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run
Les journaux d'exécution sont écrits dans le chemin indiqué dans le champ Local Directory de la sortie d'état. Par exemple, vous pouvez trouver les fichiers journaux dans un chemin semblable à celui-ci :
$NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run/<JOB_ID>.log
Erreurs courantes et solutions
Cette section décrit les problèmes courants qui peuvent survenir lors de l'exécution des tâches et fournit les étapes recommandées pour les résoudre.
Erreur de partition non valide
Par défaut, les tâches tentent de se lancer sur la partition générale. Si la partition générale n'existe pas ou n'est pas disponible, la tâche échoue et génère l'erreur suivante :
sbatch: error: invalid partition specified: general
sbatch: error: Batch job submission failed: Invalid partition name specified
Solution:
Spécifiez une partition disponible à l'aide de l'argument --partition ou -p dans votre
commande de lancement.
Pour afficher la liste des partitions disponibles, exécutez la commande sinfo sur le nœud de connexion Slurm.
sinfo
La sortie affiche les noms de partition disponibles, tels que a3u dans cet exemple :
| PARTITION | AVAIL | DÉLAI | NŒUDS | ÉTAT | LISTE_NŒUDS |
|---|---|---|---|---|---|
| a3u* | flèche vers le haut | infini | 2 | inactif~ | alice-a3u-[2-3] |
| a3u* | flèche vers le haut | infini | 2 | inactif | alice-a3u-[0-1] |
Erreur de téléchargement du tokenizer
Vous pouvez rencontrer une erreur OSError liée à un lien entre appareils lorsque le script tente de télécharger le tokenizer GPT2 :
OSError: [Errno 18] Invalid cross-device link: 'gpt2-vocab.json' -> '/root/.cache/torch/megatron/megatron-gpt-345m_vocab'
Solutions:
Deux options s'offrent à vous pour résoudre ce problème :
- Option 1 : Réexécutez la tâche. Cette erreur est souvent temporaire. La réexécution de la tâche à l'aide du même
--cache-dirpeut résoudre le problème. - Option 2 : Téléchargez manuellement les fichiers du tokenizer. Si la réexécution de la tâche échoue, procédez comme suit :
- Téléchargez les deux fichiers suivants :
gpt2-vocab.jsongpt2-merges.txt
- Déplacez les fichiers téléchargés dans le sous-répertoire
torch/megatron/de votre répertoire de cache (par exemple,<var>YOUR_CACHE_DIR</var>/torch/megatron/). - Renommez les fichiers comme suit :
- Renommez
gpt2-vocab.jsonenmegatron-gpt-345m_vocab. - Renommez
gpt2-merges.txtenmegatron-gpt-345m_merges.
- Renommez
- Téléchargez les deux fichiers suivants :
NVIDIA NeMo-RL
Le framework NVIDIA NeMo-RL est conçu pour aligner les grands modèles de langage sur les préférences et les instructions humaines. Cette section vous explique comment utiliser NeMo-RL sur un cluster pour effectuer des tâches d'alignement avancées, y compris le réglage fin supervisé (SFT), le réglage des préférences (tel que l'optimisation directe des préférences ou DPO) et l'apprentissage par renforcement (RL).
Le guide couvre deux workflows principaux : l'exécution d'une tâche d'entraînement par lots standard et l'utilisation de l'environnement de développement interactif pour le débogage.
Prérequis
Avant de commencer, créez un cluster en suivant les instructions de la page Créer un cluster ou utilisez un cluster de formation gérée existant, si vous en avez un.
Se connecter au nœud de connexion du cluster
Pour vous connecter au nœud de connexion du cluster, recherchez la commande Google Cloud CLI appropriée en accédant à la page Machine virtuelle Google Compute Engine dans la console Google Cloud de Confiance et en cliquant sur SSH > Afficher la commande Google Cloud CLI. Cela devrait ressembler à ce qui suit :
ssh $USER_NAME@machine-addr
Exemple :
ssh $USER_NAME@nic0.sliua3m1-login-001.europe-north1-c.c.infinipod-shared-dev.internal.gcpnode.com
Utiliser l'image Docker prédéfinie
Les fichiers .sqsh convertis sont fournis pour les images de conteneurs prédéfinies. Vous pouvez sélectionner un conteneur pour votre région et le définir directement comme paramètre d'image de conteneur ou le télécharger sur le système de fichiers du cluster.
Pour le définir directement comme paramètre d'image de conteneur, utilisez l'un des chemins suivants.
Notez que vous devez remplacer <region> par votre région spécifique
(par exemple, europe, asia, us) :
/gcs/vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh
Pour télécharger l'image dans le stockage Lustre du cluster, utilisez la commande suivante :
gs://vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh DESTINATION
Télécharger le code
Pour accéder à la recette d'entraînement avec l'CLI git, accédez à https://www.googlesource.com/new-password. La recette peut être téléchargée avec la commande suivante :
cd $HOME
git clone -b release-allowlist-ga https://vertex-model-garden.googlesource.com/vertex-oss-training
Lancer des tâches
Étape 1 : Définissez les variables d'environnement.
Pour extraire des modèles et des données de Hugging Face, il peut être nécessaire de définir HF_TOKEN.
Pour utiliser Weights &Biases pour l'analyse des tests, vous devez définir WANDB_API_KEY. Mettez à jour ces variables dans le fichier suivant :
Fichier à mettre à jour : $HOME/vertex-oss-training/nemo_rl/configs/auth.sh
Si vous ne souhaitez pas utiliser Weights & Biases, définissez logger.wandb_enabled sur False dans votre script de lancement.
Étape 2 : Téléchargez ou copiez le fichier de conteneur dans votre dossier de lancement.
Voici quelques exemples :
gcloud storage cp \
gs://vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh \
$HOME/vertex-oss-training/nemo_rl/nemo_rl-h20260302.sqsh
# OR
/gcs/vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh \
$HOME/vertex-oss-training/nemo_rl/nemo_rl-h20260302.sqsh
cd $HOME/vertex-oss-training/nemo_rl/
# Where region is either `us`, `asia`, or `europe`
Étape 3 : Préparez ou clonez le dépôt NeMo-RL.
Créez un clone du code NeMo-RL s'il n'est pas déjà présent. Notez que vous devrez peut-être
utiliser git submodule update --init --recursive si vous avez déjà cloné
le dépôt sans l'option --recursive
git clone https://github.com/NVIDIA-NeMo/RL --recursive
Étape 4 : Lancez la tâche d'entraînement.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --job_script algorithms/dpo.sh
Où :
--cluster-typeest défini en fonction du type de cluster :- A3-Mega:
hcc-a3m - A3-Ultra:
hcc-a3u - A4:
hcc-a4 - A3H:
hcc-a3h
- A3-Mega:
--partitiondoit être défini en conséquence, oùsinfopeut être utilisé pour vérifier les partitions Slurm.
Une fois votre tâche démarrée, un nouveau répertoire portant le nom de son ID de tâche SLURM est créé à votre emplacement actuel. Vous y trouverez tous les journaux et points de contrôle appartenant à cette tâche. Plus précisément, vous trouverez les répertoires et fichiers suivants :
checkpoints/→ Ce répertoire est monté dans le conteneur NeMo-RL et contient tous les points de contrôle de l'entraînement.ray-logs/→ Ce répertoire contient les journaux du nœud principal Ray et des nœuds de calcul Ray.nemo_rl_output.log→ Ce fichier contient les journaux Slurm de la tâche que vous avez envoyée.attach.sh(tâches interactives uniquement) → Il s'agit d'un script Bash qui vous permet de vous connecter à une tâche interactive. Si votre tâche est lancée correctement, la création de ce fichier peut prendre quelques minutes.
Développement avec NeMo-RL
Configuration interactive
Deux options sont disponibles pour un développement interactif rapide avec NeMo-RL.
nemorlinteractive
Il s'agit d'une commande d'assistance simple qui vous permet de choisir un nœud GPU dans le cluster (par exemple, le nœud numéro 5), puis de vous rediriger vers un conteneur en cours d'exécution pour NeMo-RL dans le nœud sélectionné. Cette commande est utile pour vos workflows à nœud unique.
Pour utiliser nemorlinteractive, vous devez suivre les étapes préalables suivantes :
- Fournissez tous les jetons d'authentification souhaités (par exemple, HF et WandB) chargés dans la tâche dans le fichier
configs/auth.sh. Définissez la variable d'environnement
CLUSTER_TYPEconformément aux instructions suivantes :export CLUSTER_TYPE="hcc-a3m" # --> if you have A3-Mega cluster export CLUSTER_TYPE="hcc-a3u" # --> if you have A3-Ultra cluster export CLUSTER_TYPE="hcc-a4" # --> If you have A4 cluster export CLUSTER_TYPE="hcc-a3h" # --> If you have A3H clusterImportez
nemorlinteractivedans votre terminal Bash en sourçant lebash_utils.sh:source bash_utils.shExécutez la commande
nemorlinteractive. Exemple :# Assuming you want to take the compute node number 5. nemorlinteractive 5
Lancement interactif
Cette option vous permet d'exécuter des charges de travail de manière interactive sur plusieurs nœuds de calcul. Les tâches interactives sont plus adaptées aux cas d'utilisation de débogage et de validation. Ces charges de travail réservent le nœud indéfiniment jusqu'à ce que le développeur décide que le débogage est terminé et qu'il souhaite libérer les ressources.
Voici les étapes à suivre pour cette option :
Fournissez tous les jetons d'authentification souhaités (par exemple, HF et WandB) chargés dans la tâche dans le fichier configs/auth.sh.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --interactive
Attendez 2 à 5 minutes. Vous devriez voir
<job_id>/attach.shcréé.Pour surveiller la progression du lancement, consultez
<job_id>/nemo_rl_output.logpour voir la progression du script de lancement et consultez<job_id>/ray_logs/pour voir la progression du lancement du nœud principal Ray et des nœuds de calcul Ray.Connectez-vous à la tâche interactive. Ce script vous permet de vous reconnecter même si vous perdez la connexion :
bash <job_id>/attach.sh
Étape suivante
L'exécution d'une charge de travail prédéfinie vérifie l'état opérationnel du cluster. L'étape suivante consiste à exécuter votre propre application d'entraînement personnalisée.
- Exécutez votre propre charge de travail personnalisée : empaquetez votre code d'entraînement dans un conteneur et envoyez-le en tant que
CustomJobà votre cluster d'entraînement. Ce processus inclut la configuration de la tâche pour un environnement distribué. - Surveillez vos tâches d'entraînement : suivez efficacement la progression, l'utilisation des ressources et les journaux des tâches exécutées sur votre cluster à l'aide de la Cloud de Confiance console ou de Cloud Logging.
- Affichez votre cluster : après avoir exécuté vos tests, vérifiez l'état de votre cluster et de ses nœuds individuels.
- Gérez votre cluster : mettez à jour la configuration de votre cluster ou supprimez-le pour gérer les coûts.
- Orchestrez les tâches avec les pipelines Gemini Enterprise Agent Platform : après avoir exécuté les tâches manuellement, automatisez le processus en créant un pipeline pour orchestrer vos workflows d'entraînement.