Menjalankan workload bawaan

Jika Anda tertarik dengan Vertex AI Managed Training, hubungi Sales Rep Anda untuk mendapatkan akses.

Panduan ini menunjukkan cara menggunakan ekosistem NVIDIA NeMo di cluster Managed Training untuk pengembangan model AI generatif secara menyeluruh. 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 prapelatihan skala besar, prapelatihan berkelanjutan (CPT), dan penyesuaian terawasi (SFT).
  • NVIDIA NeMo-RL: Untuk penyesuaian preferensi dan penyelarasan model, 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 bagi developer dan peneliti yang berfokus pada tahap dasar pengembangan model. Dokumen ini memberikan petunjuk langkah demi langkah untuk menggunakan NeMo dalam melakukan pra-pelatihan skala besar, pra-pelatihan berkelanjutan (CPT), dan penyesuaian terawasi (SFT) pada cluster Managed Training.

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 satu kali dan langkah-langkah berulang untuk meluncurkan tugas.

Menyiapkan lingkungan Anda

Sebelum meluncurkan tugas, Anda perlu menyiapkan lingkungan dengan memastikan Anda memiliki image container dan skrip pelatihan yang diperlukan.

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 gambar yang sesuai untuk wilayah Anda ke direktori kerja Anda.

# Example for the US region
gcloud storage cp gs://vmds-containers-us/nemo_squashfs/nemo-20250721.sqsh .
Membangun container yang disesuaikan (lanjutan)

Ikuti langkah-langkah ini hanya jika penampung 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 pengguna Google Cloud Anda dan Docker Registry tempat image Anda dihosting telah 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.

Download resep pelatihan

Resep pelatihan disimpan dalam repositori googlesource.com pribadi. Untuk mengaksesnya dengan command line Git, Anda harus membuat kredensial autentikasi terlebih dahulu.

  1. 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

  2. Buat clone repositori.

    Setelah kredensial diautentikasi, jalankan perintah berikut untuk mendownload resep.

    git clone https://vertex-model-garden.googlesource.com/vertex-oss-training
    

Meluncurkan tugas pelatihan

Setelah lingkungan disiapkan, Anda dapat meluncurkan tugas pelatihan.

Langkah 1: Tetapkan variabel lingkungan

Variabel lingkungan berikut mungkin diperlukan untuk tugas Anda:

  • HF_TOKEN diperlukan untuk mendownload model dan set data dari Hugging Face.
  • WANDB_API_KEY diperlukan 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>/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-type ditetapkan berdasarkan jenis cluster (misalnya, hcc-a3m, hcc-a3u, hcc-a4).
  • --partition harus ditetapkan ke partisi yang tersedia. Anda dapat memeriksa nama partisi dengan perintah sinfo.
  • Skrip run.py otomatis memasang beberapa direktori ke penampung Docker, termasuk --log-dir, --cache-dir, dan --data-dir, jika disetel.

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 menyelesaikannya.

Error partisi tidak valid

Secara default, tugas 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. 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:

PARTISI AVAIL TIMELIMIT NODE STATUS NODELIST
a3u* panah atas tak terhingga 2 idle~ alice-a3u-[2-3]
a3u* panah atas tak terhingga 2 tidak ada aktivitas alice-a3u-[0-1]

Error download tokenizer

Anda mungkin mengalami OSError terkait penautan 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 menyelesaikan masalah ini:

  • Opsi #1: Jalankan ulang tugas. Error ini sering kali bersifat sementara. Menjalankan ulang tugas menggunakan --cache-dir yang sama dapat menyelesaikan masalah ini.
  • Opsi #2: Download file tokenizer secara manual. Jika menjalankan ulang tugas gagal, ikuti langkah-langkah berikut:
    • Download dua file berikut:
      • gpt2-vocab.json
      • gpt2-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.json menjadi megatron-gpt-345m_vocab.
      • Ganti nama gpt2-merges.txt menjadi megatron-gpt-345m_merges.

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 fine-tuning terawasi (SFT), penyesuaian 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 men-debug.

Prasyarat

Sebelum memulai, buat cluster dengan mengikuti petunjuk di halaman Buat cluster, atau gunakan cluster Managed Training yang ada, jika Anda memilikinya.

Hubungkan ke node login cluster

Untuk terhubung ke node login cluster, temukan perintah Google Cloud CLI yang benar dengan membuka halaman Google Compute Engine Virtual Machine di konsol Google Google Cloud , lalu klik SSH > View Google Cloud CLI command. Tampilannya 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 menyetelnya secara langsung sebagai parameter image container atau mendownloadnya ke sistem file cluster.

Untuk menyetelnya secara langsung sebagai parameter image container, gunakan salah satu jalur berikut. Perhatikan bahwa Anda harus mengganti <region> dengan region spesifik Anda (misalnya, europe, asia, us):

/gcs/vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.sqsh

Untuk mendownload image ke penyimpanan lustre cluster, gunakan perintah berikut:

gs://vmds-containers-<region>/nemo_rl_squashfs/nemo_rl-h20250923.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 https://vertex-model-garden.googlesource.com/vertex-oss-training

Meluncurkan tugas

Langkah 1: Tetapkan variabel lingkungan.

Untuk menarik model dan data dari Hugging Face, HF_TOKEN mungkin perlu disetel. Untuk menggunakan Weights & Biases dalam analisis eksperimen, WANDB_API_KEY harus ditetapkan. Perbarui variabel ini dalam file berikut:

File yang akan diupdate: $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 penampung ke folder peluncuran.

Berikut ini beberapa contohnya.

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`

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 sudah 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-type ditetapkan berdasarkan jenis cluster:
    • A3-Mega: hcc-a3m
    • A3-Ultra: hcc-a3u
    • A4: hcc-a4
    • A3H: hcc-a3h
  • --partition harus disetel dengan tepat, dengan sinfo dapat digunakan untuk memeriksa partisi slurm.

Setelah tugas Anda dimulai, direktori baru yang dinamai sesuai dengan ID Tugas SLURM akan dibuat di lokasi Anda saat ini. Di dalamnya, Anda akan menemukan semua log dan titik pemeriksaan milik tugas ini. Lebih tepatnya, di dalamnya Anda akan menemukan direktori dan file berikut:

  • checkpoints/ → Direktori ini di-mount di dalam container NeMo-RL dan berisi semua titik pemeriksaan 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 (Khusus tugas interaktif) → Ini adalah skrip bash yang memungkinkan Anda melampirkan ke tugas interaktif. Jika tugas Anda berhasil diluncurkan, mungkin diperlukan waktu beberapa menit untuk membuat file ini.

Pengembangan dengan NeMo-RL

Penyiapan Interaktif

Dua opsi tersedia untuk pengembangan interaktif cepat dengan NeMo-RL.

nemorlinteractive

Ini adalah perintah bantuan langsung yang memungkinkan Anda memilih node GPU dari cluster (misalnya, node nomor 5), lalu membawa Anda ke container yang sedang 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:

  1. Berikan semua token autentikasi yang Anda inginkan (misalnya, HF dan WandB) yang dimuat ke tugas dalam file configs/auth.sh.
  2. Tetapkan variabel lingkungan CLUSTER_TYPE sesuai dengan pedoman 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 cluster
    
  3. Impor nemorlinteractive di terminal bash dengan memanggil bash_utils.sh:

    source bash_utils.sh
    
  4. Jalankan 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 penelusuran kesalahan dan verifikasi. Workload ini mencadangkan node tanpa batas waktu hingga developer memutuskan bahwa proses pen-debug-an telah selesai dan mereka ingin melepaskan resource.

Berikut adalah langkah-langkah yang harus 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.sh dibuat.

  • Untuk memantau progres pemeriksaan peluncuran <job_id>/nemo_rl_output.log, lihat progres skrip peluncuran dan periksa <job_id>/ray_logs/ untuk melihat progres peluncuran head dan pekerja ray.

  • Terhubung ke tugas interaktif. Skrip ini memungkinkan Anda terhubung kembali meskipun koneksi Anda 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.