Tutorial ini menunjukkan cara mengonfigurasi KubeRay dengan TPU Trillium di Google Kubernetes Engine (GKE). Pelajari cara menyiapkan konfigurasi TPU host tunggal dan multi-host, termasuk variabel lingkungan dan spesifikasi Pod yang diperlukan untuk TPU Trillium.
Tutorial ini ditujukan bagi admin dan operator Platform serta spesialis Data dan AI yang ingin mempelajari cara mengonfigurasi inisialisasi TPU Trillium dengan KubeRay untuk node pool host tunggal dan multi-host. Tutorial ini menunjukkan cara menjalankan skrip dengan Jax yang memverifikasi keberhasilan inisialisasi TPU. Tutorial ini tidak men-deploy model.
Sebelum mengonfigurasi KubeRay di GKE, pastikan Anda memahami definisi dan terminologi Ray di GKE.
Ringkasan
Tutorial ini menunjukkan cara menjalankan skrip Python dengan Jax yang memverifikasi bahwa inisialisasi TPU Trillium dengan KubeRay berhasil. Jax adalah library komputasi numerik berperforma tinggi yang mendukung beban kerja machine learning. KubeRay adalah operator Kubernetes yang menyediakan cara terpadu untuk men-deploy, mengelola, dan memantau aplikasi Ray di Kubernetes.
TPU Trillium (v6e) memerlukan variabel lingkungan dan spesifikasi Pod tertentu yang berbeda dari generasi TPU sebelumnya. Tutorial ini memberikan konfigurasi yang diperlukan untuk berhasil men-deploy beban kerja dengan KubeRay di TPU Trillium.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:
- Aktifkan Google Kubernetes Engine API. Aktifkan Google Kubernetes Engine API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
- Pastikan Anda telah menginstal Ray CLI (versi 2.37.0).
Mengaktifkan Cloud Shell
Cloud Shell telah diinstal dengan alat command line gcloud
, helm
, dan kubectl
yang digunakan dalam tutorial ini.
- Buka Google Cloud console.
Di bagian atas jendela konsol Google Cloud , klik tombol Activate Cloud Shell
.
Sesi Cloud Shell akan terbuka di dalam frame baru di konsol Google Cloud dan menampilkan perintah command line.
Membuat cluster dan node pool GKE
Anda dapat mengonfigurasi KubeRay di TPU dalam cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk 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 \ --release-channel=rapid \ --location=LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.LOCATION
: region tempat kapasitas TPU Trillium Anda tersedia. Untuk mengetahui informasi selengkapnya, lihat Ketersediaan TPU di GKE.
GKE membuat cluster Autopilot dengan add-on operator Ray yang diaktifkan. Add-on ini otomatis menginstal webhook TPU Ray di bidang kontrol cluster.
Untuk berkomunikasi dengan cluster Anda, konfigurasi
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME --location=LOCATION
Standar
Di Cloud Shell, buat cluster Standard yang mengaktifkan add-on operator Ray dengan menjalankan perintah berikut :
gcloud container clusters create CLUSTER_NAME \ --location LOCATION \ --addons=RayOperator \ --cluster-version=1.33 \ --machine-type=n1-standard-16
Ganti kode berikut:
CLUSTER_NAME
: nama cluster baru.LOCATION
: region tempat kapasitas TPU Trillium Anda tersedia. Untuk mengetahui informasi selengkapnya, lihat Ketersediaan TPU di GKE.
Pembuatan cluster mungkin memerlukan waktu beberapa menit.
Untuk berkomunikasi dengan cluster Anda, konfigurasi
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME --location=LOCATION
Anda dapat membuat node pool slice TPU host tunggal atau multi-host:
Host tunggal
Jalankan perintah berikut di Cloud Shell:
gcloud container node-pools create v6e-4 \
--location=us-central2-b \
--cluster=CLUSTER_NAME \
--machine-type=ct6e-standard-4t \
--num-nodes=1 \
--threads-per-core=1 \
--tpu-topology=2x2
Multi-host
Jalankan perintah berikut di Cloud Shell:
gcloud container node-pools create v6e-16 \
--location=us-central2-b \
--cluster=CLUSTER_NAME \
--machine-type=ct6e-standard-4t \
--num-nodes=4 \
--threads-per-core=1 \
--tpu-topology=4x4
Menjalankan resource kustom RayJob
Dengan menentukan manifes RayJob, Anda menginstruksikan KubeRay untuk melakukan hal berikut:
- Buat RayCluster: spesifikasi RayJob mencakup
rayClusterSpec
yang menentukan konfigurasi cluster Ray (grup head dan worker) yang Anda inginkan. - Menjalankan Job tertentu: kolom
entrypoint
dalam RayJob menentukan perintah atau skrip yang akan dieksekusi dalam cluster Ray yang dibuat. Dalam tutorial ini,entrypoint
adalah skrip Python (tpu_list_devices.py
) yang dirancang untuk memverifikasi inisialisasi TPU Trillium.
Untuk membuat resource kustom RayJob, selesaikan langkah-langkah berikut:
Host tunggal
Buat manifes
ray-job.tpu-v6e-singlehost.yaml
berikut:Terapkan manifes:
kubectl apply -f ray-job.tpu-v6e-singlehost.yaml
Pastikan RayJob dibuat dan berjalan:
kubectl get rayjobs v6e-4-job
Outputnya mirip dengan hal berikut ini:
NAME JOB STATUS DEPLOYMENT STATUS RAY CLUSTER NAME START TIME END TIME AGE v6e-4-job PENDING Running v6e-4-job-raycluster 2024-10-15T23:15:22Z 20s
Cetak output RayJob.
kubectl logs -l=job-name=v6e-4-job
Outputnya mirip dengan hal berikut ini:
2024-10-15 16:15:40,222 INFO cli.py:300 -- ray job stop v6e-4-job-hzq5q 2024-10-15 16:15:40,246 INFO cli.py:307 -- Tailing logs until the job exits (disable with --no-wait): 2024-10-15 16:15:40,112 INFO job_manager.py:528 -- Runtime env is setting up. 2024-10-15 16:15:50,181 INFO worker.py:1461 -- Using address 10.84.1.25:6379 set in the environment variable RAY_ADDRESS 2024-10-15 16:15:50,181 INFO worker.py:1601 -- Connecting to existing Ray cluster at address: 10.84.1.25:6379... 2024-10-15 16:15:50,186 INFO worker.py:1777 -- Connected to Ray cluster. View the dashboard at 10.84.1.25:8265 ['TPU cores:4'] 2024-10-15 16:16:12,349 SUCC cli.py:63 -- ------------------------------------- 2024-10-15 16:16:12,349 SUCC cli.py:64 -- Job 'v6e-4-job-hzq5q' succeeded 2024-10-15 16:16:12,349 SUCC cli.py:65 -- -------------------------------------
Multi-host
Buat manifes
ray-job.tpu-v6e-multihost.yaml
berikut:Terapkan manifes:
kubectl apply -f ray-job.tpu-v6e-multihost.yaml
Verifikasi bahwa v6e-16 RayJob dibuat dan berjalan:
kubectl get rayjobs v6e-16-job
Outputnya mirip dengan hal berikut ini:
NAME JOB STATUS DEPLOYMENT STATUS RAY CLUSTER NAME START TIME END TIME AGE v6e-16-job Running v6e-16-job-raycluster-qr6vk 2024-10-16T19:28:19Z 66s
Cetak output v6e-16 RayJob:
kubectl logs -l=job-name=v6e-16-job
Outputnya mirip dengan hal berikut ini:
2024-10-16 12:21:33,986 INFO cli.py:300 -- ray job stop v6e-16-job-z44s7 2024-10-16 12:21:34,011 INFO cli.py:307 -- Tailing logs until the job exits (disable with --no-wait): 2024-10-16 12:21:33,826 INFO job_manager.py:528 -- Runtime env is setting up. 2024-10-16 12:21:46,327 INFO worker.py:1461 -- Using address 10.84.1.61:6379 set in the environment variable RAY_ADDRESS 2024-10-16 12:21:46,327 INFO worker.py:1601 -- Connecting to existing Ray cluster at address: 10.84.1.61:6379... 2024-10-16 12:21:46,333 INFO worker.py:1777 -- Connected to Ray cluster. View the dashboard at 10.84.1.61:8265 ['TPU cores:16', 'TPU cores:16', 'TPU cores:16', 'TPU cores:16'] 2024-10-16 12:22:12,156 SUCC cli.py:63 -- --------------------------------- 2024-10-16 12:22:12,156 SUCC cli.py:64 -- Job 'v6e-16-job-z44s7' succeeded 2024-10-16 12:22:12,156 SUCC cli.py:65 -- ---------------------------------
Melihat RayJob di Dasbor Ray
Verifikasi bahwa GKE membuat layanan RayCluster, dan juga terhubung ke instance RayCluster.
Host tunggal
Ambil nama RayCluster yang dihasilkan untuk RayJob:
export RAYCLUSTER_NAME=$(kubectl get rayjob v6e-4-job -o jsonpath='{.status.rayClusterName}')
Ambil nama layanan head RayCluster:
export HEAD_SVC=$(kubectl get svc -l ray.io/cluster=$RAYCLUSTER_NAME,ray.io/node-type=head -o jsonpath='{.items[0].metadata.name}')
Hubungkan ke Dasbor Ray dengan meneruskan port layanan head:
kubectl port-forward svc/$HEAD_SVC 8265:8265 2>&1 >/dev/null &
Buka browser web dan masukkan URL berikut:
http://localhost:8265/#/jobs
Lihat status RayJob dan log yang relevan.
Multi-host
Ambil nama RayCluster yang dihasilkan untuk RayJob:
export RAYCLUSTER_NAME=$(kubectl get rayjob v6e-16-job -o jsonpath='{.status.rayClusterName}')
Ambil nama layanan head RayCluster:
export HEAD_SVC=$(kubectl get svc -l ray.io/cluster=$RAYCLUSTER_NAME,ray.io/node-type=head -o jsonpath='{.items[0].metadata.name}')
Hubungkan ke Dasbor Ray dengan meneruskan port layanan head:
kubectl port-forward svc/$HEAD_SVC 8265:8265 2>&1 >/dev/null &
Buka browser web dan masukkan URL berikut:
http://localhost:8265/#/jobs
Lihat status RayJob dan log yang relevan.
Ray menetapkan resource TPU-{accelerator}-Head
untuk mengidentifikasi node pekerja Ray yang
sesuai dengan nilai TPU_WORKER_ID=0
. Dalam grup TPU multi-host, node Ray dengan TPU_WORKER_ID=0
memiliki
TPU-v6e-16-head: 1.0
yang ditetapkan di resource-nya. Variabel lingkungan TPU_WORKER_ID
ini ditetapkan oleh webhook GKE yang mengubah untuk KubeRay.
Pembersihan
Setelah Anda menyelesaikan tutorial, untuk mencegah timbulnya biaya yang tidak diinginkan pada akun Anda, hapus RayJob:
Host tunggal
kubectl delete rayjobs v6e-4-job
Multi-host
kubectl delete rayjobs v6e-16-job
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.