Tutorial ini menunjukkan cara mengorkestrasi lingkungan pelatihan terdistribusi untuk reinforcement learning (RL) di Google Kubernetes Engine (GKE). Anda menggunakan Ray dan framework NVIDIA NeMo RL untuk menyiapkan lingkungan pelatihan terdistribusi guna melakukan penyesuaian model.
Tutorial ini berfokus pada pipeline pelatihan Group Relative Policy Optimization (GRPO) di GKE dengan Ray dan NeMo RL. GRPO adalah algoritma pembelajaran penguatan yang dirancang untuk meningkatkan kemampuan penalaran model. Algoritma yang efisien memori ini menyederhanakan proses RL dengan menghilangkan Critic, atau model nilai, dan menggunakan perhitungan berbasis grup relatif.
Sebelum menjalankan tutorial ini, selesaikan tutorial Menyesuaikan dan menskalakan reinforcement learning dengan Verl di GKE. Tutorial ini menggunakan penyiapan dan konfigurasi cluster yang sama dengan tutorial penyempurnaan dan penskalaan RL dengan Verl.
Latar belakang
Bagian berikut memberikan ringkasan singkat tentang konsep yang digunakan dalam tutorial ini.
Reinforcement learning (RL)
RL mengajari model melalui pengalaman, eksplorasi, dan masukan, bukan imitasi statis. Meskipun pra-pelatihan mengajarkan model apa yang harus dikatakan, Reinforcement Learning from Human Feedback (RLHF) mengajarkannya cara menjadi bermanfaat, aman, dan logis. RL berfungsi sebagai jembatan antara model dasar dan model yang di-fine-tune untuk kasus penggunaan khusus.
Untuk mengetahui informasi selengkapnya, lihat Apa yang dimaksud dengan reinforcement learning?
Pengoptimalan Kebijakan Relatif Grup (GRPO)
GRPO, sebuah algoritma yang dipopulerkan oleh DeepSeek, menawarkan alternatif yang hemat memori untuk penyelarasan LLM dengan Proximal Policy Optimization (PPO) dengan menghapus model Critic. Alih-alih jaringan Kritikus, GRPO menghasilkan sekelompok respons untuk perintah yang sama dan menggunakan reward rata-rata kelompok tersebut sebagai dasar.
Untuk mengetahui informasi selengkapnya, lihat GRPO.
NVIDIA NeMo RL
NeMo RL adalah library pasca-pelatihan open source NVIDIA yang dirancang untuk RL yang dapat diskalakan. Sebagai bagian dari ekosistem framework NeMo yang lebih luas, NeMo RL memungkinkan eksperimen skala kecil pada satu GPU dan deployment multi-node di ribuan GPU.
Untuk mengetahui informasi selengkapnya, lihat NVIDIA NeMo RL.
Set data GSM8k
Dalam tutorial ini, Anda akan menggunakan set data GSM8k, yang berisi 8.500 soal matematika kata-kata sekolah dasar berkualitas tinggi dan beragam secara linguistik.
Dengan menggunakan GSM8k dan GRPO, model menghasilkan sekelompok n respons berbeda untuk masalah yang sama. GRPO membandingkan respons ini dengan rata-rata grup. Model ini akan mendapatkan lebih banyak reward untuk jalur yang secara konsisten benar dan logis dibandingkan dengan jalur lainnya. Seiring waktu, model akan mempelajari bahwa mengartikulasikan langkah-langkahnya dengan jelas adalah cara paling andal untuk memaksimalkan reward, sehingga secara efektif mengurangi reward untuk jawaban dengan performa rendah.
Untuk mengetahui informasi selengkapnya, lihat GSM8k.
Tujuan
Tutorial ini menunjukkan cara menyiapkan RL di GKE dengan NeMo RL dengan menyelesaikan langkah-langkah berikut:
- Siapkan lingkungan Anda.
- Siapkan cluster GKE dengan GPU B200 atau H200.
- Konfigurasi KubeRay untuk mengelola cluster Ray terdistribusi.
- Gunakan Managed Lustre untuk penyimpanan berperforma tinggi.
- Jalankan tugas pelatihan GRPO yang menggunakan NeMo RL.
Sebelum memulai
-
Instal Google Cloud CLI.
-
Konfigurasi gcloud CLI agar menggunakan identitas gabungan Anda.
Untuk mengetahui informasi selengkapnya, lihat Login ke gcloud CLI dengan identitas gabungan Anda.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan API yang diperlukan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
storage.googleapis.com compute.googleapis.com -
Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/container.admin, roles/iam.serviceAccountAdmin, roles/storage.admingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ganti kode berikut:
PROJECT_ID: Project ID Anda.USER_IDENTIFIER: ID untuk akun akun. Untuk melihat contoh, lihat Merepresentasikan pengguna workforce pool dalam kebijakan IAM.ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
- Buat akun Hugging Face, jika Anda belum memilikinya.
- Pastikan Anda memiliki
token Hugging Face dengan
read access. - Buat akun Weights & Biases (Wandb), jika Anda belum memilikinya.
- Buat kunci API Wandb.
- Pastikan project Anda memiliki kuota yang cukup untuk GPU B200 dan H200. Google Cloud Untuk mempelajari lebih lanjut, lihat Merencanakan kuota GPU dan Kuota GPU.
Menyiapkan lingkungan Anda
Dalam tutorial ini, Anda akan menggunakan Cloud Shell.
Buka Google Cloud console.
Di bagian atas jendela konsol, klik tombol Activate Cloud Shell. Google Cloud
Tetapkan variabel lingkungan berikut:
Ganti nilai berikut:
YOUR_REGION: region Compute Engine untuk bidang kontrol cluster GKE.YOUR_NODE_ZONE: zona untuk node Anda. Pilih zona tempat GPU NVIDIA B200 atau H200 tersedia.YOUR_CLUSTER_NAME: nama cluster GKE Anda.YOUR_GPU_TYPE: akselerator yang Anda pesan dalam reservasi kapasitas Compute Engine. Harus berupa salah satu nilai berikut:nvidia-b200: NVIDIA B200 (180 GB)nvidia-h200-141gb: NVIDIA H200 (141 GB)
YOUR_MACHINE_TYPE: jenis mesin yang akan digunakan:- Untuk GPU NVIDIA B200 (180 GB), gunakan
a4-highgpu-8gatau yang lebih baru. - Untuk GPU NVIDIA H200 (141 GB), gunakan
a3-ultragpu-8gatau yang lebih baru.
- Untuk GPU NVIDIA B200 (180 GB), gunakan
YOUR_RESERVATION_NAME: nama reservasi GPU Anda.CHOSEN_LUSTRE_NAME: nama instance Lustre Anda.YOUR_HF_TOKEN: token Hugging Face Anda.YOUR_WANDB_API_KEY: Kunci API Wandb Anda.
Buat variabel lingkungan berikut untuk jaringan:
Ganti nilai berikut:
NETWORK_NAME: nama jaringan untuk GKE.GVNIC_NAME: awalan untuk nama jaringan gVNIC. Anda dapat menggunakan awalan apa pun yang Anda inginkan.RDMA_NAME: awalan untuk jaringan akses memori langsung (RDMA) jarak jauh. Anda dapat menggunakan awalan apa pun yang Anda inginkan.
Menyiapkan infrastruktur
Di bagian ini, Anda akan membuat jaringan VPC dan cluster GKE.
Create a VPC network
Buat jaringan VPC untuk antarmuka gVNIC:
Buat jaringan VPC dan subnet untuk RDMA yang mencakup delapan subnet untuk delapan GPU:
Membuat cluster GKE
Anda dapat menyetel NeMo RL di cluster GKE Standard.
Buat cluster Standard:
Dapatkan kredensial untuk cluster Anda:
Buat node pool GPU:
Instal penginstal NCCL RDMA:
Mengonfigurasi pemetaan jaringan
Simpan manifes berikut sebagai
network-mapping.yaml:Terapkan manifes:
Menyiapkan penyimpanan
Di bagian ini, Anda akan membuat instance Managed Lustre, yang menyediakan penyimpanan berperforma tinggi yang diperlukan untuk workload RL Anda.
Alokasikan rentang alamat IP untuk akses layanan pribadi:
Hubungkan peering:
Buat instance Managed Lustre:
Mengakses instance Managed Lustre yang ada menggunakan driver CSI Managed Lustre.
Ekstrak alamat IP instance Managed Lustre.
Periksa manifes
lustre-pv.yaml.Terapkan manifes:
Periksa manifes
lustre-pvc.yaml.Terapkan manifes:
Men-deploy RayCluster
Di bagian ini, Anda akan meng-clone repositori contoh, menyiapkan manifes, dan men-deploy cluster Ray:
Clone repositori contoh:
Buka direktori kerja:
Periksa manifes
values.yaml:Ganti
NCCL_TUNER_CONFIG_PATHdengan salah satu nilai berikut, berdasarkan akselerator yang Anda gunakan dalam tutorial ini:- NVIDIA B200 (180 GB):
/usr/local/gib/configs/tuner_config_a4.txtpb - NVIDIA H200 (141 GB):
/usr/local/gib/configs/tuner_config_a3u.txtpb
Dalam manifes ini, node head mengelola Job dan menghosting Dasbor Ray. Node pekerja menjalankan Tugas pelatihan.
- NVIDIA B200 (180 GB):
Deploy cluster Ray:
Untuk tutorial ini, Anda akan menggunakan dua node pekerja. Jika Anda ingin mengubah jumlah node pekerja, ubah nilai
REPLICA_COUNT.Pastikan node pekerja dan head sedang berjalan:
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE ray-cluster-kuberay-head-sw7dp 2/2 Running 0 33h ray-cluster-kuberay-worker-grp-0-worker-gkbxw 2/2 Running 0 33h ray-cluster-kuberay-worker-grp-0-worker-kdg62 2/2 Running 0 33hPastikan cluster Ray sedang berjalan:
Outputnya mirip dengan hal berikut ini:
NAME NAMESPACE DESIRED WORKERS AVAILABLE WORKERS CPUS GPUS TPUS MEMORY CONDITION STATUS AGE ray-cluster-kuberay default 2 2 618 17 0 1573741824k RayClusterProvisioned ready 33h
Luncurkan Tugas GRPO
Setelah cluster Ray siap, Anda dapat mengirimkan Ray Job ke cluster Ray yang berjalan di GKE. NeMo RL otomatis mendownload model selama eksekusi Tugas pelatihan RL.
Untuk mengirimkan Ray Job, mulai sesi interaktif untuk menjalankan Job.
Untuk membuat koneksi lokal ke cluster Ray Anda, jalankan perintah ini:
Perintah ini memulai penerusan port antara mesin lokal Anda dan node head Ray di cluster GKE Anda. Perhatikan bahwa terminal Anda akan digunakan saat sesi ini aktif; untuk melanjutkan, buka instance terminal terpisah.
Di terminal terpisah, buka
kubernetes-engine-samples/ai-ml/nemo-rl-on-gke/nemoRL/gemma3-27b-itdan edit filegemma3-27b-gsm8k.sh:Ganti nilai berikut dalam file
gemma3-27b-gsm8k.sh:YOUR_WANDB_API_KEY: kunci API WandB Anda.YOUR_HF_TOKEN: token Hugging Face Anda.
Dalam file ini, Anda dapat melihat konfigurasi untuk menjalankan Tugas dengan model gemma3-27b-it pada set data GSM8k. Untuk menyelesaikan pipeline pelatihan GRPO, skrip ini menentukan parameter berikut:
num_prompts_per_step: 16dannum_generations_per_prompt: 32: model Gemma3-27b-it menghasilkan sekelompok besar respons untuk setiap perintah. Dalam konfigurasi ini, model menghasilkan total 512 respons (16 × 32 = 512).policy.generation.colocated.enabled=False: parameter ini menonaktifkan fitur pembuatan yang ditempatkan bersama, yang berarti model tidak membuat respons di node yang sama dengan proses pelatihan. Dalam RL standar, GPU yang sama menangani pelatihan dan pembuatan. Dalam penyiapan NeMo RL ini, Anda mendedikasikan node tertentu (dikelola dengan parameterpolicy.generation.colocated.resources) hanya untuk inferensi vLLM, sementara cluster lainnya berfokus pada matematika pelatihan yang berat. Dengan memisahkan workload ini, Anda mencegah perebutan resource antara buffer pelatihan yang intensif memori dan workload inferensi yang intensif komputasi.
Untuk mengirimkan Job, jalankan perintah berikut:
Saat Tugas berjalan, output akan menampilkan hasil pelatihan, waktu, dan metrik performa.
Memantau kondisi Tugas GRPO
Setelah Tugas Ray selesai, NeMo RL akan menyimpan titik pemeriksaan di jalur yang dikonfigurasi.
Untuk memeriksa output Tugas GRPO, buat sesi SSH ke container
ray-head:Instal utilitas apt tree dalam terminal container
ray-head:Mencantumkan struktur direktori container
ray-head:Outputnya mirip dengan hal berikut ini:
root@ray-cluster-kuberay-worker-grp-0-worker-gkbxw:/opt/nemo-rl# tree /data/nemo_rl_gemma3_27b_3_17/ /data/nemo_rl_gemma3_27b_3_17/ `-- step_10 |-- config.yaml |-- policy | |-- optimizer | | |-- __0_0.distcp | | |-- __10_0.distcp | | |-- __11_0.distcp | | |-- __12_0.distcp | | |-- __13_0.distcp | | |-- __14_0.distcp | | |-- __15_0.distcp | | |-- __1_0.distcp | | |-- __2_0.distcp | | |-- __3_0.distcp | | |-- __4_0.distcp | | |-- __5_0.distcp | | |-- __6_0.distcp | | |-- __7_0.distcp | | |-- __8_0.distcp | | `-- __9_0.distcp | |-- tokenizer | | |-- chat_template.jinja | | |-- special_tokens_map.json | | |-- tokenizer.json | | `-- tokenizer_config.json | `-- weights | |-- __0_0.distcp | |-- __10_0.distcp | |-- __11_0.distcp | |-- __12_0.distcp | |-- __13_0.distcp | |-- __14_0.distcp | |-- __15_0.distcp | |-- __1_0.distcp | |-- __2_0.distcp | |-- __3_0.distcp | |-- __4_0.distcp | |-- __5_0.distcp | |-- __6_0.distcp | |-- __7_0.distcp | |-- __8_0.distcp | `-- __9_0.distcp |-- train_dataloader.pt `-- training_info.json 6 directories, 39 files
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus setiap resource, atau hapus project yang berisi resource tersebut.
Menghapus resource
Hapus cluster Slurm Anda:
Hapus cluster GKE Anda:
Hapus sistem file Lustre Anda:
Hapus peering VPC:
Hapus rentang alamat IP pribadi Lustre:
Hapus subnet RDMA dan gVNIC:
Menghapus aturan firewall dan jaringan:
Menghapus project Anda
Menghapus Google Cloud project:
gcloud projects delete PROJECT_ID