Halaman ini menjelaskan cara men-deploy GKE Inference Gateway.
Halaman ini ditujukan bagi spesialis Jaringan yang bertanggung jawab mengelola infrastruktur GKE dan administrator platform yang mengelola workload AI.
Sebelum membaca halaman ini, pastikan Anda memahami hal-hal berikut:
- Tentang GKE Inference Gateway
- Orkestrasi AI/ML di GKE.
- Glosarium AI generatif.
- Load balancing di Trusted Cloud, terutama cara load balancer berinteraksi dengan GKE.
- Ekstensi Layanan GKE. Untuk mengetahui informasi selengkapnya, baca dokumentasi pengontrol GKE Gateway.
- Menyesuaikan traffic GKE Gateway menggunakan Ekstensi Layanan.
GKE Inference Gateway meningkatkan kualitas Gateway Google Kubernetes Engine (GKE) untuk mengoptimalkan penayangan aplikasi dan workload AI generatif di GKE. Layanan ini menyediakan pengelolaan dan penskalaan workload AI yang efisien, memungkinkan tujuan performa khusus workload seperti latensi, dan meningkatkan pemanfaatan resource, kemampuan observasi, dan keamanan AI.
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
.
Aktifkan Compute Engine API, Network Services API, dan Model Armor API jika diperlukan.
Buka Aktifkan akses ke API dan ikuti petunjuknya.
Pastikan Anda memiliki peran berikut di project:
roles/container.admin
,roles/iam.serviceAccountAdmin
.Pastikan project Anda memiliki kuota yang cukup untuk GPU H100. Untuk mempelajari lebih lanjut, lihat Merencanakan kuota GPU dan Kuota alokasi.
Buat akun Hugging Face jika Anda belum memilikinya. Anda akan memerlukannya untuk mengakses resource model untuk tutorial ini.
Minta akses ke model Llama 3.1 dan buat token akses. Akses ke model ini memerlukan permintaan yang disetujui di Hugging Face, dan deployment akan gagal jika akses belum diberikan.
- Menandatangani perjanjian izin lisensi: Anda harus menandatangani perjanjian izin untuk menggunakan model Llama 3.1. Buka halaman model di Hugging Face, verifikasi akun Anda, dan setujui persyaratan.
- Buat token akses: Untuk mengakses model, Anda memerlukan token Hugging Face. Di akun Hugging Face Anda, buka Your Profile > Settings > Access Tokens, buat token baru dengan izin Baca setidaknya, lalu salin ke papan klip Anda.
Persyaratan GKE Gateway Controller
- GKE versi 1.32.3 atau yang lebih baru.
- Google Cloud CLI versi 407.0.0 atau yang lebih baru.
- Gateway API hanya didukung di cluster native VPC.
- Anda harus mengaktifkan subnet khusus proxy.
- Cluster Anda harus mengaktifkan add-on
HttpLoadBalancing
. - Jika menggunakan Istio, Anda harus mengupgrade Istio ke salah satu versi berikut:
- 1.15.2 atau yang lebih baru
- 1.14.5 atau yang lebih baru
- 1.13.9 atau yang lebih baru
- Jika Anda menggunakan VPC Bersama, di project host, Anda harus
menetapkan peran
Compute Network User
ke Akun Layanan GKE untuk project layanan.
Batas dan pembatasan
Batasan dan batasan berikut berlaku:
- Gateway multi-cluster tidak didukung.
- GKE Inference Gateway hanya didukung di resource GatewayClass
gke-l7-regional-external-managed
dangke-l7-rilb
. - Load Balancer Aplikasi internal lintas region tidak didukung.
Matriks kompatibilitas
Tabel ini menguraikan matriks kompatibilitas dan dukungan untuk Definisi Resource Kustom (CRD) Ekstensi Inferensi Gateway API. Dokumen ini menjelaskan versi CRD yang didukung oleh GKE dibandingkan dengan project Ekstensi Inferensi Gateway API open source (OSS), termasuk persyaratan versi tertentu dan catatan penginstalan.
Nama CRD | Versi CRD API | Dukungan Terkelola GKE | Dukungan OSS (Ekstensi Inferensi Gateway API) |
---|---|---|---|
V1 InferencePool | inference.networking.k8s.io/v1 | Didukung di GKE 1.32.3 atau yang lebih baru dan CRD diinstal secara default di GKE 1.34.0-gke.1626000 atau yang lebih baru | Didukung mulai dari Ekstensi Inferensi Gateway API v1.0.0 |
Alpha InferencePool (Sebaiknya pengguna memulai dengan InferencePool v1 karena versi alpha InferencePool sudah tidak digunakan lagi) | inference.networking.x-k8s.io/v1alpha2 | Didukung di GKE 1.32.3 atau yang lebih baru. Namun, CRD tidak diinstal secara default di GKE. Pengguna harus menginstal CRD secara manual dari Ekstensi Inferensi Gateway API. | Didukung mulai dari Ekstensi Inferensi Gateway API v0.2.0 |
Alpha InferenceObjective | inference.networking.x-k8s.io/v1alpha2 | GKE tidak mengelola InferenceObjective | Didukung mulai dari Ekstensi Inferensi Gateway API v1.0.0 |
Alpha InferenceModel (Sebaiknya pengguna memulai dengan InferenceObjective karena InferenceModel tidak digunakan lagi) | inference.networking.x-k8s.io/v1alpha2 | GKE tidak mengelola InferenceModel | Didukung mulai dari Ekstensi Inferensi Gateway API v0.2.0. |
Mengonfigurasi GKE Inference Gateway
Untuk mengonfigurasi GKE Inference Gateway, lihat contoh ini. Tim menjalankan model vLLM
dan Llama3
serta bereksperimen secara aktif dengan dua adaptor yang di-fine-tune LoRA yang berbeda: "food-review" dan "cad-fabricator".
Alur kerja tingkat tinggi untuk mengonfigurasi GKE Inference Gateway adalah sebagai berikut:
- Siapkan lingkungan Anda: siapkan infrastruktur dan komponen yang diperlukan.
- Buat kumpulan inferensi: tentukan kumpulan server model menggunakan Resource Kustom
InferencePool
. - Tentukan tujuan inferensi: tentukan
tujuan inferensi menggunakan
InferenceObjective
Resource Kustom - Buat Gateway: ekspos layanan inferensi menggunakan Gateway API.
- Buat
HTTPRoute
: tentukan cara traffic HTTP dirutekan ke layanan inferensi. - Mengirim permintaan inferensi: membuat permintaan ke model yang di-deploy.
Menyiapkan lingkungan Anda
Instal Helm.
Buat cluster GKE:
- Buat cluster GKE Autopilot atau Standard dengan versi 1.32.3 atau yang lebih baru. Untuk mengetahui petunjuknya, lihat Membuat cluster GKE.
- Konfigurasi node dengan akselerator dan kelompok komputasi pilihan Anda.
- Gunakan Panduan Memulai Inferensi GKE untuk manifes deployment yang telah dikonfigurasi sebelumnya dan diuji, berdasarkan akselerator, model, dan kebutuhan performa yang Anda pilih.
Instal Definisi Resource Kustom (CRD) yang diperlukan di cluster GKE Anda:
- Untuk versi GKE yang lebih lama dari
1.34.0-gke.1626000
, jalankan perintah berikut untuk menginstal CRD v1InferencePool
dan alfaInferenceObjective
:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/releases/download/v1.0.0/experimental-manifests.yaml
- Untuk GKE versi
1.34.0-gke.1626000
atau yang lebih baru, instal hanya CRD alfaInferenceObjective
dengan menjalankan perintah berikut:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api-inference-extension/raw/v1.0.0/config/crd/bases/inference.networking.x-k8s.io_inferenceobjectives.yaml
- Untuk versi GKE yang lebih lama dari
Jika Anda menggunakan versi GKE yang lebih lama dari
v1.32.2-gke.1182001
dan ingin menggunakan Model Armor dengan GKE Inference Gateway, Anda harus menginstal CRD ekstensi perutean dan traffic:kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-gateway-api/refs/heads/main/config/crd/networking.gke.io_gcptrafficextensions.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-gateway-api/refs/heads/main/config/crd/networking.gke.io_gcproutingextensions.yaml
Untuk menyiapkan otorisasi guna meng-scrape metrik, buat secret
inference-gateway-sa-metrics-reader-secret
:kubectl apply -f - <<EOF --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: inference-gateway-metrics-reader rules: - nonResourceURLs: - /metrics verbs: - get --- apiVersion: v1 kind: ServiceAccount metadata: name: inference-gateway-sa-metrics-reader namespace: default --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: inference-gateway-sa-metrics-reader-role-binding namespace: default subjects: - kind: ServiceAccount name: inference-gateway-sa-metrics-reader namespace: default roleRef: kind: ClusterRole name: inference-gateway-metrics-reader apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: Secret metadata: name: inference-gateway-sa-metrics-reader-secret namespace: default annotations: kubernetes.io/service-account.name: inference-gateway-sa-metrics-reader type: kubernetes.io/service-account-token --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: inference-gateway-sa-metrics-reader-secret-read rules: - resources: - secrets apiGroups: [""] verbs: ["get", "list", "watch"] resourceNames: ["inference-gateway-sa-metrics-reader-secret"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gmp-system:collector:inference-gateway-sa-metrics-reader-secret-read namespace: default roleRef: name: inference-gateway-sa-metrics-reader-secret-read kind: ClusterRole apiGroup: rbac.authorization.k8s.io subjects: - name: collector namespace: gmp-system kind: ServiceAccount EOF
Membuat server model dan deployment model
Bagian ini menunjukkan cara men-deploy server model dan model. Contoh ini menggunakan server model
vLLM
dengan model Llama3
. Deployment diberi label sebagai
app:vllm-llama3-8b-instruct
. Deployment ini juga menggunakan dua adaptor LoRA
bernama food-review
dan cad-fabricator
dari Hugging Face.
Anda dapat menyesuaikan contoh ini dengan container server model dan model Anda sendiri, port penyaluran, dan nama deployment. Anda juga dapat mengonfigurasi adaptor LoRA dalam deployment, atau men-deploy model dasar. Langkah-langkah berikut menjelaskan cara membuat resource Kubernetes yang diperlukan.
Buat Secret Kubernetes untuk menyimpan token Hugging Face Anda. Token ini digunakan untuk mengakses model dasar dan adaptor LoRA:
kubectl create secret generic hf-token --from-literal=token=HF_TOKEN
Ganti
HF_TOKEN
dengan token Hugging Face Anda.Men-deploy server model dan model. Perintah berikut menerapkan manifes yang menentukan Deployment Kubernetes untuk server model
vLLM
dengan modelLlama3
:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/release-1.0/config/manifests/vllm/gpu-deployment.yaml
Membuat kumpulan inferensi
Resource kustom Kubernetes InferencePool
menentukan grup Pod dengan
konfigurasi komputasi dan model bahasa besar (LLM) dasar yang sama. Kolom
selector
menentukan Pod mana yang termasuk dalam kumpulan ini. Label dalam
pemilih ini harus sama persis dengan label yang diterapkan ke Pod server model Anda. Kolom
targetPort
menentukan port yang digunakan server model dalam Pod.
Kolom extensionRef
mereferensikan layanan ekstensi yang menyediakan
kemampuan tambahan untuk kumpulan inferensi. InferencePool
memungkinkan Gateway Inferensi GKE merutekan traffic ke Pod server model Anda.
Sebelum membuat InferencePool
, pastikan Pod yang dipilih oleh
InferencePool
sudah berjalan.
Untuk membuat InferencePool
menggunakan Helm, lakukan langkah-langkah berikut:
helm install vllm-llama3-8b-instruct \
--set inferencePool.modelServers.matchLabels.app=vllm-llama3-8b-instruct \
--set provider.name=gke \
--version v1.0.0 \
oci://registry.k8s.io/gateway-api-inference-extension/charts/inferencepool
Ubah kolom berikut agar sesuai dengan Deployment Anda:
inferencePool.modelServers.matchLabels.app
: kunci label yang digunakan untuk memilih Pod server model Anda.
Penginstalan Helm akan otomatis menginstal kebijakan waktu tunggu, endpoint-picker, dan Pod yang diperlukan untuk kemampuan pengamatan.
Tindakan ini akan membuat objek InferencePool
: vllm-llama3-8b-instruct
yang mereferensikan layanan endpoint model dalam Pod. Hal ini juga membuat deployment Pemilih Endpoint bernama app:vllm-llama3-8b-instruct-epp
untuk InferencePool
yang dibuat ini.
Tentukan tujuan inferensi
Resource kustom InferenceObjective
memungkinkan Anda menentukan prioritas permintaan.
Kolom metadata.name
resource InferenceObjective
menentukan nama Tujuan Inferensi, kolom Priority
menentukan tingkat kekritisan penayangannya, dan kolom poolRef
menentukan InferencePool
tempat model ditayangkan.
```yaml
apiVersion: inference.networking.k8s.io/v1alpha2
kind: InferenceObjective
metadata:
name: NAME
spec:
priority: VALUE
poolRef:
name: INFERENCE_POOL_NAME
group: "inference.networking.k8s.io"
```
Ganti kode berikut:
NAME
: nama Inference Objective Anda. Contoh,food-review
.VALUE
: prioritas untuk Tujuan Inferensi. Ini adalah bilangan bulat dengan nilai yang lebih tinggi menunjukkan permintaan yang lebih penting. Misalnya, 10.INFERENCE_POOL_NAME
: namaInferencePool
yang Anda buat di langkah sebelumnya. Contohnya,vllm-llama3-8b-instruct
.
Untuk membuat InferenceObjective
, lakukan langkah-langkah berikut:
Simpan manifes berikut sebagai
inference-objectives.yaml
. Manifes ini membuat dua resourceInferenceObjective
. Yang pertama mengonfigurasi Tujuan Inferensifood-review
padaInferencePool
vllm-llama3-8b-instruct
dengan prioritas 10. Yang kedua mengonfigurasillama3-base-model
Tujuan Inferensi untuk ditayangkan dengan prioritas yang lebih tinggi, yaitu 20.apiVersion: inference.networking.x-k8s.io/v1alpha2 kind: InferenceObjective metadata: name: food-review spec: priority: 10 poolRef: name: vllm-llama3-8b-instruct group: "inference.networking.k8s.io" --- apiVersion: inference.networking.x-k8s.io/v1alpha2 kind: InferenceObjective metadata: name: llama3-base-model spec: priority: 20 # Higher priority poolRef: name: vllm-llama3-8b-instruct
Terapkan manifes contoh ke cluster Anda:
kubectl apply -f inferenceobjective.yaml
Buat Gateway
Resource Gateway adalah titik entri untuk traffic eksternal ke dalam cluster Kubernetes Anda. Menentukan pemroses yang menerima koneksi masuk.
Gateway Inferensi GKE kompatibel dengan Class Gateway berikut:
gke-l7-rilb
: untuk Load Balancer Aplikasi internal regional.gke-l7-regional-external-managed
: untuk Load Balancer Aplikasi eksternal regional.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi Gateway Classes.
Untuk membuat Gateway, lakukan langkah-langkah berikut:
Simpan manifes contoh berikut sebagai
gateway.yaml
:apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: GATEWAY_NAME spec: gatewayClassName: GATEWAY_CLASS listeners: - protocol: HTTP port: 80 name: http
Ganti kode berikut:
GATEWAY_NAME
: nama unik untuk resource Gateway Anda. Contoh,inference-gateway
.GATEWAY_CLASS
: Gateway Class yang ingin Anda gunakan. Contoh,gke-l7-regional-external-managed
.
Terapkan manifes ke cluster Anda:
kubectl apply -f gateway.yaml
Catatan: Untuk mengetahui informasi selengkapnya tentang cara mengonfigurasi TLS untuk mengamankan Gateway Anda dengan HTTPS, lihat dokumentasi GKE tentang konfigurasi TLS.
Buat HTTPRoute
Resource HTTPRoute
menentukan cara GKE Gateway merutekan permintaan HTTP masuk ke layanan backend, seperti InferencePool
Anda. Resource
HTTPRoute
menentukan aturan pencocokan (misalnya, header atau jalur) dan
backend yang akan meneruskan traffic.
Untuk membuat
HTTPRoute
, simpan contoh manifes berikut sebagaihttproute.yaml
:apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: HTTPROUTE_NAME spec: parentRefs: - name: GATEWAY_NAME rules: - matches: - path: type: PathPrefix value: PATH_PREFIX backendRefs: - name: INFERENCE_POOL_NAME group: "inference.networking.k8s.io" kind: InferencePool
Ganti kode berikut:
HTTPROUTE_NAME
: nama unik untuk resourceHTTPRoute
Anda. Misalnya,my-route
.GATEWAY_NAME
: nama resourceGateway
yang Anda buat. Misalnya,inference-gateway
.PATH_PREFIX
: awalan jalur yang Anda gunakan untuk mencocokkan permintaan masuk. Misalnya,/
untuk mencocokkan semuanya.INFERENCE_POOL_NAME
: nama resourceInferencePool
yang ingin Anda tuju untuk merutekan traffic. Misalnya,vllm-llama3-8b-instruct
.
Terapkan manifes ke cluster Anda:
kubectl apply -f httproute.yaml
Mengirim permintaan inferensi
Setelah mengonfigurasi GKE Inference Gateway, Anda dapat mengirim permintaan inferensi ke model yang di-deploy. Dengan demikian, Anda dapat membuat teks berdasarkan perintah input dan parameter yang ditentukan.
Untuk mengirim permintaan inferensi, lakukan langkah-langkah berikut:
Tetapkan variabel lingkungan berikut:
export GATEWAY_NAME=GATEWAY_NAME export PORT_NUMBER=PORT_NUMBER # Use 80 for HTTP
Ganti kode berikut:
GATEWAY_NAME
: nama resource Gateway Anda.PORT_NUMBER
: nomor port yang Anda konfigurasi di Gateway.
Untuk mendapatkan endpoint Gateway, jalankan perintah berikut:
echo "Waiting for the Gateway IP address..." IP="" while [ -z "$IP" ]; do IP=$(kubectl get gateway/${GATEWAY_NAME} -o jsonpath='{.status.addresses[0].value}' 2>/dev/null) if [ -z "$IP" ]; then echo "Gateway IP not found, waiting 5 seconds..." sleep 5 fi done echo "Gateway IP address is: $IP" PORT=${PORT_NUMBER}
Untuk mengirim permintaan ke endpoint
/v1/completions
menggunakancurl
, jalankan perintah berikut:curl -i -X POST ${IP}:${PORT}/v1/completions \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer $(gcloud auth application-default print-access-token)' \ -d '{ "model": "MODEL_NAME", "prompt": "PROMPT_TEXT", "max_tokens": MAX_TOKENS, "temperature": "TEMPERATURE" }'
Ganti kode berikut:
MODEL_NAME
: nama model atau adaptor LoRA yang akan digunakan.PROMPT_TEXT
: perintah input untuk model.MAX_TOKENS
: jumlah maksimum token yang akan dibuat dalam respons.TEMPERATURE
: mengontrol keacakan output. Gunakan nilai0
untuk output deterministik, atau angka yang lebih tinggi untuk output yang lebih kreatif.
Contoh berikut menunjukkan cara mengirim contoh permintaan ke GKE Inference Gateway:
curl -i -X POST ${IP}:${PORT}/v1/completions -H 'Content-Type: application/json' -H 'Authorization: Bearer $(gcloud auth print-access-token)' -d '{
"model": "food-review-1",
"prompt": "What is the best pizza in the world?",
"max_tokens": 2048,
"temperature": "0"
}'
Perhatikan perilaku berikut:
- Isi permintaan: isi permintaan dapat menyertakan parameter tambahan seperti
stop
dantop_p
. Lihat spesifikasi OpenAI API untuk mengetahui daftar lengkap opsi. - Penanganan error: terapkan penanganan error yang tepat dalam kode klien Anda untuk
menangani potensi error dalam respons. Misalnya, periksa kode status HTTP dalam respons
curl
. Kode status non-200
umumnya menunjukkan error. - Autentikasi dan otorisasi: untuk deployment produksi, amankan
endpoint API Anda dengan mekanisme autentikasi dan otorisasi. Sertakan header yang sesuai (misalnya,
Authorization
) dalam permintaan Anda.