Tutorial ini memandu Anda men-deploy layanan inferensi TPU multi-host menggunakan Ray Serve LLM. Dengan memanfaatkan dukungan TPU native Ray untuk secara atomik menjadwalkan bersama worker mesin terdistribusi di seluruh topologi akselerator yang kompleks, Anda dapat men-deploy model besar melalui slice TPU multi-host untuk inferensi.
Tutorial ini ditujukan untuk engineer Machine Learning (ML), admin dan operator Platform, serta spesialis Data dan AI yang tertarik untuk menggunakan kemampuan orkestrasi container Kubernetes untuk menyajikan workload AI/ML pada slice TPU multi-host terdistribusi. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang dirujuk dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Sebelum membaca halaman ini, pastikan Anda memahami hal-hal berikut:
Latar belakang
Bagian ini menjelaskan teknologi utama yang digunakan dalam panduan ini.
TPU
Tensor Processing Unit (TPU) memungkinkan Anda mempercepat workload tertentu yang berjalan di node, seperti machine learning dan pemrosesan data. Keuntungan utama TPU adalah performa dalam skala besar. Tutorial ini menggunakan TPU Trillium, generasi keenam Cloud TPU. Slice TPU multi-host terdiri dari beberapa node fisik yang berkomunikasi menggunakan interkoneksi antar-chip (ICI) berkecepatan tinggi, yang berfungsi baik untuk penayangan dengan throughput tinggi dan latensi rendah.
vLLM di Ray
vLLM adalah mesin penyajian LLM dengan throughput tinggi dan efisien memori. Dengan berintegrasi dengan Ray Serve, vLLM dapat menskalakan di beberapa host dan mengakses topologi hardware fisik secara native. Tutorial ini menunjukkan penggunaan deployment LLMConfig dan LLMServer Ray Serve untuk mengorkestrasi inferensi vLLM di seluruh slice multi-host, sehingga framework dapat menangani distribusi topologi dan penyebaran grup penempatan secara otomatis.
Tujuan
Tutorial ini memberikan dasar untuk memahami dan menjelajahi deployment LLM praktis untuk inferensi di lingkungan Kubernetes terkelola yang menggunakan TPU multi-host.
- Siapkan lingkungan Anda dengan cluster GKE dalam mode Autopilot atau Standard.
- Bangun image container kustom dengan dependensi bawaan.
- Deploy skrip Python Ray LLM ke cluster Anda untuk mengatur inferensi vLLM melalui slice TPU.
- Gunakan Ray LLM untuk menyajikan model Gemma 4 melalui
curldan antarmuka chat web opsional.
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 perintah
gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.
- Pastikan project Anda memiliki kuota yang cukup untuk kapasitas TPU Trillium (v6e) di region yang Anda pilih. Untuk mengetahui informasi selengkapnya, lihat kuota Cloud TPU.
- Pastikan cluster GKE Anda menggunakan GKE Dataplane V2 dan memenuhi persyaratan versi untuk DRANET: 1.35.2-gke.1842000 atau yang lebih baru untuk Standard dan Autopilot.
- Pastikan Anda memiliki peran IAM berikut:
roles/container.adminroles/iam.serviceAccountAdmin
Menyiapkan lingkungan Anda
Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal dengan software yang Anda perlukan untuk tutorial ini, termasuk kubectl dan gcloud CLI.
Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:
Di konsol Google Cloud , luncurkan sesi Cloud Shell dengan mengklik Activate Cloud Shell
. Tindakan ini akan meluncurkan sesi di panel bawah konsol Google Cloud .Membuat dan mengaktifkan lingkungan virtual Python:
python3 -m venv ray-env source ray-env/bin/activateInstal Ray CLI:
pip install "ray"Tetapkan variabel lingkungan default:
export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=ray-llm-cluster export REGION=REGION export ZONE=ZONE export NAMESPACE=default export KSA_NAME=ray-ksa export GSA_NAME=tpu-reader-sa export NETWORK_NAME=${CLUSTER_NAME}-net export GS_BUCKET=BUCKET_NAME export REPO_NAME=ray-repo export CUSTOM_IMAGE_URI=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/vllm-tpu-ray:vllm-tpuGanti kode berikut:
PROJECT_ID: Google Cloud Project ID Anda.CLUSTER_NAME: nama cluster Anda.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.REPOSITORY: nama repositori Artifact Registry Anda.BUCKET_NAME: nama bucket penyimpanan Anda.
Membuat dan mengonfigurasi resource Google Cloud
Ikuti petunjuk berikut untuk membuat resource yang diperlukan.
Membuat cluster GKE dan node pool
Anda dapat menayangkan Gemma di TPU dalam cluster GKE Autopilot atau Standard. DRANET yang dikelola GKE secara dinamis meminta dan mengelola resource jaringan berperforma tinggi untuk Pod terdistribusi Anda, sehingga GKE dapat otomatis menyediakan jaringan berkecepatan tinggi sekunder untuk komunikasi antar-akselerator tanpa memerlukan penyiapan VPC manual.
Autopilot
Di Cloud Shell, buat cluster Autopilot:
gcloud container clusters create-auto ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --enable-ray-operator \ --location=${REGION}Konfigurasi
kubectluntuk berkomunikasi dengan cluster Anda:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${REGION}Untuk menggunakan DRANET yang dikelola GKE dalam mode Autopilot, deploy resource ComputeClass kustom yang disediakan di repositori untuk memilih ikut serta dalam jaringan dinamis:
Terapkan manifes ke cluster Anda:
kubectl apply -f ai-ml/gke-ray/rayserve/llm/tpu/networking/dranet-compute-class.yaml
Standar
Di Cloud Shell, buat cluster Standard yang mengaktifkan operator Ray dan menggunakan GKE Dataplane V2:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --addons=RayOperator,GcsFuseCsiDriver \ --machine-type=n2-standard-8 \ --enable-dataplane-v2 \ --workload-pool=${PROJECT_ID}.svc.id.goog \ --location=${ZONE}Buat node pool slice TPU multi-host dengan driver DRANET diaktifkan:
gcloud container node-pools create v6e-16 \ --location=${ZONE} \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --tpu-topology=4x4 \ --num-nodes=4 \ --enable-gvnic \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --accelerator-network-profile=auto \ --node-labels=cloud.google.com/gke-networking-dra-driver=true
Mengonfigurasi penyimpanan dan autentikasi
Buat bucket Cloud Storage dan inisialisasi instance Rapid Cache untuk mempercepat pemuatan model, lalu konfigurasi autentikasi untuk Hugging Face:
Di zona TPU Anda, buat bucket penyimpanan dan lakukan inisialisasi instance Rapid Cache:
gcloud storage buckets create gs://${GS_BUCKET} --project=${PROJECT_ID} --default-storage-class=STANDARD --location=${REGION} gcloud storage buckets anywhere-caches create gs://${GS_BUCKET} ${ZONE} \ --ttl=1d \ --admission-policy=ADMIT_ON_FIRST_MISSKonfigurasi penautan identitas untuk membantu memasang bucket berat ke Pod GKE Anda secara aman. Pertama, buat akun layanan IAM khusus dan berikan izin baca bucket:
gcloud iam service-accounts create ${GSA_NAME} gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET} \ --member="serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"Buat binding Workload Identity Federation for GKE dan beri anotasi pada objek ServiceAccount Kubernetes:
gcloud iam service-accounts add-iam-policy-binding ${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[${NAMESPACE}/${KSA_NAME}]" kubectl create serviceaccount ${KSA_NAME} --namespace ${NAMESPACE} kubectl annotate serviceaccount ${KSA_NAME} --namespace ${NAMESPACE} iam.gke.io/gcp-service-account=${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.comUntuk mendownload bobot model Gemma 4, Anda harus menyetujui perjanjian lisensi Google di Hugging Face. Buka halaman model Gemma 4 di Hugging Face.
Login dan setujui persyaratan lisensi dengan mengklik Setuju dan akses repositori.
Buka setelan akun Hugging Face Anda dan buat Token Akses dengan peran
Read.Ekspor token Hugging Face Anda dan buat secret Kubernetes agar Ray dapat menarik bobot model:
export HF_TOKEN=YOUR_HUGGING_FACE_TOKEN kubectl create secret generic hf-secret \ --from-literal=hf_api_token=${HF_TOKEN}
Membangun image container kustom
Untuk memastikan lingkungan multi-host memiliki semua dependensi yang diperlukan, buat image kustom berdasarkan image TPU vLLM dan salin skrip penayangan Anda ke dalamnya.
Buat repositori Artifact Registry:
gcloud artifacts repositories create ${REPO_NAME} \ --repository-format=docker \ --location=${REGION}Lakukan autentikasi Docker ke project Anda:
gcloud auth configure-docker ${REGION}-docker.pkg.devPeriksa
Dockerfiledi repositori contoh:Bangun dan kirim image ke Artifact Registry:
docker build -t ${CUSTOM_IMAGE_URI} . docker push ${CUSTOM_IMAGE_URI}
Menyiapkan bobot model ke Cloud Storage
Sebelum men-deploy RayCluster, optimalkan performa pemuatan model dan bantu memastikan ketersediaan tinggi di seluruh slice TPU terdistribusi dengan melakukan pra-penyusunan bobot model langsung di bucket Cloud Storage menggunakan Job Kubernetes mandiri. Pendekatan yang tidak terkait ini memungkinkan streaming paralel yang terkoordinasi, sehingga mempercepat waktu mulai cluster.
Manifes untuk tugas downloader tersedia di repositori. Tinjau konfigurasi manifes:
Buat tugas downloader dengan menerapkan file di repositori:
envsubst < ai-ml/gke-ray/rayserve/llm/tpu/components/model-downloader-job.yaml | kubectl apply -f -Pantau tugas hingga aliran download melaporkan keberhasilan:
kubectl logs -f job/model-downloader
Buat skrip inferensi
Skrip Python berikut menentukan aplikasi Ray Serve yang didukung oleh wrapper LLMConfig tingkat tinggi Ray Serve.
Periksa skrip
serve_tpu_multihost.pydi repositori contoh:
Memahami Ray LLM API
Skrip ini memanfaatkan library ray.serve.llm bawaan Ray Serve untuk menghilangkan kerumitan orkestrasi TPU multi-host. Dengan membungkus mesin vLLM, Ray Serve LLM menyediakan framework berperforma tinggi dan skalabel yang dirancang khusus untuk workload inferensi yang sangat terdistribusi dalam produksi.
Penggunaan Ray LLM API memberikan beberapa manfaat utama:
- Deployment multi-node: Ray Serve LLM memungkinkan pengguna menyajikan model besar yang mencakup beberapa host terdistribusi (seperti slice multi-host TPU) dengan penempatan, koordinasi, dan distribusi topologi otomatis secara native.
- Kompatibilitas vLLM: Ray Serve LLM menyediakan API yang kompatibel dengan OpenAI yang selaras dengan server vLLM. Anda juga dapat mengakses serangkaian fitur canggih vLLM (seperti output terstruktur, kemampuan multimodal, dan model penalaran) sambil menskalakan workload di seluruh cluster Kubernetes Anda.
- Fitur siap produksi: Ray Serve LLM mencakup kemampuan tingkat perusahaan seperti penskalaan otomatis bawaan, perutean permintaan kustom untuk memaksimalkan hit cache, dan integrasi bawaan untuk metrik dan kemampuan observasi.
Dalam skrip inferensi yang disediakan, deployment ditentukan oleh dua komponen utama:
LLMConfig: objek ini menentukan konfigurasi penayangan. Objek ini menentukan sumber model, parameter mesin untuk vLLM, danaccelerator_config. Dengan menyetel{"kind": "tpu", "topology": "4x4"}, Ray Serve LLM akan otomatis menyediakan grup penempatan terdistribusi yang dipetakan secara persis ke slice TPU v6e 16 chip fisik Anda.build_openai_app: API ini secara otomatis membungkus mesin vLLM yang dikonfigurasi dalam server FastAPI yang kompatibel dengan OpenAI, sehingga Anda mendapatkan REST API standar industri (seperti/v1/chat/completions) langsung tanpa menulis kode server kustom.
Men-deploy RayService
Deploy konfigurasi jaringan Alokasi Resource Dinamis (DRA) dan manifes penayangan RayService:
Minta semua antarmuka NetDevice yang tersedia di setiap node dengan men-deploy
ResourceClaimTemplateyang disediakan di repositori:Terapkan manifes template ke cluster Anda:
kubectl apply -f ai-ml/gke-ray/rayserve/llm/tpu/networking/all-netdev-template.yamlManifes penayangan
RayServicetersedia di repositori. Tinjau konfigurasi manifes:Deploy layanan menggunakan manifes:
Autopilot
Untuk men-deploy layanan di cluster Autopilot, Anda harus mendownload manifes terlebih dahulu dan mengeditnya secara lokal untuk menambahkan
ComputeClassnodeSelectoryang diperlukan untuk jaringan DRANET di Autopilot:curl -O https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/ai-ml/gke-ray/rayserve/llm/tpu/ray-service.tpu-v6e-multihost.yamlTambahkan label di kolom
nodeSelectorsehingga terlihat seperti ini:nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu-v6e-slice cloud.google.com/gke-tpu-topology: 4x4 cloud.google.com/compute-class: dranet-compute-classKemudian, deploy layanan menggunakan manifes lokal yang telah diubah:
envsubst < ray-service.tpu-v6e-multihost.yaml | kubectl apply -f -
Standar
Untuk men-deploy layanan di cluster Standard, deploy manifes langsung dari repositori:
envsubst < ai-ml/gke-ray/rayserve/llm/tpu/ray-service.tpu-v6e-multihost.yaml | kubectl apply -f -
Verifikasi
Tunggu hingga RayService tersedia:
kubectl wait --for=condition=Ready --timeout=1800s rayservice/vllm-tpu-multihostUntuk mengonfirmasi bahwa model berhasil dimuat, lihat log dari Pod head Ray:
kubectl logs -f -l ray.io/node-type=head -c ray-head
Menyajikan model
Di bagian ini, Anda berinteraksi dengan model. Pastikan model didownload sepenuhnya sebelum melanjutkan.
Menyiapkan penerusan port
Siapkan penerusan port ke model dengan menjalankan perintah berikut:
kubectl port-forward svc/vllm-tpu-multihost-head-svc 8000:8000 2>&1 >/dev/null &
Berinteraksi dengan model menggunakan curl
Bagian ini menunjukkan cara melakukan pengujian dasar untuk memverifikasi model Gemma 4 yang di-deploy.
Dalam sesi terminal baru, gunakan curl untuk memulai percakapan dengan model Anda:
curl -X POST http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-4-31B-it",
"messages": [
{
"role": "user",
"content": "Why is GKE managed DRANET preferred for multi-host TPU networking?"
}
],
"max_tokens": 256
}'
Outputnya akan terlihat mirip seperti berikut:
{
"id": "chatcmpl-392692d3-5325-4832-a3a3-0b084c1045b0",
"object": "chat.completion",
"created": 1779883255,
"model": "google/gemma-4-31B-it",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "To understand why GKE-managed **DRANET** (Distributed RANET) is preferred for multi-host TPU networking, it is first necessary to understand the fundamental challenge of TPU pods: **the need for massive, low-latency, all-to-all communication.**\n\nWhen you scale a model across multiple TPU hosts (multi-host), the hosts must synchronize gradients and weights constantly. Standard TCP/IP networking introduces too much overhead (latency and CPU jitter) for these operations.\n\nHere is the detailed breakdown of why GKE-managed DRANET is the preferred architecture:\n\n### 1. Bypassing the Kernel (Zero-Copy Networking)\nStandard networking requires the operating system kernel to handle packets, moving data from the network card to kernel space and then to user space.\n* **The DRANET Advantage:** DRANET implements a specialized networking stack that allows for **Kernel Bypass**. It enables the TPU hardware/drivers to write data directly into the memory of the destination host. This reduces latency and eliminates the CPU overhead associated with processing network interrupts.\n\n### 2. High-Bandwidth, Low-Latency Interconnect\nMulti-host TPU training relies on a specialized topology (like a 2D or 3D"
},
"finish_reason": "length"
}
]
}
(Opsional) Berinteraksi dengan model melalui antarmuka chat Gradio
Di bagian ini, Anda akan membuat aplikasi chat web yang memungkinkan Anda berinteraksi dengan model yang dioptimalkan untuk mengikuti perintah.
Gradio adalah library Python yang memiliki wrapper ChatInterface yang membuat antarmuka pengguna untuk chatbot.
Men-deploy antarmuka chat
Manifes untuk antarmuka chat tersedia di repositori. Tinjau konfigurasi manifes:
Terapkan manifes:
kubectl apply -f ai-ml/gke-ray/rayserve/llm/tpu/components/gradio.yaml
Tunggu hingga deployment tersedia:
kubectl wait --for=condition=Available --timeout=900s deployment/gradio
Menggunakan antarmuka chat
Jalankan perintah berikut di Cloud Shell:
kubectl port-forward service/gradio 8080:8080
Tindakan ini akan membuat penerusan port dari Cloud Shell ke layanan Gradio.
Klik ikon Web Preview
yang dapat ditemukan di kanan atas taskbar Cloud Shell. Klik Preview on Port 8080. Tab baru akan terbuka di browser Anda.
Berinteraksi dengan Gemma menggunakan antarmuka chat Gradio. Tambahkan perintah, lalu klik Kirim.
Mengamati performa model
Untuk melihat dasbor metrik kemampuan pengamatan model yang berjalan di KubeRay, Anda dapat menggunakan dasbor khusus Ray di GKE.
Untuk mengetahui petunjuk mendetail tentang cara mengonfigurasi cluster dan mengakses dasbor keamat-amatan, lihat Mengumpulkan dan melihat log dan metrik untuk RayCluster di Google Kubernetes Engine (GKE).
Mengakses Dasbor Ray
Untuk memeriksa status aktor Ray, melihat log aplikasi mendetail, dan memantau penggunaan tingkat node secara native di Ray, Anda dapat mengakses Dasbor Ray.
Teruskan port layanan head node Ray ke mesin lokal Anda:
kubectl port-forward svc/vllm-tpu-multihost-head-svc 8265:8265Buka browser Anda, lalu buka
http://localhost:8265. Jika Anda menggunakan Cloud Shell, klik tombol Web Preview dan pilih Preview on port 8265.Untuk melihat deployment vLLM, kondisi replika model, dan latensi kueri, klik tab Serve.
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus resource tersebut:
Hapus RayService:
kubectl delete rayservice vllm-tpu-multihostHapus cluster GKE:
gcloud container clusters delete ${CLUSTER_NAME} --zone=${ZONE}
Langkah berikutnya
- Pelajari Ray di Kubernetes.
- Pelajari cara menyajikan vLLM di GKE dengan TPU.
- Pelajari lebih lanjut TPU di GKE.