Tutorial ini memandu Anda men-deploy layanan inferensi TPU multi-host menggunakan Ray Serve LLM. Dengan memanfaatkan dukungan TPU native Ray untuk menjadwalkan pekerja mesin terdistribusi secara atomik 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 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 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 dengan baik untuk inferensi ber-throughput tinggi dan latensi rendah.
vLLM di Ray
vLLM adalah mesin inferensi LLM yang ber-throughput tinggi dan hemat memori. Dengan berintegrasi dengan Ray Serve, vLLM dapat menskalakan di beberapa host dan mengakses topologi hardware fisik secara native. Tutorial ini menunjukkan cara menggunakan deployment LLMConfig dan LLMServer Ray Serve untuk mengatur 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 Standar.
- Buat 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 perintah yang dijalankan 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 Standar 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 sebelumnya 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 Google Cloud konsol, luncurkan sesi Cloud Shell dengan mengklik Activate Cloud Shell
. Tindakan ini akan meluncurkan sesi di panel bawah Google Cloud konsol.Buat dan aktifkan 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: ID project Anda Google Cloud .CLUSTER_NAME: nama cluster Anda.REGION: region tempat kapasitas TPU Trillium Anda tersedia.ZONE: zona tempat kapasitas TPU Trillium Anda tersedia. Untuk mengetahui informasi lebih lanjut, silakan melihat Ketersediaan TPU di GKE.REPOSITORY: nama repositori Artifact Registry Anda.BUCKET_NAME: nama bucket penyimpanan Anda.
Membuat dan mengonfigurasi Google Cloud resource
Ikuti petunjuk ini untuk membuat resource yang diperlukan.
Membuat cluster GKE dan node pool
Anda dapat menyajikan Gemma di TPU dalam cluster GKE Autopilot atau Standar. DRANET terkelola GKE secara dinamis meminta dan mengelola resource jaringan berperforma tinggi untuk Pod terdistribusi Anda, sehingga GKE dapat otomatis menyediakan jaringan sekunder berkecepatan tinggi 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 terkelola GKE dalam mode Autopilot, deploy resource ComputeClass kustom yang disediakan di repositori untuk 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 Standar 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 yang 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 lakukan 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 link identitas untuk membantu memasang bucket bobot dengan aman ke Pod GKE Anda. 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 Workload Identity Federation for GKE binding dan beri anotasi pada objek Kubernetes ServiceAccount:
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 Agree and access repository.
Buka setelan akun Hugging Face Anda dan buat Token Akses dengan peran
Read.Ekspor token Hugging Face Anda dan buat secret Kubernetes sehingga Ray dapat mengambil 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 inferensi Anda ke dalamnya.
Buat repositori Artifact Registry:
gcloud artifacts repositories create ${REPO_NAME} \ --repository-format=docker \ --location=${REGION}Autentikasi Docker ke project Anda:
gcloud auth configure-docker ${REGION}-docker.pkg.devPeriksa
Dockerfiledi repositori sampel: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 Anda dengan menyiapkan bobot model langsung di bucket Cloud Storage menggunakan Tugas Kubernetes mandiri. Pendekatan yang dipisahkan ini memungkinkan streaming paralel terkoordinasi, sehingga mempercepat waktu startup 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
Membuat 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 sampel:
Memahami Ray LLM API
Skrip ini memanfaatkan library ray.serve.llm native Ray Serve untuk mengabstraksi kompleksitas orkestrasi TPU multi-host. Dengan menggabungkan mesin vLLM, Ray Serve LLM menyediakan framework berperforma tinggi dan skalabel yang dirancang khusus untuk workload inferensi yang sangat terdistribusi dalam produksi.
Menggunakan 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 TPU multi-host) 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 kumpulan fitur lanjutan 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 hit cache yang dimaksimalkan, dan integrasi bawaan untuk metrik dan observabilitas.
Dalam skrip inferensi yang disediakan, deployment ditentukan oleh dua komponen utama:
LLMConfig: objek ini menentukan konfigurasi inferensi. Objek ini menentukan sumber model, parameter mesin untuk vLLM, danaccelerator_config. Dengan menetapkan{"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 otomatis menggabungkan mesin vLLM yang dikonfigurasi dalam server FastAPI yang kompatibel dengan OpenAI, sehingga memberi Anda REST API standar industri (seperti/v1/chat/completions) tanpa perlu menulis kode server kustom.
Men-deploy RayService
Deploy konfigurasi jaringan Alokasi Resource Dinamis (DRA) dan manifes inferensi 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 inferensi
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
nodeSelectorComputeClassyang ikut serta, yang 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 diubah:
envsubst < ray-service.tpu-v6e-multihost.yaml | kubectl apply -f -
Standar
Untuk men-deploy layanan di cluster Standar, 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 akan 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 melakukan chat 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 disesuaikan dengan petunjuk.
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 panel tugas Cloud Shell. Klik Preview on Port 8080. Tab baru akan terbuka di browser Anda.
Berinteraksi dengan Gemma menggunakan antarmuka chat Gradio. Tambahkan perintah dan klik Submit.
Mengamati performa model
Untuk melihat dasbor metrik observabilitas model yang berjalan di KubeRay, Anda dapat menggunakan dasbor Ray khusus di GKE.
Untuk mengetahui petunjuk mendetail tentang cara mengonfigurasi cluster dan mengakses dasbor observabilitas, 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 layanan node head Ray ke komputer lokal Anda:
kubectl port-forward svc/vllm-tpu-multihost-head-svc 8265:8265Buka browser Anda dan buka
http://localhost:8265. Jika Anda menggunakan Cloud Shell, klik tombol Web Preview dan pilih Preview on port 8265.Untuk melihat deployment vLLM, kesehatan 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 TPU lebih lanjut di GKE .