Questa guida mostra come utilizzare l'ecosistema NVIDIA NeMo su un cluster di addestramento gestito per lo sviluppo di modelli di AI generativa end-to-end. Fornisce istruzioni passo passo per i seguenti workflow distinti ma correlati, ognuno trattato nella propria sezione dedicata:
- NVIDIA NeMo: per lo sviluppo di modelli di base, segui queste istruzioni per eseguire il pre-addestramento su larga scala, il pre-addestramento continuo (CPT) e il fine-tuning supervisionato (SFT).
- NVIDIA NeMo-RL: per l'allineamento dei modelli e l'ottimizzazione delle preferenze, utilizza questa sezione per applicare tecniche avanzate come il reinforcement learning (RL) per allineare il modello alle istruzioni e alle preferenze umane.
Che tu stia creando un modello da zero o perfezionandone uno esistente, questo documento ti guida nella configurazione dell'ambiente, nella gestione dei job containerizzati e nell'avvio degli script di addestramento sul cluster.
NVIDIA NeMo
Il framework NVIDIA NeMo è una piattaforma end-to-end per la creazione, la personalizzazione e il deployment di modelli di AI generativa. Questa sezione della guida è rivolta in particolare a sviluppatori e ricercatori che si concentrano sulle fasi fondamentali dello sviluppo dei modelli. Fornisce istruzioni passo passo per l'utilizzo di NeMo per eseguire il pre-addestramento su larga scala, il pre-addestramento continuo (CPT) e l'ottimizzazione supervisionata (SFT) su un cluster di addestramento gestito.
Questa guida ai cluster di addestramento fornisce il workflow completo per l'esecuzione di un job di addestramento con il framework NeMo. La procedura è suddivisa in due parti principali: la configurazione iniziale una tantum dell'ambiente e i passaggi ricorrenti per l'avvio di un job.
Configura l'ambiente
Prima di avviare un job, devi preparare l'ambiente assicurandoti di avere un'immagine container e gli script di addestramento necessari.
Installa NeMo-Run
pip install git+https://github.com/NVIDIA/NeMo-Run.git
Prepara un'immagine container
Hai due opzioni per l'immagine container: utilizzare un'immagine predefinita (opzione consigliata) o crearne una personalizzata.
Utilizza un'immagine predefinita (opzione consigliata)
Le immagini container predefinite sono fornite nel formato .squashfs. Copia l'immagine appropriata per la tua regione nella directory di lavoro.
# Example for the US region
gcloud storage cp gs://vmds-containers-us/vmds_nemo_squashfs/nemo-20250721.sqsh .
Crea un container personalizzato (avanzato)
Segui questi passaggi solo se i container predefiniti non soddisfano le tue esigenze.
Questa procedura ti guida nella conversione di un'immagine container personalizzata nel formato .squashfs utilizzando enroot.
Passaggio 1: autenticati con Google Cloud.
Utilizza i seguenti comandi per assicurarti che sia il tuo Google Cloud account utente sia il registro Docker in cui è ospitata l'immagine siano autenticati:
gcloud auth login
gcloud auth configure-docker us-docker.pkg.dev
Passaggio 2: crea lo script di conversione.
Crea un file denominato enroot-convert.sh e aggiungi i seguenti contenuti dello script. Prima di eseguire questo script, devi aggiornare le variabili REMOTE_IMG e LOCAL_IMG in modo che puntino all'immagine container e al percorso di output scelto.
#!/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};
"
Passaggio 3: esegui lo script e verifica l'output.
Esegui lo script sul nodo di accesso Slurm.
sbatch -N 1 enroot-convert.sh
Al termine del job, trova i log di conversione in un file denominato
slurm-<JOB_ID>.out e l'immagine container finale nel percorso specificato
per LOCAL_IMG.
Scarica le ricette di addestramento
Le ricette di addestramento sono archiviate in un repository privato googlesource.com.
Per accedervi con la riga di comando Git, devi prima generare le credenziali di autenticazione.
Genera le credenziali di autenticazione.
Visita il seguente URL e segui le istruzioni sullo schermo. In questo modo configuri l'ambiente locale per l'autenticazione con il repository. https://www.googlesource.com/new-password
Clona il repository.
Una volta autenticate le credenziali, esegui il seguente comando per scaricare le ricette.
git clone -b release-allowlist-ga https://vertex-model-garden.googlesource.com/vertex-oss-training
Avvia un job di addestramento
Una volta configurato l'ambiente, puoi avviare un job di addestramento.
Passaggio 1: imposta le variabili di ambiente
Per il job potrebbero essere necessarie le seguenti variabili di ambiente:
HF_TOKENè necessario per scaricare modelli e set di dati da Hugging Face.- Il
WANDB_API_KEYè necessario per utilizzare Weights & Biases per l'analisi degli esperimenti.
export HF_TOKEN=YOUR_HF_TOKEN
export WANDB_API_KEY=YOUR_WANDB_API_KEY
Passaggio 2: esegui lo script di avvio
Vai alla directory di lavoro ed esegui lo script run.py per avviare un job. Questo esempio avvia un job di addestramento demo con 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
Parametri di avvio
--slurm-typeè impostato in base al tipo di cluster (ad esempio,hcc-a3m,hcc-a3u,hcc-a4).--partitiondeve essere impostato su una partizione disponibile. Puoi controllare i nomi delle partizioni con il comandosinfo.- Lo script
run.pymonta automaticamente diverse directory nel container Docker, tra cui--log-dir,--cache-dire--data-dir, se sono impostate.
Monitoraggio dello stato e dei log dei job
Dopo aver avviato il job, viene visualizzato un blocco di stato:
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
I log di esecuzione vengono scritti nel percorso mostrato nel campo Local Directory dell'output di stato. Ad esempio, puoi trovare i file di log in un percorso simile a questo:
$NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run/<JOB_ID>.log
Errori comuni e soluzioni
Questa sezione descrive i problemi comuni che possono verificarsi durante l'esecuzione dei job e fornisce i passaggi consigliati per risolverli.
Errore di partizione non valida
Per impostazione predefinita, i job tentano di essere avviati nella partizione generale. Se la partizione generale non esiste o non è disponibile, il job non verrà eseguito e verrà visualizzato il seguente errore:
sbatch: error: invalid partition specified: general
sbatch: error: Batch job submission failed: Invalid partition name specified
Soluzione:
Specifica una partizione disponibile utilizzando l'argomento --partition o -p nel tuo
comando di avvio.
Per visualizzare un elenco delle partizioni disponibili, esegui il comando sinfo sul nodo di accesso Slurm.
sinfo
L'output mostra i nomi delle partizioni disponibili, ad esempio a3u in questo esempio:
| PARTITION | AVAIL | TIMELIMIT | NODES | STATE | NODELIST |
|---|---|---|---|---|---|
| a3u* | up | infinite | 2 | idle~ | alice-a3u-[2-3] |
| a3u* | up | infinite | 2 | idle | alice-a3u-[0-1] |
Errore di download del tokenizer
Quando lo script tenta di scaricare il tokenizer GPT2, potresti riscontrare un OSError relativo a un link tra dispositivi:
OSError: [Errno 18] Invalid cross-device link: 'gpt2-vocab.json' -> '/root/.cache/torch/megatron/megatron-gpt-345m_vocab'
Soluzioni:
Hai due opzioni per risolvere questo problema:
- Opzione 1: esegui di nuovo il job. Questo errore è spesso temporaneo. La riesecuzione del job utilizzando lo stesso
--cache-dirpotrebbe risolvere il problema. - Opzione 2: scarica manualmente i file del tokenizer. Se la riesecuzione del job non riesce, segui questi passaggi:
- Scarica i seguenti due file:
gpt2-vocab.jsongpt2-merges.txt
- Sposta i file scaricati nella sottodirectory
torch/megatron/all'interno della directory della cache (ad esempio,<var>YOUR_CACHE_DIR</var>/torch/megatron/). - Rinomina i file come segue:
- Rinomina
gpt2-vocab.jsoninmegatron-gpt-345m_vocab. - Rinomina
gpt2-merges.txtinmegatron-gpt-345m_merges.
- Rinomina
- Scarica i seguenti due file:
NVIDIA NeMo-RL
Il framework NVIDIA NeMo-RL è progettato per allineare i modelli linguistici di grandi dimensioni alle preferenze e alle istruzioni umane. Questa sezione ti guida nell'utilizzo di NeMo-RL su un cluster per eseguire attività di allineamento avanzate, tra cui l'ottimizzazione supervisionata (SFT), l'ottimizzazione delle preferenze (ad esempio, l'ottimizzazione diretta delle preferenze o DPO) e il reinforcement learning (RL).
La guida tratta due workflow principali: l'esecuzione di un job di addestramento batch standard e l'utilizzo dell'ambiente di sviluppo interattivo per il debug.
Prerequisiti
Prima di iniziare, crea un cluster seguendo le istruzioni riportate nella pagina Crea cluster oppure utilizza un cluster di addestramento gestito esistente, se ne hai uno.
Connettiti al nodo di accesso del cluster
Per connetterti al nodo di accesso del cluster, trova il comando Google Cloud CLI corretto andando alla pagina Macchina virtuale di Google Compute Engine nella console Google Google Cloud e facendo clic su SSH > Visualizza comando Google Cloud CLI. che saranno simili a quanto segue:
ssh $USER_NAME@machine-addr
Esempio:
ssh $USER_NAME@nic0.sliua3m1-login-001.europe-north1-c.c.infinipod-shared-dev.internal.gcpnode.com
Utilizza l'immagine Docker predefinita
I file .sqsh convertiti vengono forniti per le immagini container predefinite. Puoi selezionare un container per la tua regione e impostarlo direttamente come parametro dell'immagine container o scaricarlo nel file system del cluster.
Per impostarlo direttamente come parametro dell'immagine container, utilizza uno dei seguenti percorsi.
Tieni presente che devi sostituire <region> con la tua regione specifica
(ad esempio, europe, asia, us):
/gcs/vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh
Per scaricare l'immagine nello spazio di archiviazione Lustre del cluster, utilizza il seguente comando:
gs://vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh DESTINATION
Scarica codice
Per accedere alla ricetta di addestramento con l'interfaccia a riga di comando git, visita https://www.googlesource.com/new-password. La ricetta può essere scaricata con il seguente comando:
cd $HOME
git clone -b release-allowlist-ga https://vertex-model-garden.googlesource.com/vertex-oss-training
Avvia i job
Passaggio 1: imposta le variabili di ambiente.
Per eseguire il pull di modelli e dati da Hugging Face, potrebbe essere necessario impostare HF_TOKEN.
Per utilizzare Weights &Biases per l'analisi degli esperimenti, è necessario impostare WANDB_API_KEY. Aggiorna queste variabili nel seguente file:
File da aggiornare: $HOME/vertex-oss-training/nemo_rl/configs/auth.sh
Se non vuoi utilizzare Weights & Biases, imposta logger.wandb_enabled su False nello script di avvio.
Passaggio 2: scarica o copia il file del container nella cartella di avvio.
Di seguito sono riportati alcuni esempi.
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`
Passaggio 3: prepara o clona il repository NeMo-RL.
Crea una copia del codice NeMo-RL se non è già presente. Tieni presente che potresti
dover utilizzare git submodule update --init --recursive se hai già clonato
il repository senza il flag --recursive.
git clone https://github.com/NVIDIA-NeMo/RL --recursive
Passaggio 4: avvia il job di addestramento.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --job_script algorithms/dpo.sh
Dove:
--cluster-typeè impostato in base al tipo di cluster:- A3-Mega:
hcc-a3m - A3-Ultra:
hcc-a3u - A4:
hcc-a4 - A3H:
hcc-a3h
- A3-Mega:
--partitiondeve essere impostato di conseguenza, dovesinfopuò essere utilizzato per controllare le partizioni Slurm.
Dopo l'avvio del job, nella posizione corrente viene creata una nuova directory denominata con l'ID job SLURM. All'interno troverai tutti i log e i checkpoint appartenenti a questo job. Più precisamente, all'interno troverai le seguenti directory e i seguenti file:
checkpoints/→ Questa directory è montata all'interno del container NeMo-RL e contiene tutti i checkpoint dell'addestramento.ray-logs/→ Questa directory contiene i log di ray head e ray worker.nemo_rl_output.log→ Questo file contiene i log Slurm del job inviato.attach.sh(solo per i job interattivi) → Si tratta di uno script bash che ti consente di collegarti a un job interattivo. Se il job viene avviato correttamente, la creazione di questo file potrebbe richiedere alcuni minuti.
Sviluppo con NeMo-RL
Configurazione interattiva
Sono disponibili due opzioni per lo sviluppo interattivo rapido con NeMo-RL.
nemorlinteractive
Si tratta di un semplice comando helper che ti consente di scegliere un nodo GPU dal cluster (ad esempio, il nodo numero 5), quindi ti porta a un container in esecuzione per NeMo-RL all'interno del nodo selezionato. Questo comando è utile per i workflow a nodo singolo.
Per utilizzare nemorlinteractive, devi seguire questi passaggi preliminari:
- Fornisci tutti i token di autenticazione che vuoi (ad esempio, HF e WandB) caricati nel job nel file
configs/auth.sh. Imposta la variabile di ambiente
CLUSTER_TYPEin base alle seguenti linee guida: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 clusterImporta
nemorlinteractivenel terminale bash eseguendo l'origine dibash_utils.sh:source bash_utils.shEsegui il comando
nemorlinteractive. Ad esempio:# Assuming you want to take the compute node number 5. nemorlinteractive 5
Avvio interattivo
Questa opzione ti consente di eseguire i carichi di lavoro in modo interattivo su più nodi di calcolo. I job interattivi sono più adatti per i casi d'uso di debug e verifica. Questi carichi di lavoro riservano il nodo a tempo indeterminato finché lo sviluppatore non decide che il debug è terminato e vuole rilasciare le risorse.
Di seguito sono riportati i passaggi da seguire per questa opzione:
Fornisci tutti i token di autenticazione che vuoi (ad esempio HF e WandB) caricati nel job nel file configs/auth.sh.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --interactive
Attendi 2-5 minuti e dovresti vedere la creazione di
<job_id>/attach.sh.Per monitorare l'avanzamento dell'avvio, controlla
<job_id>/nemo_rl_output.logper visualizzare l'avanzamento dello script di avvio e controlla<job_id>/ray_logs/per visualizzare l'avanzamento dell'avvio di ray head e worker.Connettiti al job interattivo. Questo script ti consente di connetterti di nuovo anche se perdi la connessione:
bash <job_id>/attach.sh
Passaggi successivi
L'esecuzione di un carico di lavoro predefinito verifica lo stato operativo del cluster. Il passaggio successivo consiste nell'eseguire la tua applicazione di addestramento personalizzata.
- Esegui il tuo carico di lavoro personalizzato: inserisci il codice di addestramento in un container e invia il container come
CustomJobal cluster di addestramento. Questa procedura include la configurazione del job per un ambiente distribuito. - Monitora i job di addestramento: monitora in modo efficace l'avanzamento, l'utilizzo delle risorse e i log dei job in esecuzione sul cluster utilizzando la la Google Cloud console o Cloud Logging.
- Gestisci il cluster: dopo aver eseguito i test, controlla lo stato del cluster o eliminalo per gestire i costi.
- Orchestra i job con le pipeline di Gemini Enterprise Agent Platform: dopo aver eseguito i job manualmente, automatizza la procedura creando una pipeline per orchestrare i workflow di addestramento.