Panduan ini menunjukkan cara menggunakan ekosistem NVIDIA NeMo di cluster Pelatihan Terkelola untuk pengembangan model AI generatif end-to-end. Panduan ini memberikan petunjuk langkah demi langkah untuk alur kerja berikut yang berbeda tetapi terkait, yang masing-masing dibahas di bagian khusus:
- NVIDIA NeMo: Untuk pengembangan model dasar, ikuti petunjuk ini untuk melakukan pra-pelatihan skala besar, pra-pelatihan berkelanjutan (CPT), dan penyetelan lanjutan yang diawasi (SFT).
- NVIDIA NeMo-RL: Untuk penyelarasan model dan penyetelan preferensi, gunakan bagian ini untuk menerapkan teknik lanjutan seperti Reinforcement Learning (RL) guna menyelaraskan model Anda dengan petunjuk dan preferensi manusia.
Baik Anda membuat model dari awal atau menyempurnakan model yang ada, dokumen ini akan memandu Anda menyiapkan lingkungan, mengelola tugas dalam container, dan meluncurkan skrip pelatihan di cluster.
NVIDIA NeMo
Framework NVIDIA NeMo adalah platform end-to-end untuk membangun, menyesuaikan, dan men-deploy model AI generatif. Bagian panduan ini secara khusus ditujukan untuk developer dan peneliti yang berfokus pada tahap dasar pengembangan model. Panduan ini memberikan petunjuk langkah demi langkah untuk menggunakan NeMo dalam melakukan pra-pelatihan skala besar, pra-pelatihan berkelanjutan (CPT), dan penyetelan lanjutan yang diawasi (SFT) di cluster Pelatihan Terkelola.
Panduan cluster pelatihan ini memberikan alur kerja lengkap untuk menjalankan tugas pelatihan dengan framework NeMo. Proses ini dibagi menjadi dua bagian utama: penyiapan awal lingkungan Anda yang dilakukan satu kali dan langkah-langkah berulang untuk meluncurkan tugas.
Menyiapkan lingkungan Anda
Sebelum meluncurkan tugas, Anda harus menyiapkan lingkungan dengan memastikan Anda memiliki image container dan skrip pelatihan yang diperlukan.
Menginstal NeMo-Run
pip install git+https://github.com/NVIDIA/NeMo-Run.git
Menyiapkan image container
Anda memiliki dua opsi untuk image container: menggunakan image bawaan (direkomendasikan) atau membuat image kustom.
Menggunakan image bawaan (direkomendasikan)
Image container bawaan disediakan dalam format .squashfs. Salin image yang sesuai untuk region Anda ke direktori kerja Anda.
# Example for the US region
gcloud storage cp gs://vmds-containers-us/vmds_nemo_squashfs/nemo-20250721.sqsh .
Membuat container yang disesuaikan (lanjutan)
Ikuti langkah-langkah ini hanya jika container bawaan tidak memenuhi kebutuhan Anda.
Prosedur ini memandu Anda mengonversi image container kustom ke format .squashfs menggunakan enroot.
Langkah 1: Lakukan autentikasi dengan Google Cloud.
Gunakan perintah berikut untuk memastikan bahwa akun your Google Cloud user dan registry Docker tempat image Anda dihosting diautentikasi:
gcloud auth login
gcloud auth configure-docker us-docker.pkg.dev
Langkah 2: Buat skrip konversi.
Buat file bernama enroot-convert.sh dan tambahkan konten skrip berikut. Sebelum menjalankan skrip ini, Anda harus memperbarui variabel REMOTE_IMG dan LOCAL_IMG agar mengarah ke image container dan jalur output yang Anda pilih.
#!/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};
"
Langkah 3: Jalankan skrip dan verifikasi output.
Jalankan skrip di node login Slurm.
sbatch -N 1 enroot-convert.sh
Setelah tugas selesai, temukan log konversi dalam file bernama
slurm-<JOB_ID>.out dan image container akhir di jalur yang Anda tentukan
untuk LOCAL_IMG.
Mendownload resep pelatihan
Resep pelatihan disimpan di repositori googlesource.com pribadi.
Untuk mengaksesnya dengan command line Git, Anda harus membuat kredensial autentikasi terlebih dahulu.
Buat kredensial autentikasi.
Buka URL berikut dan ikuti petunjuk di layar. Tindakan ini akan mengonfigurasi lingkungan lokal Anda untuk melakukan autentikasi dengan repositori. https://www.googlesource.com/new-password
Buat clone repositori.
Setelah kredensial diautentikasi, jalankan perintah berikut untuk mendownload resep.
git clone -b release-allowlist-ga https://vertex-model-garden.googlesource.com/vertex-oss-training
Meluncurkan tugas pelatihan
Setelah lingkungan Anda disiapkan, Anda dapat meluncurkan tugas pelatihan.
Langkah 1: Tetapkan variabel lingkungan
Variabel lingkungan berikut mungkin diperlukan untuk tugas Anda:
HF_TOKENdiperlukan untuk mendownload model dan set data dari Hugging Face.WANDB_API_KEYdiperlukan untuk menggunakan Weights & Biases untuk analisis eksperimen.
export HF_TOKEN=YOUR_HF_TOKEN
export WANDB_API_KEY=YOUR_WANDB_API_KEY
Langkah 2: Jalankan skrip peluncuran
Buka direktori kerja Anda dan jalankan skrip run.py untuk memulai tugas. Contoh ini memulai tugas pelatihan demo dengan 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
Parameter peluncuran
--slurm-typeditetapkan berdasarkan jenis cluster (misalnya,hcc-a3m,hcc-a3u,hcc-a4).--partitionharus ditetapkan ke partisi yang tersedia. Anda dapat memeriksa nama partisi dengan perintahsinfo.- Skrip
run.pysecara otomatis memasang beberapa direktori ke container Docker, termasuk--log-dir,--cache-dir, dan--data-dir, jika ditetapkan.
Memantau status dan log tugas
Setelah Anda meluncurkan tugas, blok status akan ditampilkan:
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
Log eksekusi ditulis ke jalur yang ditampilkan di kolom Local Directory dari output status. Misalnya, Anda dapat menemukan file log di jalur yang mirip dengan ini:
$NEMORUN_HOME/experiments/nemo-demo-run/nemo-demo-run_1753123402/nemo-demo-run/<JOB_ID>.log
Error dan solusi umum
Bagian ini menjelaskan masalah umum yang mungkin muncul selama eksekusi tugas dan memberikan langkah-langkah yang direkomendasikan untuk mengatasinya.
Error partisi tidak valid
Secara default, tugas akan mencoba diluncurkan di partisi umum. Jika partisi umum tidak ada atau tidak tersedia, tugas akan gagal dengan error berikut:
sbatch: error: invalid partition specified: general
sbatch: error: Batch job submission failed: Invalid partition name specified
Solusi:
Tentukan partisi yang tersedia menggunakan argumen --partition atau -p dalam perintah peluncuran Anda.
Untuk melihat daftar partisi yang tersedia, jalankan perintah sinfo di node login Slurm.
sinfo
Output menampilkan nama partisi yang tersedia, seperti a3u dalam contoh ini:
| PARTITION | AVAIL | TIMELIMIT | NODES | STATE | NODELIST |
|---|---|---|---|---|---|
| a3u* | panah atas | tak terbatas | 2 | tidak ada aktivitas~ | alice-a3u-[2-3] |
| a3u* | panah atas | tak terbatas | 2 | tidak ada aktivitas | alice-a3u-[0-1] |
Error download tokenizer
Anda mungkin mengalami OSError terkait link lintas perangkat saat skrip mencoba mendownload tokenizer GPT2:
OSError: [Errno 18] Invalid cross-device link: 'gpt2-vocab.json' -> '/root/.cache/torch/megatron/megatron-gpt-345m_vocab'
Solusi:
Anda memiliki dua opsi untuk mengatasi masalah ini:
- Opsi #1: Jalankan ulang tugas. Error ini sering kali bersifat sementara. Menjalankan ulang tugas menggunakan
--cache-diryang sama dapat mengatasi masalah ini. - Opsi #2: Download file tokenizer secara manual. Jika menjalankan ulang tugas gagal, ikuti langkah-langkah berikut:
- Download dua file berikut:
gpt2-vocab.jsongpt2-merges.txt
- Pindahkan file yang didownload ke subdirektori
torch/megatron/dalam direktori cache Anda (misalnya,<var>YOUR_CACHE_DIR</var>/torch/megatron/). - Ganti nama file sebagai berikut:
- Ganti nama
gpt2-vocab.jsonmenjadimegatron-gpt-345m_vocab. - Ganti nama
gpt2-merges.txtmenjadimegatron-gpt-345m_merges.
- Ganti nama
- Download dua file berikut:
NVIDIA NeMo-RL
Framework NVIDIA NeMo-RL dirancang untuk menyelaraskan model bahasa besar dengan preferensi dan petunjuk manusia. Bagian ini memandu Anda menggunakan NeMo-RL di cluster untuk melakukan tugas penyelarasan lanjutan, termasuk penyetelan lanjutan yang diawasi (SFT), penyetelan preferensi (seperti Direct Preference Optimization, atau DPO), dan Reinforcement Learning (RL).
Panduan ini mencakup dua alur kerja utama: menjalankan tugas pelatihan batch standar dan menggunakan lingkungan pengembangan interaktif untuk proses debug.
Prasyarat
Sebelum memulai, buat cluster dengan mengikuti petunjuk di halaman Membuat cluster, atau gunakan cluster Pelatihan Terkelola yang ada, jika Anda memilikinya.
Menghubungkan ke node login cluster
Untuk terhubung ke node login cluster, temukan perintah Google Cloud CLI yang benar dengan membuka halaman Virtual Machine Google Compute Engine di Google Google Cloud console dan mengklik SSH > Lihat perintah Google Cloud CLI. Perintah tersebut akan terlihat seperti ini:
ssh $USER_NAME@machine-addr
Contoh:
ssh $USER_NAME@nic0.sliua3m1-login-001.europe-north1-c.c.infinipod-shared-dev.internal.gcpnode.com
Menggunakan image Docker bawaan
File .sqsh yang dikonversi disediakan untuk image container bawaan. Anda dapat memilih container untuk region Anda dan menetapkannya langsung sebagai parameter image container atau mendownloadnya ke sistem file cluster.
Untuk menetapkannya langsung sebagai parameter image container, gunakan salah satu jalur berikut.
Perhatikan bahwa Anda harus mengganti <region> dengan region tertentu
(misalnya, europe, asia, us):
/gcs/vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh
Untuk mendownload image ke penyimpanan lustre cluster, gunakan perintah berikut:
gs://vmds-containers-<region>/vmds_nemo_rl_squashfs/nemo_rl-h20260302.sqsh DESTINATION
Mendownload kode
Untuk mendapatkan akses ke resep pelatihan dengan git CLI, buka https://www.googlesource.com/new-password. Resep dapat didownload dengan perintah berikut:
cd $HOME
git clone -b release-allowlist-ga https://vertex-model-garden.googlesource.com/vertex-oss-training
Meluncurkan tugas
Langkah 1: Tetapkan variabel lingkungan.
Untuk mengambil model dan data dari Hugging Face, HF_TOKEN mungkin perlu ditetapkan.
Untuk menggunakan Weights &Biases untuk analisis eksperimen, WANDB_API_KEY perlu ditetapkan. Perbarui variabel ini dalam file berikut:
File yang akan diperbarui: $HOME/vertex-oss-training/nemo_rl/configs/auth.sh
Jika Anda tidak ingin menggunakan Weights & Biases, tetapkan logger.wandb_enabled ke False dalam skrip peluncuran Anda.
Langkah 2: Download atau salin file container ke folder peluncuran Anda.
Berikut ini beberapa contohnya.
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`
Langkah 3: Siapkan atau Clone repositori NeMo-RL.
Buat clone kode NeMo-RL jika belum ada. Perhatikan bahwa Anda mungkin
perlu menggunakan git submodule update --init --recursive jika telah meng-clone
repositori tanpa flag --recursive.
git clone https://github.com/NVIDIA-NeMo/RL --recursive
Langkah 4: Luncurkan tugas pelatihan.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --job_script algorithms/dpo.sh
Dengan:
--cluster-typeditetapkan berdasarkan jenis cluster:- A3-Mega:
hcc-a3m - A3-Ultra:
hcc-a3u - A4:
hcc-a4 - A3H:
hcc-a3h
- A3-Mega:
--partitionharus ditetapkan dengan tepat, dengansinfodapat digunakan untuk memeriksa partisi slurm.
Setelah tugas Anda dimulai, direktori baru yang diberi nama sesuai dengan ID pekerjaan SLURM akan dibuat di lokasi Anda saat ini. Di dalamnya, Anda akan menemukan semua log dan checkpoint yang termasuk dalam tugas ini. Lebih tepatnya, di dalamnya Anda akan menemukan direktori dan file berikut:
checkpoints/→ Direktori ini dipasang di dalam container NeMo-RL dan berisi semua checkpoint dari pelatihan.ray-logs/→ Direktori ini berisi log dari ray head dan ray worker.nemo_rl_output.log→ File ini berisi log Slurm dari tugas yang Anda kirimkan.attach.sh(Hanya tugas interaktif) → Ini adalah skrip bash yang memungkinkan Anda melampirkan ke tugas interaktif. Jika tugas Anda berhasil diluncurkan, mungkin perlu waktu beberapa menit agar file ini dibuat.
Pengembangan dengan NeMo-RL
Penyiapan Interaktif
Dua opsi tersedia untuk pengembangan interaktif cepat dengan NeMo-RL.
nemorlinteraktif
Ini adalah perintah helper sederhana yang memungkinkan Anda memilih node GPU dari cluster (misalnya, node nomor 5), lalu perintah ini akan membawa Anda ke container yang berjalan untuk NeMo-RL di dalam node yang Anda pilih. Perintah ini berguna untuk alur kerja node tunggal Anda.
Untuk menggunakan nemorlinteractive, Anda harus mengikuti langkah-langkah prasyarat berikut:
- Berikan semua token autentikasi yang Anda inginkan (misalnya, HF dan WandB) yang dimuat ke tugas dalam file
configs/auth.sh. Tetapkan variabel lingkungan
CLUSTER_TYPEsesuai dengan panduan berikut: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 clusterImpor
nemorlinteractivedi terminal bash Anda dengan membuat sumberbash_utils.sh:source bash_utils.shJalankan perintah
nemorlinteractive. Contoh:# Assuming you want to take the compute node number 5. nemorlinteractive 5
Peluncuran interaktif
Opsi ini memungkinkan Anda menjalankan workload secara interaktif di beberapa node komputasi. Tugas interaktif paling cocok untuk kasus penggunaan proses debug dan verifikasi. Workload ini mencadangkan node tanpa batas waktu hingga developer memutuskan bahwa proses debug telah selesai dan mereka ingin merilis resource.
Berikut adalah langkah-langkah yang perlu diikuti untuk opsi ini:
Berikan semua token autentikasi yang Anda inginkan (misalnya HF dan WandB) yang dimuat ke tugas dalam file configs/auth.sh.
sbatch -N <num_nodes> launch.sh --cluster_type hcc-a3m --interactive
Tunggu 2-5 menit dan Anda akan melihat
<job_id>/attach.shdibuat.Untuk memantau progres peluncuran, periksa
<job_id>/nemo_rl_output.loguntuk melihat progres skrip peluncuran dan periksa<job_id>/ray_logs/untuk melihat progres peluncuran ray head dan worker.Hubungkan ke tugas interaktif. Skrip ini memungkinkan Anda terhubung lagi meskipun koneksi terputus:
bash <job_id>/attach.sh
Langkah berikutnya
Menjalankan workload bawaan akan memverifikasi status operasional cluster. Langkah berikutnya adalah menjalankan aplikasi pelatihan kustom Anda sendiri.
- Jalankan workload kustom Anda sendiri: Kemas kode pelatihan Anda ke dalam container dan kirim container sebagai
CustomJobke cluster pelatihan Anda. Proses ini mencakup konfigurasi tugas untuk lingkungan terdistribusi. - Pantau tugas pelatihan Anda: Lacak progres, penggunaan resource, dan log secara efektif untuk tugas yang berjalan di cluster Anda menggunakan the the Google Cloud console atau Cloud Logging.
- Kelola cluster Anda: Setelah menjalankan pengujian, periksa status cluster Anda atau hapus untuk mengelola biaya.
- Atur tugas dengan Pipeline Platform Agen Gemini Enterprise: Setelah menjalankan tugas secara manual, otomatiskan proses dengan membuat pipeline untuk mengatur alur kerja pelatihan Anda.