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 flussi di lavoro distinti ma correlati, ognuno trattato in una 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 del modello e l'ottimizzazione delle preferenze, utilizza questa sezione per applicare tecniche avanzate come l'apprendimento per rinforzo (RL) per allineare il tuo 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 creare, personalizzare ed eseguire il deployment di modelli di AI generativa. Questa sezione della guida è pensata specificamente per sviluppatori e ricercatori che si concentrano sulle fasi fondamentali dello sviluppo del modello. Fornisce istruzioni passo passo per utilizzare NeMo per eseguire il pre-addestramento su larga scala, il pre-addestramento continuo (CPT) e l'ottimizzazione supervisionata (SFT) su un cluster Managed Training.
Questa guida sui cluster di addestramento fornisce il workflow completo per l'esecuzione di un job di addestramento con il framework NeMo. Il processo è suddiviso 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 disporre di un'immagine container e degli script di addestramento necessari.
Prepara un'immagine container
Hai due opzioni per l'immagine container: utilizzare un'immagine predefinita (consigliata) o crearne una personalizzata.
Utilizzare un'immagine predefinita (consigliato)
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/nemo_squashfs/nemo-20250721.sqsh .
Crea un container personalizzato (avanzato)
Segui questi passaggi solo se i contenitori predefiniti non soddisfano le tue esigenze.
Questa procedura ti guida nella conversione di un'immagine container personalizzata nel formato
.squashfs utilizzando enroot.
Passaggio 1: esegui l'autenticazione 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 del 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.
Scaricare le ricette di allenamento
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 credenziali di autenticazione.
Visita il seguente URL e segui le istruzioni sullo schermo. In questo modo, l'ambiente locale viene configurato per l'autenticazione con il repository. https://www.googlesource.com/new-password
Clona il repository.
Una volta autenticate le credenziali, esegui questo comando per scaricare le ricette.
git clone 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 tuo job potrebbero essere necessarie le seguenti variabili di ambiente:
HF_TOKENè necessario per scaricare modelli e set di dati da Hugging Face.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>/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 esempiohcc-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 del 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 andrà a buon fine 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 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 | STATO | NODELIST |
|---|---|---|---|---|---|
| a3u* | Freccia su | infinito | 2 | idle~ | alice-a3u-[2-3] |
| a3u* | Freccia su | infinito | 2 | inattivo | alice-a3u-[0-1] |
Errore di download del tokenizzatore
Potresti riscontrare un errore OSError relativo a un collegamento tra dispositivi quando lo script tenta di scaricare il tokenizer GPT2:
OSError: [Errno 18] Invalid cross-device link: 'gpt2-vocab.json' -> '/root/.cache/torch/megatron/megatron-gpt-345m_vocab'
Soluzioni:
Per risolvere il problema, hai due opzioni:
- Opzione 1:
Esegui nuovamente il job. Questo errore è spesso transitorio. Se esegui di nuovo il job utilizzando lo stesso
--cache-dir, il problema potrebbe risolversi. - Opzione 2:
Scarica manualmente i file del tokenizer. Se la riesecuzione del job non va a buon fine,
segui questi passaggi:
- Scarica i due file seguenti:
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 due file seguenti:
NVIDIA NeMo-RL
Il framework NVIDIA NeMo-RL è progettato per allineare i modelli linguistici di grandi dimensioni (LLM) 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 il fine-tuning supervisionato (SFT), l'ottimizzazione delle preferenze (come l'ottimizzazione diretta delle preferenze o DPO) e l'apprendimento per rinforzo (RL).
La guida copre due flussi di lavoro 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 o utilizza un cluster Managed Training 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 accedendo alla pagina Macchina virtuale 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>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh
Per scaricare l'immagine nell'archivio Lustre del cluster, utilizza il seguente comando:
gs://vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh DESTINATION
Scarica codice
Per accedere alla ricetta di addestramento con la CLI git, visita la pagina https://www.googlesource.com/new-password. La ricetta può essere scaricata con il seguente comando:
cd $HOME
git clone https://vertex-model-garden.googlesource.com/vertex-oss-training
Avviare job
Passaggio 1: imposta le variabili di ambiente.
Per estrarre 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 contenitore nella cartella di lancio.
Di seguito sono riportati alcuni esempi.
gcloud storage cp \
gs://vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-20250923.sqsh \
$HOME/vertex-oss-training/nemo_rl/nemo_rl-h20250923.sqsh
# OR
/gcs/vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20250923.sqsh \
$HOME/vertex-oss-training/nemo_rl/nemo_rl-h20250923.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 un clone 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, viene creata una nuova directory con il nome dell'ID job SLURM nella posizione corrente. All'interno troverai tutti i log e i checkpoint appartenenti a questo job. Più precisamente, all'interno troverai le seguenti directory e 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 dei worker ray.nemo_rl_output.log→ Questo file contiene i log di Slurm del job inviato.attach.sh(solo per i job interattivi) → Questo è uno script bash che ti consente di collegarti a un job interattivo. Se il job viene avviato correttamente, la creazione del file potrebbe richiedere un paio di 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 flussi di lavoro 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 workload 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 visualizzare
<job_id>/attach.shcreato.Per monitorare l'avanzamento del controllo di avvio
<job_id>/nemo_rl_output.log, visualizza l'avanzamento dello script di avvio e controlla<job_id>/ray_logs/per visualizzare l'avanzamento dell'avvio di ray head e dei worker.Connettiti all'attività interattiva. Questo script ti consente di riconnetterti 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 personalizzato.
- Esegui il tuo workload personalizzato: impacchetta il codice di addestramento in un container
e invia il container come
CustomJobal cluster di addestramento. Questo processo 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 console Google Cloud 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 Vertex AI Pipelines: dopo aver eseguito i job manualmente, automatizza il processo creando una pipeline per orchestrare i flussi di lavoro di addestramento.