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 dan menyeluruh, mulai dari mengonfigurasi infrastruktur cloud yang diperlukan hingga mengirim dan berhasil menjalankan workload pelatihan di TPU multi-host.
Tutorial ini ditujukan untuk admin dan operator Platform serta spesialis Data dan AI yang ingin mempelajari cara melatih model besar di slice TPU multi-host terdistribusi.
Latar belakang
Kombinasi GKE, KubeRay, MaxText, dan TPU menyediakan platform yang andal 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 berskala besar.
JAX menyediakan sistem yang dapat diperluas untuk mengubah fungsi numerik seperti jax.grad, jax.jit, dan jax.vmap, menggunakan compiler XLA untuk membuat kode yang sangat dioptimalkan dan dapat diskalakan secara efisien di akselerator seperti GPU dan TPU. Kekuatan inti JAX terletak pada kemampuannya untuk digabungkan, yang memungkinkan pengguna menggabungkan transformasi ini untuk membuat 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 dibangun di atas JAX dan dioptimalkan untuk berjalan secara efisien di Cloud TPU dan GPU.
TPU
Tensor Processing Unit (TPU) adalah akselerator yang dirancang khusus dan dibuat oleh Google untuk mengoptimalkan workload machine learning. Tidak seperti CPU tujuan umum atau GPU pemrosesan paralel, TPU sangat khusus untuk komputasi matriks dan tensor masif yang menjadi dasar deep learning, sehingga membuatnya efisien dalam tugas tertentu 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 cara melakukan hal berikut:
- Menyiapkan cluster GKE dengan node pool TPU multi-host.
- Mengonfigurasi KubeRay untuk mengelola lingkungan pelatihan terdistribusi.
- Membuat image Docker kustom yang berisi dependensi MaxText, Ray, dan JAX.
- Membuat skrip pelatihan Python yang menggunakan
JaxTrainerRay Train untuk mengatur loop pelatihan MaxText di seluruh slice TPU. - Menentukan resource kustom
RayClusteruntuk menyediakan node head dan pekerja dengan resource TPU yang diperlukan. - Mengirim Tugas pelatihan ke
RayClusterdan memantau progresnya. - Menggunakan Cloud Storage untuk menyimpan checkpoint model.
Sebelum memulai
- Login keakun Anda. Google Cloud 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 Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih 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 Pembuat Project
(
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 Google Cloud project yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama Google Cloud project Anda.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
Aktifkan API yang diperlukan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
cloudbuild.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 Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih 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 Pembuat Project
(
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 Google Cloud project yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama Google Cloud project Anda.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
Aktifkan API yang diperlukan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
cloudbuild.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/cloudbuild.builds.editorgcloud 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.
- 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 menggunakan Cloud Shell. Cloud Shell telah diinstal dengan alat command line gcloud, helm, dan kubectl yang digunakan dalam tutorial ini.
Buka Google Cloud konsol.
Di bagian atas jendela konsol, klik tombol Activate Cloud Shell
. Google Cloud Sesi Cloud Shell akan terbuka di dalam frame baru di Google Cloud konsol dan menampilkan prompt command line.
Buat dan aktifkan 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 Standar. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola 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 Standar yang mengaktifkan add-on operator Ray 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 mengaktifkan 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 ini mengonfigurasi lingkungan pelatihan untuk node pool slice TPU multi-host dan menjalankan tugas pelatihan MaxText di setiap node pekerja. Fungsi train_loop_per_worker menggabungkan titik entri utama MaxText, dan menggunakan penjadwal terdistribusi Ray untuk menjalankan pelatih MaxText di 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:Buat, 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. KubeRay menskalakan keempat pekerja secara atomik, dan variabel lingkungan JAX yang diperlukan, serta Afinitas Pod untuk penjadwalan, di-bootstrap oleh GKE melalui webhook yang berubah.Untuk mengonfigurasi nilai yang diperlukan dalam file YAML, buat RayCluster menggunakan
envsubst:envsubst < maxtext-tpu-cluster.yaml | kubectl apply -f -Verifikasi bahwa 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 (...)Kirim 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 Ray JaxTrainer 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 tidak perlu membayar biaya pada Google Cloud akun Anda 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.