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 reinforcement learning yang dirancang untuk meningkatkan kemampuan penalaran model. Algoritma yang hemat 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 RL dengan verl untuk penskalaan dan penyesuaian.
Latar belakang
Bagian berikut memberikan ringkasan singkat tentang konsep yang digunakan dalam tutorial ini.
Reinforcement learning (RL)
RL mengajarkan model melalui pengalaman, eksplorasi, dan masukan, bukan peniruan 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 itu reinforcement learning?
Pengoptimalan Kebijakan Relatif Grup (GRPO)
GRPO, algoritma yang dipopulerkan oleh DeepSeek, menawarkan alternatif yang hemat memori untuk Proximal Policy Optimization (PPO) untuk penyelarasan LLM dengan menghapus model Critic. Alih-alih jaringan Critic, 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 skalabel. 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 cerita matematika 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 dalam grup. 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 yang berperforma 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
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih project Google Cloud .
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat project Google Cloud :
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.
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan API yang diperlukan, jika belum diaktifkan:
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 servicenetworking.googleapis.com lustre.googleapis.com -
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih project Google Cloud .
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat project Google Cloud :
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.
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan API yang diperlukan, jika belum diaktifkan:
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 servicenetworking.googleapis.com lustre.googleapis.com -
Berikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/container.admin, roles/iam.serviceAccountAdmin, roles/storage.admin, roles/servicenetworking.networksAdmin, roles/compute.networkAdmin, roles/lustre.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 pengguna Anda. Misalnya,myemail@example.com.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 Google Cloud Anda memiliki kuota yang cukup untuk GPU B200 dan H200. Untuk mempelajari lebih lanjut, lihat Merencanakan kuota GPU dan Kuota GPU.
- Pastikan project Google Cloud Anda memiliki kuota yang diperlukan untuk Managed Lustre. Untuk mengetahui informasi selengkapnya, lihat Kuota dan batas Managed Lustre.
Menyiapkan lingkungan Anda
Dalam tutorial ini, Anda akan menggunakan Cloud Shell.
Buka Google Cloud console.
Di bagian atas Google Cloud jendela konsol, klik tombol Activate Cloud Shell.
Tetapkan variabel lingkungan berikut:
Ganti nilai berikut:
YOUR_REGION: region Compute Engine untuk bidang kontrol cluster GKE.YOUR_ZONE: zona untuk node Anda. Pilih zona tempat GPU NVIDIA B200 atau H200 tersedia.YOUR_LUSTRE_ZONE: zona untuk instance Managed Lustre Anda. Pilih zona tempat Managed Lustre tersedia. Untuk meningkatkan performa, mengurangi latensi, dan menghindari biaya traffic keluar jaringan, gunakan zona yang sama denganYOUR_ZONE.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_CPU_MACHINE_TYPE: jenis mesin Compute Engine untuk node pool default CPU. Gunakan jenis mesinhighmemdengan minimal 16 vCPU yang didukung di zona cluster Anda, sepertin4-highmem-16ataun2d-highmem-16.YOUR_RESERVATION_NAME: nama reservasi GPU Anda.YOUR_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:
YOUR_NETWORK_NAME: awalan yang digunakan untuk membuat nama jaringan VPC untuk cluster GKE Anda.YOUR_GVNIC_NETWORK_PREFIX: awalan untuk nama jaringan gVNIC. Anda dapat menggunakan awalan apa pun yang Anda inginkan.YOUR_RDMA_NETWORK_PREFIX: awalan untuk jaringan remote direct memory access (RDMA). Anda dapat menggunakan awalan apa pun yang Anda inginkan.
Instal plugin KubeRay (beta) untuk
kubectlCLI, jika belum diinstal:Plugin ini menyediakan perintah untuk mengelola workload Ray di Kubernetes, seperti membuka sesi interaktif dan mengirimkan tugas.
Menyiapkan infrastruktur
Di bagian ini, Anda akan membuat jaringan VPC dan cluster GKE.
Membuat jaringan VPC
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.
Simpan manifes berikut sebagai
lustre-pv.yaml:Terapkan manifes:
Simpan manifes berikut sebagai
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 dan periksa commit yang terverifikasi:
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, head node mengelola Tugas 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 Pod yang menghosting node head dan worker Ray 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 33hMungkin perlu waktu sekitar 10 menit agar Pod mulai.
Pastikan 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 Tugas Ray ke cluster Ray yang sedang berjalan di GKE. NeMo RL otomatis mendownload model selama eksekusi tugas pelatihan RL.
Untuk mengirimkan Tugas Ray, mulai sesi interaktif untuk menjalankan Tugas.
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 terisi 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.
Di jendela terminal awal, kirimkan Tugas:
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:Tampilkan 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:
Hapus aturan firewall dan jaringan:
Menghapus project Anda
Menghapus project Google Cloud :
gcloud projects delete PROJECT_ID