In dieser Anleitung erfahren Sie, wie Sie das NVIDIA NeMo-Ökosystem in einem Managed Training-Cluster für die End-to-End-Entwicklung generativer KI-Modelle verwenden. Sie enthält eine Schritt-für-Schritt-Anleitung für die folgenden unterschiedlichen, aber zusammenhängenden Workflows, die jeweils in einem eigenen Abschnitt behandelt werden:
- NVIDIA NeMo: Folgen Sie dieser Anleitung, um für die Entwicklung von Fundierungsmodellen Pre-Training, Continuous Pre-Training (CPT) und Supervised Fine-Tuning (SFT) im großen Maßstab durchzuführen.
- NVIDIA NeMo-RL: Verwenden Sie diesen Abschnitt für die Modellausrichtung und die Abstimmung von Präferenzen, um fortschrittliche Techniken wie Reinforcement Learning (RL) anzuwenden, um Ihr Modell an menschliche Anweisungen und Präferenzen anzupassen.
Ganz gleich, ob Sie ein Modell von Grund auf neu erstellen oder ein vorhandenes optimieren möchten – in diesem Dokument erfahren Sie, wie Sie Ihre Umgebung einrichten, containerisierte Jobs verwalten und Trainingsskripts im Cluster starten.
NVIDIA NeMo
Das NVIDIA NeMo-Framework ist eine End-to-End-Plattform zum Erstellen, Anpassen und Bereitstellen von generativen KI-Modellen. Dieser Abschnitt des Leitfadens richtet sich speziell an Entwickler und Forscher, die sich auf die grundlegenden Phasen der Modellentwicklung konzentrieren. Sie enthält eine Schritt-für-Schritt-Anleitung für die Verwendung von NeMo für das groß angelegte Vortraining, das kontinuierliche Vortraining (Continuous Pre-Training, CPT) und die beaufsichtigte Feinabstimmung (Supervised Fine-Tuning, SFT) in einem Managed Training-Cluster.
In dieser Anleitung für Trainingscluster wird der vollständige Workflow zum Ausführen eines Trainingsjobs mit dem NeMo-Framework beschrieben. Der Prozess ist in zwei Hauptteile unterteilt: die einmalige Einrichtung Ihrer Umgebung und die wiederkehrenden Schritte zum Starten eines Jobs.
Umgebung einrichten
Bevor Sie einen Job starten, müssen Sie Ihre Umgebung vorbereiten. Dazu benötigen Sie ein Container-Image und die erforderlichen Trainingsskripts.
Container-Image vorbereiten
Sie haben zwei Optionen für das Container-Image: Sie können ein vordefiniertes Image verwenden (empfohlen) oder ein benutzerdefiniertes Image erstellen.
Vordefiniertes Image verwenden (empfohlen)
Vordefinierte Container-Images werden im Format .squashfs bereitgestellt. Kopieren Sie das entsprechende Bild für Ihre Region in Ihr Arbeitsverzeichnis.
# Example for the US region
gcloud storage cp gs://vmds-containers-us/nemo_squashfs/nemo-20250721.sqsh .
Benutzerdefinierten Container erstellen (erweitert)
Führen Sie diese Schritte nur aus, wenn die vordefinierten Container nicht Ihren Anforderungen entsprechen.
In dieser Anleitung wird beschrieben, wie Sie ein benutzerdefiniertes Container-Image mit enroot in das Format .squashfs konvertieren.
Schritt 1: Mit Google Cloudauthentifizieren.
Verwenden Sie die folgenden Befehle, um sicherzustellen, dass sowohl Ihr Google Cloud -Nutzerkonto als auch die Docker-Registry, in der Ihr Image gehostet wird, authentifiziert sind:
gcloud auth login
gcloud auth configure-docker us-docker.pkg.dev
Schritt 2: Conversion-Skript erstellen
Erstellen Sie eine Datei mit dem Namen enroot-convert.sh und fügen Sie ihr den folgenden Skriptinhalt hinzu. Bevor Sie dieses Skript ausführen, müssen Sie die Variablen REMOTE_IMG und LOCAL_IMG so aktualisieren, dass sie auf Ihr Container-Image und den von Ihnen ausgewählten Ausgabepfad verweisen.
#!/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};
"
Schritt 3: Script ausführen und Ausgabe prüfen
Führen Sie das Skript auf dem Slurm-Anmeldeknoten aus.
sbatch -N 1 enroot-convert.sh
Nachdem der Job abgeschlossen ist, finden Sie die Konvertierungsprotokolle in einer Datei mit dem Namen slurm-<JOB_ID>.out und das endgültige Container-Image unter dem Pfad, den Sie für LOCAL_IMG angegeben haben.
Trainingsrezepte herunterladen
Die Trainingsrezepte werden in einem privaten googlesource.com-Repository gespeichert.
Wenn Sie mit der Git-Befehlszeile darauf zugreifen möchten, müssen Sie zuerst Anmeldedaten für die Authentifizierung generieren.
Authentifizierungsdaten generieren
Rufen Sie die folgende URL auf und folgen Sie der Anleitung auf dem Bildschirm. Dadurch wird Ihre lokale Umgebung für die Authentifizierung beim Repository konfiguriert. https://www.googlesource.com/new-password
Repository klonen
Nachdem die Anmeldedaten authentifiziert wurden, führen Sie den folgenden Befehl aus, um die Rezepte herunterzuladen.
git clone https://vertex-model-garden.googlesource.com/vertex-oss-training
Trainingsjob starten
Sobald Ihre Umgebung eingerichtet ist, können Sie einen Trainingsjob starten.
Schritt 1: Umgebungsvariablen festlegen
Für Ihren Job sind möglicherweise die folgenden Umgebungsvariablen erforderlich:
- Das
HF_TOKENist erforderlich, um Modelle und Datasets von Hugging Face herunterzuladen. - Die
WANDB_API_KEYist erforderlich, um Weights & Biases für die Analyse von Experimenten zu verwenden.
export HF_TOKEN=YOUR_HF_TOKEN
export WANDB_API_KEY=YOUR_WANDB_API_KEY
Schritt 2: Startskript ausführen
Wechseln Sie zu Ihrem Arbeitsverzeichnis und führen Sie das run.py-Skript aus, um einen Job zu starten. In diesem Beispiel wird ein Demotrainingsjob mit Llama 3.1-2b gestartet.
# 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
Startparameter
--slurm-typewird basierend auf dem Clustertyp festgelegt, z. B.hcc-a3m,hcc-a3uoderhcc-a4.--partitionmuss auf eine verfügbare Partition festgelegt sein. Sie können die Namen der Partitionen mit dem Befehlsinfoprüfen.- Das Skript
run.pystellt automatisch mehrere Verzeichnisse im Docker-Container bereit, darunter--log-dir,--cache-dirund--data-dir, sofern sie festgelegt sind.
Jobstatus und ‑logs überwachen
Nachdem Sie den Job gestartet haben, wird ein Statusblock angezeigt:
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
Die Ausführungsprotokolle werden in den Pfad geschrieben, der im Feld Local Directory der Statusausgabe angezeigt wird. Die Logdateien finden Sie beispielsweise unter einem Pfad wie diesem:
$NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run/<JOB_ID>.log
Häufige Fehler und Lösungen
In diesem Abschnitt werden häufige Probleme beschrieben, die während der Ausführung von Jobs auftreten können, sowie empfohlene Schritte zur Behebung.
Fehler: Ungültige Partition
Standardmäßig wird versucht, Jobs in der allgemeinen Partition zu starten. Wenn die allgemeine Partition nicht vorhanden oder nicht verfügbar ist, schlägt der Job mit dem folgenden Fehler fehl:
sbatch: error: invalid partition specified: general
sbatch: error: Batch job submission failed: Invalid partition name specified
Lösung:
Geben Sie im Startbefehl eine verfügbare Partition mit dem Argument --partition oder -p an.
Führen Sie den Befehl sinfo auf dem Slurm-Anmeldeknoten aus, um eine Liste der verfügbaren Partitionen aufzurufen.
sinfo
Die Ausgabe zeigt die verfügbaren Partitionsnamen, z. B. a3u in diesem Beispiel:
| PARTITION | AVAIL | ZEITLIMIT | NODES | STATUS | NODELIST |
|---|---|---|---|---|---|
| a3u* | Nach-oben | unendlich | 2 | idle~ | alice-a3u-[2-3] |
| a3u* | Nach-oben | unendlich | 2 | inaktiv | alice-a3u-[0-1] |
Fehler beim Herunterladen des Tokenizers
Möglicherweise tritt ein OSError im Zusammenhang mit einem geräteübergreifenden Link auf, wenn das Skript versucht, den GPT2-Tokenizer herunterzuladen:
OSError: [Errno 18] Invalid cross-device link: 'gpt2-vocab.json' -> '/root/.cache/torch/megatron/megatron-gpt-345m_vocab'
Lösungen:
Sie haben zwei Möglichkeiten, dieses Problem zu beheben:
- Option 1:
Führen Sie den Job noch einmal aus. Dieser Fehler ist oft vorübergehend. Wenn Sie den Job mit derselben
--cache-dirnoch einmal ausführen, lässt sich das Problem möglicherweise beheben. - Option 2:
Tokenizer-Dateien manuell herunterladen Wenn das erneute Ausführen des Jobs fehlschlägt, gehen Sie so vor:
- Laden Sie die folgenden beiden Dateien herunter:
gpt2-vocab.jsongpt2-merges.txt
- Verschieben Sie die heruntergeladenen Dateien in das Unterverzeichnis
torch/megatron/in Ihrem Cache-Verzeichnis (z. B.<var>YOUR_CACHE_DIR</var>/torch/megatron/). - Benennen Sie die Dateien so um:
- Benennen Sie
gpt2-vocab.jsoninmegatron-gpt-345m_vocabum. - Benennen Sie
gpt2-merges.txtinmegatron-gpt-345m_mergesum.
- Benennen Sie
- Laden Sie die folgenden beiden Dateien herunter:
NVIDIA NeMo-RL
Das NVIDIA NeMo-RL-Framework wurde entwickelt, um Large Language Models an menschliche Präferenzen und Anweisungen anzupassen. In diesem Abschnitt erfahren Sie, wie Sie NeMo-RL auf einem Cluster verwenden, um erweiterte Anpassungsaufgaben auszuführen, darunter Supervised Fine-Tuning (SFT), Preference-Tuning (z. B. Direct Preference Optimization oder DPO) und Reinforcement Learning (RL).
In der Anleitung werden zwei primäre Arbeitsabläufe behandelt: Ausführen eines standardmäßigen Batch-Trainingsjobs und Verwenden der interaktiven Entwicklungsumgebung zum Debuggen.
Vorbereitung
Bevor Sie beginnen, erstellen Sie einen Cluster. Folgen Sie dazu der Anleitung auf der Seite Cluster erstellen. Alternativ können Sie einen vorhandenen Managed Training-Cluster verwenden, sofern Sie einen haben.
Verbindung zum Anmeldeknoten des Clusters herstellen
Um eine Verbindung zum Anmeldeknoten des Clusters herzustellen, rufen Sie in der Google Google Cloud Console die Seite Google Compute Engine Virtual Machine auf und klicken Sie auf „SSH“ > „Google Cloud CLI-Befehl ansehen“, um den richtigen Google Cloud CLI-Befehl zu finden. Die Ausgabe sieht etwa so aus:
ssh $USER_NAME@machine-addr
Beispiel:
ssh $USER_NAME@nic0.sliua3m1-login-001.europe-north1-c.c.infinipod-shared-dev.internal.gcpnode.com
Vordefiniertes Docker-Image verwenden
Konvertierte .sqsh-Dateien sind für vordefinierte Container-Images verfügbar. Sie können einen Container für Ihre Region auswählen und ihn entweder direkt als Parameter für das Containerimage festlegen oder in das Dateisystem des Clusters herunterladen.
Wenn Sie es direkt als Parameter für das Container-Image festlegen möchten, verwenden Sie einen der folgenden Pfade.
Ersetzen Sie <region> durch Ihre spezifische Region (z. B. europe, asia, us):
/gcs/vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh
Verwenden Sie den folgenden Befehl, um das Image in den Lustre-Speicher des Clusters herunterzuladen:
gs://vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh DESTINATION
Code herunterladen
Wenn Sie mit der Git-Befehlszeile auf das Trainingsrezept zugreifen möchten, rufen Sie https://www.googlesource.com/new-password auf. Das Rezept kann mit dem folgenden Befehl heruntergeladen werden:
cd $HOME
git clone https://vertex-model-garden.googlesource.com/vertex-oss-training
Jobs starten
Schritt 1: Umgebungsvariablen festlegen
Wenn Sie Modelle und Daten von Hugging Face abrufen möchten, muss möglicherweise HF_TOKEN festgelegt werden.
Wenn Sie Weights & Biases für die Testanalyse verwenden möchten, muss WANDB_API_KEY festgelegt sein. Aktualisieren Sie diese Variablen in der folgenden Datei:
Zu aktualisierende Datei: $HOME/vertex-oss-training/nemo_rl/configs/auth.sh
Wenn Sie Weights & Biases nicht verwenden möchten, setzen Sie logger.wandb_enabled in Ihrem Startskript auf False.
Schritt 2: Containerdatei in den Startordner herunterladen oder kopieren
Hier einige Beispiele:
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`
Schritt 3: NeMo-RL-Repository vorbereiten oder klonen
Erstellen Sie einen Klon des NeMo-RL-Codes, falls er noch nicht vorhanden ist. Möglicherweise müssen Sie git submodule update --init --recursive verwenden, wenn Sie das Repository bereits ohne das Flag --recursive geklont haben.
git clone https://github.com/NVIDIA-NeMo/RL --recursive
Schritt 4: Trainingsjob starten
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --job_script algorithms/dpo.sh
Wobei:
--cluster-typewird basierend auf dem Clustertyp festgelegt:- A3-Mega:
hcc-a3m - A3-Ultra:
hcc-a3u - A4:
hcc-a4 - A3H:
hcc-a3h
- A3-Mega:
--partitionsollte entsprechend festgelegt werden. Mitsinfokönnen die Slurm-Partitionen geprüft werden.
Nachdem Ihr Job gestartet wurde, wird in Ihrem aktuellen Speicherort ein neues Verzeichnis erstellt, das nach der SLURM-Job-ID benannt ist. Dort finden Sie alle Logs und Checkpoints, die zu diesem Job gehören. Genauer gesagt finden Sie darin die folgenden Verzeichnisse und Dateien:
checkpoints/: Dieses Verzeichnis wird im NeMo-RL-Container bereitgestellt und enthält alle Prüfpunkte aus dem Training.ray-logs/: Dieses Verzeichnis enthält die Logs von Ray-Head und Ray-Workern.nemo_rl_output.log: Diese Datei enthält die Slurm-Logs des eingereichten Jobs.attach.sh(nur interaktive Jobs) → Dies ist ein Bash-Script, mit dem Sie einen interaktiven Job anhängen können. Wenn Ihr Job erfolgreich gestartet wurde, kann es einige Minuten dauern, bis diese Datei erstellt wird.
Entwicklung mit NeMo-RL
Interaktive Einrichtung
Für die schnelle interaktive Entwicklung mit NeMo-RL stehen zwei Optionen zur Verfügung.
nemorlinteractive
Dies ist ein einfacher Hilfsbefehl, mit dem Sie einen GPU-Knoten aus dem Cluster auswählen können (z. B. Knoten 5). Anschließend werden Sie zu einem laufenden Container für NeMo-RL auf dem ausgewählten Knoten weitergeleitet. Dieser Befehl ist für Ihre Single-Node-Workflows hilfreich.
Damit Sie nemorlinteractive verwenden können, müssen Sie die folgenden Voraussetzungen erfüllen:
- Geben Sie alle Auth-Tokens an, die in den Job geladen werden sollen (z. B. HF und WandB), in der Datei
configs/auth.shan. Legen Sie die Umgebungsvariable
CLUSTER_TYPEgemäß der folgenden Richtlinie fest: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 clusterImportieren Sie
nemorlinteractivein Ihr Bash-Terminal, indem Siebash_utils.shausführen:source bash_utils.shFühren Sie den Befehl
nemorlinteractiveaus: Beispiel:# Assuming you want to take the compute node number 5. nemorlinteractive 5
Interaktiver Start
Mit dieser Option können Sie Arbeitslasten interaktiv auf mehreren Compute-Knoten ausführen. Interaktive Jobs eignen sich am besten für Debugging- und Prüfungsanwendungsfälle. Diese Arbeitslasten reservieren den Knoten auf unbestimmte Zeit, bis der Entwickler das Debugging beendet und die Ressourcen freigeben möchte.
Für diese Option müssen folgende Schritte ausgeführt werden:
Geben Sie alle Authentifizierungstokens an, die für den Job geladen werden sollen (z. B. HF und WandB), in der Datei configs/auth.sh an.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --interactive
Warten Sie zwei bis fünf Minuten. Dann sollte
<job_id>/attach.sherstellt werden.Um den Fortschritt des Starts zu überwachen, sehen Sie sich
<job_id>/nemo_rl_output.logan, um den Fortschritt des Startskripts zu sehen, und<job_id>/ray_logs/, um den Fortschritt des Starts von Ray-Head und -Workern zu sehen.Stellen Sie eine Verbindung zum interaktiven Job her. Mit diesem Skript können Sie die Verbindung wieder herstellen, auch wenn sie unterbrochen wird:
bash <job_id>/attach.sh
Nächste Schritte
Durch Ausführen einer vorgefertigten Arbeitslast wird der Betriebsstatus des Clusters überprüft. Im nächsten Schritt führen Sie Ihre eigene benutzerdefinierte Trainingsanwendung aus.
- Eigene benutzerdefinierte Arbeitslast ausführen: Verpacken Sie Ihren Trainingscode in einem Container und senden Sie den Container als
CustomJoban Ihren Trainingscluster. Dazu gehört auch, den Job für eine verteilte Umgebung zu konfigurieren. - Trainingsjobs überwachen: Mit der Google Cloud -Konsole oder Cloud Logging können Sie den Fortschritt, die Ressourcennutzung und die Logs für die Jobs, die in Ihrem Cluster ausgeführt werden, effektiv verfolgen.
- Cluster verwalten: Nach dem Ausführen der Tests können Sie den Status Ihres Clusters prüfen oder ihn löschen, um Kosten zu senken.
- Jobs mit Vertex AI Pipelines orchestrieren: Nachdem Sie Jobs manuell ausgeführt haben, können Sie den Prozess automatisieren, indem Sie eine Pipeline erstellen, um Ihre Trainingsworkflows zu orchestrieren.