Tutorial ini menunjukkan cara melatih model bahasa besar (LLM) Llama 3 8B di Google Kubernetes Engine (GKE) menggunakan MaxText, Ray Train, dan TPU.
Tutorial ini memberikan panduan lengkap menyeluruh, mulai dari mengonfigurasi infrastruktur cloud yang diperlukan hingga mengirimkan dan berhasil menjalankan workload pelatihan di TPU multi-host.
Tutorial ini ditujukan bagi admin dan operator Platform serta spesialis Data dan AI yang ingin mempelajari cara melatih model besar pada slice TPU multi-host terdistribusi.
Latar belakang
Kombinasi GKE, KubeRay, MaxText, dan TPU menyediakan platform yang canggih dan skalabel untuk pelatihan model berskala besar. Bagian ini menjelaskan teknologi utama yang digunakan dalam panduan ini:
JAX
JAX adalah library Python untuk komputasi array dan transformasi program yang berorientasi pada akselerator, yang dirancang untuk komputasi numerik berperforma tinggi dan machine learning skala besar.
JAX menyediakan sistem yang dapat di-extend untuk mengubah fungsi numerik seperti
jax.grad, jax.jit, dan jax.vmap, dengan memanfaatkan compiler XLA untuk membuat
kode yang sangat dioptimalkan dan dapat diskalakan secara efisien pada akselerator seperti GPU dan
TPU. Kekuatan inti JAX terletak pada kemampuannya untuk menyusun, yang memungkinkan pengguna
menggabungkan transformasi ini untuk membangun program numerik berperforma
tinggi yang kompleks untuk eksekusi terdistribusi.
MaxText
MaxText adalah model bahasa besar (LLM) open source berperforma tinggi yang dirancang untuk skalabilitas dan kemampuan penyesuaian. MaxText dibuat di atas JAX dan dioptimalkan agar berjalan secara efisien di Cloud TPU dan GPU.
TPU
Tensor Processing Unit (TPU) adalah akselerator yang dirancang khusus dan dibuat oleh Google untuk mengoptimalkan beban kerja machine learning. Tidak seperti CPU serbaguna atau GPU pemrosesan paralel, TPU sangat terspesialisasi untuk komputasi matriks dan tensor masif yang menjadi dasar deep learning, sehingga TPU efisien dalam tugas khusus ini. Keuntungan utama TPU adalah performa dalam skala besar.
Tutorial ini menggunakan TPU Trillium, yang merupakan TPU generasi keenam. Untuk mengetahui informasi selengkapnya, lihat Manfaat menggunakan TPU Trillium.
KubeRay
KubeRay adalah operator Kubernetes yang menyediakan cara terpadu untuk men-deploy, mengelola, dan memantau aplikasi Ray di Kubernetes. Operator KubeRay diinstal dan dikelola melalui add-on Ray di GKE, yang merupakan cara yang direkomendasikan untuk men-deploy dan mengelola cluster Ray di GKE.
Tujuan
Tutorial ini menunjukkan kepada Anda cara melakukan hal berikut:
- Siapkan cluster GKE dengan node pool TPU multi-host.
- Konfigurasi KubeRay untuk mengelola lingkungan pelatihan terdistribusi.
- Bangun image Docker kustom yang berisi dependensi MaxText, Ray, dan JAX.
- Buat skrip pelatihan Python yang menggunakan
JaxTrainerRay Train untuk mengatur loop pelatihan MaxText di seluruh slice TPU. - Tentukan
RayClusterresource kustom untuk menyediakan node head dan worker dengan resource TPU yang diperlukan. - Kirim Tugas pelatihan ke
RayClusterdan pantau progresnya. - Gunakan Cloud Storage untuk menyimpan checkpoint model.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the 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 -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the required API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Install the 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 -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the required API:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable container.googleapis.com
-
Grant roles to your user account. Run the following command once for each of the following IAM roles:
roles/container.admin, roles/iam.serviceAccountAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Replace the following:
PROJECT_ID: Your project ID.USER_IDENTIFIER: The identifier for your user account. For example,myemail@example.com.ROLE: The IAM role that you grant to your user account.
- Karena tutorial ini menggunakan TPU Trillium (v6e), pilih region atau zona dengan ketersediaan. Untuk mengetahui informasi selengkapnya, lihat Kuota Cloud TPU.
Menyiapkan lingkungan Anda
Dalam tutorial ini, Anda akan menggunakan Cloud Shell. Cloud Shell telah diinstal sebelumnya dengan alat command line gcloud, helm, dan kubectl yang digunakan dalam tutorial ini.
Buka Google Cloud console.
Di bagian atas jendela konsol, klik tombol Activate Cloud Shell
. Google Cloud Sesi Cloud Shell akan terbuka di dalam frame baru di konsolGoogle Cloud dan menampilkan perintah command line.
Membuat dan mengaktifkan lingkungan virtual Python:
python3 -m venv ray-env source ray-env/bin/activateInstal Ray CLI dan dependensi lainnya:
pip install "ray[default]==2.49.1"Tetapkan variabel lingkungan berikut:
export PROJECT_ID=$(gcloud config get project) export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)") export GS_BUCKET=GS_BUCKET export KSA_NAME=KSA_NAME export NAMESPACE=default export CLUSTER_NAME=CLUSTER_NAME export REGION=REGION export ZONE=ZONE export ARTIFACT_REGISTRY=ARTIFACT_REGISTRYGanti kode berikut:
GS_BUCKET: nama bucket Cloud Storage.KSA_NAME: nama Akun Layanan Kubernetes.CLUSTER_NAME: nama cluster baru.REGION: region tempat kapasitas TPU Trillium Anda tersedia.ZONE: zona tempat kapasitas TPU Trillium Anda tersedia. Untuk mengetahui informasi selengkapnya, lihat Ketersediaan TPU di GKE.ARTIFACT_REGISTRY: nama repositori Artifact Registry.
Membuat cluster GKE
Anda dapat mengonfigurasi KubeRay di TPU dalam cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk mendapatkan pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai untuk workload Anda, lihat Tentang mode operasi GKE.
Autopilot
Jalankan perintah berikut di Cloud Shell:
gcloud container clusters create-auto $CLUSTER_NAME \ --enable-ray-operator \ --machine-type=n1-standard-16 \ --location=$REGIONUntuk berkomunikasi dengan cluster Anda, konfigurasi
kubectl:gcloud container clusters get-credentials CLUSTER_NAME \ --location=$ZONE
Standar
Di Cloud Shell, buat cluster Standard yang mengaktifkan add-on Ray operator dengan menjalankan perintah berikut:
gcloud container clusters create $CLUSTER_NAME \ --addons=RayOperator \ --addons GcsFuseCsiDriver \ --machine-type=n1-standard-16 \ --workload-pool=$PROJECT_ID.svc.id.goog \ --location=$ZONEPerintah ini juga mengaktifkan
GcsFuseCsiDriver, yang memungkinkan Pod memasang bucket Cloud Storage sebagai sistem file lokal. Pembuatan cluster mungkin memerlukan waktu beberapa menit.Untuk berkomunikasi dengan cluster Anda, konfigurasi
kubectl:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATIONBuat node pool slice TPU multi-host:
gcloud container node-pools create v6e-16 \ --location=$ZONE \ --cluster=$CLUSTER_NAME \ --machine-type=ct6e-standard-4t \ --threads-per-core=1 \ --tpu-topology=4x4 \ --num-nodes=4
GKE menyediakan node pool yang terdiri dari empat VM TPU Trillium (v6e), yang dikonfigurasi bersama sebagai slice TPU multi-host, dengan topologi 4x4, yang siap untuk workload pelatihan terdistribusi.
Cluster GKE yang mendukung operator Ray akan otomatis menginstal KubeRay dan webhook TPU KubeRay di cluster Anda.
Mengonfigurasi bucket Cloud Storage dan akun layanan
Buat bucket Cloud Storage untuk checkpoint bersama antara node TPU multi-host.
gsutil mb -p ${PROJECT_ID} -c STANDARD -l ${REGION} gs://${GS_BUCKET}Untuk mengaktifkan akses ke bucket Cloud Storage, buat Akun Layanan Kubernetes:
kubectl create serviceaccount ${KSA_NAME} --namespace ${NAMESPACE}Untuk mengaktifkan akses ke bucket Cloud Storage, tambahkan binding kebijakan IAM yang diperlukan ke akun layanan:
gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET} \ --member "principal://iam.googleapis.com/projects/${PROJECT_NUMBER}/locations/global/workloadIdentityPools/${PROJECT_ID}.svc.id.goog/subject/ns/${NAMESPACE}/sa/${KSA_NAME}" \ --role "roles/storage.objectUser"
Membuat skrip pelatihan
Skrip berikut menggunakan JaxTrainer Ray Train untuk menjalankan tugas pelatihan MaxText terdistribusi. Skrip mengonfigurasi lingkungan pelatihan untuk node pool slice TPU multi-host dan menjalankan tugas pelatihan MaxText di setiap node pekerja. Fungsi
train_loop_per_worker membungkus titik entri utama MaxText, dan menggunakan
penjadwal terdistribusi Ray untuk menjalankan pelatih MaxText pada slice TPU multi-host.
Simpan skrip Python berikut sebagai
maxtext_ray_trainer.py:Untuk menghosting image kustom, buat repositori Artifact Registry:
gcloud artifacts repositories create ${ARTIFACT_REGISTRY} \ --repository-format=docker --location=${REGION} && \ gcloud auth configure-docker ${REGION}-docker.pkg.devUntuk membuat image yang menyertakan dependensi Ray dan MaxText untuk pelatihan, buat
Dockerfile:Bangun, beri tag, dan kirim image Docker ke Artifact Registry:
export DOCKER_IMAGE=${REGION}-docker.pkg.dev/${PROJECT_ID}/${ARTIFACT_REGISTRY}/ray-maxtext:latest gcloud builds submit --tag ${DOCKER_IMAGE}
Melatih model
Simpan manifes contoh berikut sebagai
maxtext-tpu-cluster.yaml:Spesifikasi RayCluster sebelumnya membuat grup pekerja TPU dengan empat pekerja (
numOfHosts: 4) per replika. Setiap pekerja meminta empat chip TPU (google.com/tpu: "4"). Pekerja akan dijadwalkan di node yang menjalankan TPU Trillium (tpu-v6e-slice), dan merupakan bagian dari slice multi-host yang sama dan diletakkan bersama. KubeRay menskalakan keempat pekerja secara atomik, dan variabel lingkungan JAX yang diperlukan, serta Afinitas Pod untuk penjadwalan, di-bootstrap oleh GKE melalui webhook mutasi.Untuk mengonfigurasi nilai yang diperlukan dalam file YAML, buat RayCluster menggunakan
envsubst:envsubst < maxtext-tpu-cluster.yaml | kubectl apply -f -Pastikan cluster sudah siap dan berjalan:
kubectl get rayclusters maxtext-tpu-clusterOutputnya akan mirip dengan berikut ini:
NAME DESIRED WORKERS AVAILABLE WORKERS CPUS MEMORY GPUS STATUS AGE maxtext-tpu-cluster 4 4 40 798027216Ki 0 ready 11mUntuk mengakses Dasbor Ray melalui layanan head Ray, buat sesi penerusan port:
kubectl port-forward svc/maxtext-tpu-cluster-head-svc 8265:8265 2>&1 >/dev/null &Verifikasi bahwa RayCluster dapat dijangkau dari lingkungan lokal Anda:
ray list nodes --address http://localhost:8265Outputnya akan mirip dengan berikut ini:
======== List: 2025-09-13 03:53:16.988269 ======== Stats: ------------------------------ Total: 5 Table: ------------------------------ NODE_ID NODE_IP IS_HEAD_NODE STATE STATE_MESSAGE NODE_NAME RESOURCES_TOTAL LABELS 0 92c79d04c34b659c1e3044f7642ad3fd47eb16f290785237149fab56 10.84.0.9 (...)Kirimkan skrip JaxTrainer ke RayCluster dan periksa apakah RayJob berhasil diselesaikan:
ray job submit \ --address http://localhost:8265 \ -- python /app/maxtext_ray_trainer.py \ /app/maxtext/src/MaxText/configs/base.yml \ base_output_directory=/data/ \ dataset_type=synthetic \ per_device_batch_size=1 \ max_target_length=4096 \ model_name=llama3-8b \ steps=100 \ ici_fsdp_parallelism=4 \ ici_tensor_parallelism=4 \ run_name=rayjob-8b-4096-tp4-4x4Perintah sebelumnya mengirimkan skrip Python, yang memanggil kode JaxTrainer Ray ke RayCluster. Perintah
ray job submitmenyertakan beberapa argumen khusus MaxText untuk diteruskan ke konfigurasi model.Di terminal, Anda akan melihat output yang mirip dengan berikut ini:
(RayTrainWorker pid=21663, ip=10.12.3.6) completed step: 99, seconds: 1.100, TFLOP/s/device: 179.739, Tokens/s/device: 3725.218, total_weights: 65536, loss: 0.000 [repeated 3x across cluster] ------------------------------------------ Job 'raysubmit_zCrJcWnuymMQv4C3' succeeded ------------------------------------------
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Hapus RayCluster:
kubectl delete raycluster maxtext-tpu-clusterHapus cluster GKE:
gcloud container clusters delete $CLUSTER_NAME --zone=$ZONEHapus bucket Cloud Storage:
gsutil rm -r gs://${GS_BUCKET}Hapus repositori Artifact Registry:
gcloud artifacts repositories delete ${ARTIFACT_REGISTRY} --location=${REGION} --quiet
Langkah berikutnya
- Pelajari Ray di Kubernetes.
- Pelajari cara Menyajikan vLLM di GKE dengan TPU.
- Pelajari cara Menyajikan SDXL di GKE dengan TPU.
- Pelajari lebih lanjut Tentang TPU di GKE.