Tutorial ini menunjukkan cara men-deploy dan menayangkan model bahasa besar (LLM) menggunakan GPU di Google Kubernetes Engine (GKE) dengan NVIDIA Triton Inference Server dan TensorFlow Serving Hal ini memberikan dasar untuk memahami dan menjelajahi deployment LLM praktis untuk inferensi di lingkungan Kubernetes terkelola. Anda men-deploy penampung yang telah dibuat sebelumnya ke cluster GKE dengan satu GPU Tensor Core L4 dan Anda menyiapkan infrastruktur GKE untuk melakukan inferensi online.
Tutorial ini ditujukan untuk engineer Machine learning (ML), Administrator dan operator platform, serta spesialis Data dan AI yang ingin menghosting model machine learning (ML) terlatih di cluster GKE. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang dirujuk dalam konten, lihat Peran dan tugas pengguna umum GKE Enterprise. Google Cloud
Sebelum membaca halaman ini, pastikan Anda memahami hal-hal berikut:
Tujuan
- Buat cluster GKE Autopilot atau Standard.
- Konfigurasi bucket Cloud Storage, tempat model terlatih disimpan.
- Deploy framework inferensi online yang Anda pilih.
- Buat permintaan pengujian ke layanan yang di-deploy.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut: Google Cloud- GKE
- Cloud Storage
- Akselerator GPU L4
- Traffic keluar
Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.
Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk informasi selengkapnya, lihat Membersihkan.
Sebelum memulai
Menyiapkan project
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
Di konsol Google Cloud , mulai instance Cloud Shell:
Open Cloud ShellDownload kode sumber untuk aplikasi contoh ini:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/ai-ml/gke-online-serving-single-gpu
Tetapkan variabel lingkungan default:
gcloud config set project PROJECT_ID gcloud config set compute/region COMPUTE_REGION
Ganti nilai berikut:
- PROJECT_ID: Google Cloud project ID Anda.
- COMPUTE_REGION: region Compute Engine yang mendukung jenis akselerator yang ingin Anda gunakan, misalnya,
us-central1
untuk GPU L4.
Di Cloud Shell, buat variabel lingkungan berikut:
export PROJECT_ID=$(gcloud config get project) export REGION=$(gcloud config get compute/region) export K8S_SA_NAME=gpu-k8s-sa export GSBUCKET=$PROJECT_ID-gke-bucket export MODEL_NAME=mnist export CLUSTER_NAME=online-serving-cluster
Jalankan perintah berikut untuk membuat cluster GKE Standard:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --region=${REGION} \ --workload-pool=${PROJECT_ID}.svc.id.goog \ --addons GcsFuseCsiDriver \ --release-channel=rapid \ --num-nodes=1
Pembuatan cluster mungkin memerlukan waktu beberapa menit.
Jalankan perintah berikut untuk membuat node pool:
gcloud container node-pools create gpupool \ --accelerator type=nvidia-l4,count=1,gpu-driver-version=latest \ --project=${PROJECT_ID} \ --location=${REGION} \ --node-locations=${REGION}-a \ --cluster=${CLUSTER_NAME} \ --machine-type=g2-standard-8 \ --num-nodes=1
GKE membuat satu node pool yang berisi satu GPU L4 untuk setiap node.
Menetapkan setelan default untuk Google Cloud CLI
Membuat cluster GKE
Anda dapat menyajikan model pada satu GPU di cluster GKE Autopilot atau Standard. Sebaiknya gunakan kluster Autopilot untuk pengalaman Kubernetes yang terkelola sepenuhnya. Dengan GKE Autopilot, resource akan diskalakan secara otomatis berdasarkan permintaan model.
Untuk memilih mode operasi GKE yang paling sesuai untuk workload Anda, lihat Memilih mode operasi GKE.
Autopilot
Jalankan perintah berikut untuk membuat cluster GKE Autopilot:
gcloud container clusters create-auto ${CLUSTER_NAME} \
--region=${REGION} \
--project=${PROJECT_ID} \
--release-channel=rapid
GKE membuat cluster Autopilot dengan node CPU dan GPU seperti yang diminta oleh beban kerja yang di-deploy.
Standar
Membuat bucket Cloud Storage
Buat bucket Cloud Storage untuk menyimpan model pra-latih yang akan ditayangkan.
Di Cloud Shell, jalankan perintah berikut:
gcloud storage buckets create gs://$GSBUCKET
Konfigurasi cluster Anda untuk mengakses bucket menggunakan Workload Identity Federation for GKE
Agar cluster Anda dapat mengakses bucket Cloud Storage, lakukan langkah berikut:
- Buat akun layanan Google Cloud .
- Buat Akun Layanan Kubernetes di cluster Anda.
- Ikat Akun Layanan Kubernetes ke akun layanan Google Cloud .
Buat akun layanan Google Cloud
Di konsol Google Cloud , buka halaman Create service account:
Di kolom Service account ID, masukkan
gke-ai-sa
.Klik Buat dan lanjutkan.
Di daftar Role, pilih peran Cloud Storage > Storage Insights Collector Service.
Klik
Add another role.Dalam daftar Select a role, pilih peran Cloud Storage > Storage Object Admin.
Klik Lanjutkan lalu klik Selesai.
Membuat Akun Layanan Kubernetes di cluster Anda
Di Cloud Shell, lakukan hal berikut:
Membuat namespace Kubernetes:
kubectl create namespace gke-ai-namespace
Buat Akun Layanan Kubernetes dalam namespace:
kubectl create serviceaccount gpu-k8s-sa --namespace=gke-ai-namespace
Ikat Akun Layanan Kubernetes ke akun layanan Google Cloud
Di Cloud Shell jalankan perintah berikut:
Tambahkan binding IAM ke akun layanan Google Cloud :
gcloud iam service-accounts add-iam-policy-binding gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[gke-ai-namespace/gpu-k8s-sa]"
Flag
--member
memberikan identitas lengkap Akun Layanan Kubernetes di Google Cloud.Anotasikan Akun Layanan Kubernetes:
kubectl annotate serviceaccount gpu-k8s-sa \ --namespace gke-ai-namespace \ iam.gke.io/gcp-service-account=gke-ai-sa@PROJECT_ID.iam.gserviceaccount.com
Men-deploy server inferensi online
Setiap framework inferensi online mengharapkan untuk menemukan model ML terlatih dalam format tertentu. Bagian berikut menunjukkan cara men-deploy server inferensi, bergantung pada framework yang ingin Anda gunakan:
Triton
Di Cloud Shell, salin model ML terlatih ke bucket Cloud Storage:
gcloud storage cp src/triton-model-repository gs://$GSBUCKET --recursive
Deploy framework menggunakan Deployment. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster:
envsubst < src/gke-config/deployment-triton.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Pastikan GKE men-deploy framework:
kubectl get deployments --namespace=gke-ai-namespace
Jika framework sudah siap, output-nya akan mirip dengan berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE triton-deployment 1/1 1 1 5m29s
Deploy Layanan untuk mengakses Deployment:
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-triton.yaml
Periksa apakah IP eksternal ditetapkan:
kubectl get services --namespace=gke-ai-namespace
Outputnya mirip dengan hal berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 60m triton-server LoadBalancer 34.118.227.176 35.239.54.228 8000:30866/TCP,8001:31035/TCP,8002:30516/TCP 5m14s
Catat alamat IP untuk
triton-server
di kolom EXTERNAL-IP.Periksa apakah layanan dan deployment berfungsi dengan benar:
curl -v EXTERNAL_IP:8000/v2/health/ready
Outputnya mirip dengan hal berikut ini:
... < HTTP/1.1 200 OK < Content-Length: 0 < Content-Type: text/plain ...
Penayangan TF
Di Cloud Shell, salin model ML terlatih ke bucket Cloud Storage:
gcloud storage cp src/tfserve-model-repository gs://$GSBUCKET --recursive
Deploy framework menggunakan Deployment. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster:
envsubst < src/gke-config/deployment-tfserve.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Pastikan GKE men-deploy framework:
kubectl get deployments --namespace=gke-ai-namespace
Jika framework sudah siap, output-nya akan mirip dengan berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE tfserve-deployment 1/1 1 1 5m29s
Deploy Layanan untuk mengakses Deployment:
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-tfserve.yaml
Periksa apakah IP eksternal ditetapkan:
kubectl get services --namespace=gke-ai-namespace
Outputnya mirip dengan hal berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 60m tfserve-server LoadBalancer 34.118.227.176 35.239.54.228 8500:30003/TCP,8000:32194/TCP 5m14s
Catat alamat IP untuk
tfserve-server
di kolom EXTERNAL-IP.Periksa apakah Layanan dan Deployment berfungsi dengan benar:
curl -v EXTERNAL_IP:8000/v1/models/mnist
Ganti
EXTERNAL_IP
dengan alamat IP eksternal Anda.Outputnya mirip dengan hal berikut ini:
... < HTTP/1.1 200 OK < Content-Type: application/json < Date: Thu, 12 Oct 2023 19:01:19 GMT < Content-Length: 154 < { "model_version_status": [ { "version": "1", "state": "AVAILABLE", "status": { "error_code": "OK", "error_message": "" } } ] }
Menyajikan model
Triton
Buat lingkungan virtual Python di Cloud Shell.
python -m venv ./mnist_client source ./mnist_client/bin/activate
Instal paket Python yang diperlukan.
pip install -r src/client/triton-requirements.txt
Uji server inferensi Triton dengan memuat gambar:
cd src/client python triton_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
Ganti kode berikut:
EXTERNAL_IP
: Alamat IP eksternal Anda.TEST_IMAGE
: Nama file yang sesuai dengan gambar yang ingin Anda uji. Anda dapat menggunakan gambar yang disimpan disrc/client/images
.
Bergantung pada gambar yang Anda gunakan, outputnya akan mirip dengan berikut ini:
Calling Triton HTTP Service -> Prediction result: 7
Penayangan TF
Buat lingkungan virtual Python di Cloud Shell.
python -m venv ./mnist_client source ./mnist_client/bin/activate
Instal paket Python yang diperlukan.
pip install -r src/client/tfserve-requirements.txt
Uji TensorFlow Serving dengan beberapa gambar.
cd src/client python tfserve_mnist_client.py -i EXTERNAL_IP -m mnist -p ./images/TEST_IMAGE.png
Ganti kode berikut:
EXTERNAL_IP
: Alamat IP eksternal Anda.TEST_IMAGE
: Nilai dari0
hingga9
. Anda dapat menggunakan gambar yang disimpan disrc/client/images
.
Bergantung pada gambar yang Anda gunakan, Anda akan mendapatkan output yang mirip dengan ini:
Calling TensorFlow Serve HTTP Service -> Prediction result: 5
Mengamati performa model
Triton
Untuk mengamati performa model, Anda dapat menggunakan integrasi dasbor Triton di Cloud Monitoring. Dengan dasbor ini, Anda dapat melihat metrik performa penting seperti throughput token, latensi permintaan, dan tingkat error.
Untuk menggunakan dasbor Triton, Anda harus mengaktifkan Google Cloud Managed Service for Prometheus, yang mengumpulkan metrik dari Triton, di cluster GKE Anda. Triton mengekspos metrik dalam format Prometheus secara default; Anda tidak perlu menginstal exporter tambahan.
Kemudian, Anda dapat melihat metrik menggunakan dasbor Triton. Untuk mengetahui informasi tentang cara menggunakan Google Cloud Managed Service for Prometheus untuk mengumpulkan metrik dari model Anda, lihat panduan kejelasan Triton dalam dokumentasi Cloud Monitoring.Penayangan TF
Untuk mengamati performa model, Anda dapat menggunakan integrasi dasbor TF Serving di Cloud Monitoring. Dengan dasbor ini, Anda dapat melihat metrik performa penting seperti throughput token, latensi permintaan, dan tingkat error.
Untuk menggunakan dasbor TF Serving, Anda harus mengaktifkan Google Cloud Managed Service for Prometheus, yang mengumpulkan metrik dari TF Serving, di cluster GKE Anda.
Kemudian, Anda dapat melihat metrik menggunakan dasbor TF Serving. Untuk mengetahui informasi tentang cara menggunakan Google Cloud Managed Service for Prometheus untuk mengumpulkan metrik dari model Anda, lihat panduan kemampuan pengamatan TF Serving dalam dokumentasi Cloud Monitoring.Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang Anda buat dalam panduan ini, lakukan salah satu langkah berikut:
- Pertahankan cluster GKE: Hapus resource Kubernetes di cluster dan resource Google Cloud
- Mempertahankan project Google Cloud : Hapus cluster GKE dan resource Google Cloud
- Menghapus project
Hapus resource Kubernetes dalam cluster dan resource Google Cloud
- Hapus namespace Kubernetes dan workload yang Anda deploy:
Triton
kubectl -n gke-ai-namespace delete -f src/gke-config/service-triton.yaml
kubectl -n gke-ai-namespace delete -f src/gke-config/deployment-triton.yaml
kubectl delete namespace gke-ai-namespace
Penayangan TF
kubectl -n gke-ai-namespace delete -f src/gke-config/service-tfserve.yaml
kubectl -n gke-ai-namespace delete -f src/gke-config/deployment-tfserve.yaml
kubectl delete namespace gke-ai-namespace
Hapus bucket Cloud Storage:
Buka halaman Bucket:
Pilih kotak centang untuk
PROJECT_ID-gke-bucket
.Klik
Delete.Untuk mengonfirmasi penghapusan, ketik
DELETE
, lalu klik Delete.
Hapus Google Cloud akun layanan:
Buka halaman Akun Layanan.
Pilih project Anda.
Pilih kotak centang untuk
gke-gpu-sa@PROJECT_ID.iam.gserviceaccount.com
.Klik
Delete.Untuk mengonfirmasi penghapusan, klik Hapus.
Hapus cluster GKE dan Google Cloud resource
Hapus cluster GKE:
Buka halaman Cluster:
Pilih kotak centang untuk
online-serving-cluster
.Klik
Delete.Untuk mengonfirmasi penghapusan, ketik
online-serving-cluster
, lalu klik Delete.
Hapus bucket Cloud Storage:
Buka halaman Bucket:
Pilih kotak centang untuk
PROJECT_ID-gke-bucket
.Klik
Delete.Untuk mengonfirmasi penghapusan, ketik
DELETE
, lalu klik Delete.
Hapus Google Cloud akun layanan:
Buka halaman Akun Layanan.
Pilih project Anda.
Pilih kotak centang untuk
gke-gpu-sa@PROJECT_ID.iam.gserviceaccount.com
.Klik
Delete.Untuk mengonfirmasi penghapusan, klik Hapus.
Menghapus project
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.