Tutorial ini menunjukkan cara menyajikan model sederhana dengan GPU dalam mode Google Kubernetes Engine (GKE). Tutorial ini membuat cluster GKE yang menggunakan satu L4 Tensor Core GPU dan menyiapkan infrastruktur GKE untuk melakukan inferensi online. Tutorial ini menggunakan dua framework yang paling sering digunakan untuk penayangan online:
Tujuan
Tutorial ini ditujukan untuk engineer infrastruktur, engineer MLOps, engineer DevOps, atau administrator cluster yang ingin menghosting model machine learning (ML) terlatih di cluster GKE.
Tutorial ini membahas langkah-langkah berikut:
- Buat GKE Autopilot atau cluster Standar.
- Mengonfigurasi bucket Cloud Storage, tempat model terlatih berada.
- Deploy framework inferensi online yang Anda pilih.
- Membuat permintaan pengujian ke layanan yang di-deploy.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, klik Buat project untuk mulai membuat project Google Cloud baru.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API GKE.
-
Di konsol Google Cloud, pada halaman pemilih project, klik Buat project untuk mulai membuat project Google Cloud baru.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API GKE.
Menetapkan setelan default untuk Google Cloud CLI
Di konsol Google Cloud, mulai instance Cloud Shell:
Buka 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: project ID Google Cloud 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
Membuat cluster GKE
Anda dapat menyajikan model di satu GPU dalam GKE Autopilot atau cluster Standar. Sebaiknya gunakan cluster Autopilot untuk mendapatkan pengalaman Kubernetes yang terkelola sepenuhnya. Dengan GKE Autopilot, resource akan diskalakan secara otomatis berdasarkan permintaan model.
Untuk memilih mode operasi GKE yang paling sesuai dengan beban kerja 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
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 memerlukan waktu beberapa menit.
Jalankan perintah berikut untuk membuat kumpulan node:
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 kumpulan node yang berisi satu GPU L4 untuk setiap node.
Membuat bucket Cloud Storage
Membuat bucket Cloud Storage untuk menyimpan model terlatih yang akan disajikan.
Jalankan perintah berikut di Cloud Shell:
gcloud storage buckets create gs://$GSBUCKET
Konfigurasikan 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.
Membuat akun layanan Google Cloud
Di konsol Google Cloud, buka halaman Buat akun layanan.
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
Mengikat 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 berharap dapat 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 dalam bucket Cloud Storage:
gsutil cp -r src/triton-model-repository gs://$GSBUCKET
Deploy framework di Kubernetes:
envsubst < src/gke-config/deployment-triton.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Validasi bahwa GKE men-deploy framework:
kubectl get deployments --namespace=gke-ai-namespace
Setelah framework siap, output-nya akan tampak seperti berikut:
NAME READY UP-TO-DATE AVAILABLE AGE triton-deployment 1/1 1 1 5m29s
Men-deploy Layanan untuk mengakses deployment
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-triton.yaml
Periksa apakah IP eksternal sudah 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.Pastikan 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 ...
Penyajian TF
Di Cloud Shell, salin model ML terlatih ke dalam bucket Cloud Storage:
gsutil cp -r src/tfserve-model-repository gs://$GSBUCKET
Deploy framework di Kubernetes:
envsubst < src/gke-config/deployment-tfserve.yaml | kubectl --namespace=gke-ai-namespace apply -f -
Validasi bahwa GKE men-deploy framework:
kubectl get deployments --namespace=gke-ai-namespace
Setelah framework siap, output-nya akan tampak seperti berikut:
NAME READY UP-TO-DATE AVAILABLE AGE tfserve-deployment 1/1 1 1 5m29s
Men-deploy Layanan untuk mengakses deployment
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-tfserve.yaml
Periksa apakah IP eksternal sudah 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.Pastikan 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": "" } } ] }
Menyalurkan 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 mirip dengan berikut ini:
Calling Triton HTTP Service -> Prediction result: 7
Penyajian 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 Serve 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
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang dibuat 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
Menghapus 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
Penyajian 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 akun layanan Google Cloud:
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 cluster GKE dan resource Google Cloud
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 akun layanan Google Cloud:
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
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.