Tutorial ini menunjukkan cara menayangkan model sederhana dengan GPU dalam mode Google Kubernetes Engine (GKE). Tutorial ini membuat cluster GKE yang menggunakan satu GPU L4 Tensor Core 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 cluster GKE Autopilot atau Standard.
- Konfigurasikan bucket Cloud Storage, tempat model terlatih berada.
- 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:- 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.
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 menayangkan model di satu GPU dalam cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola 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.
Standard
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.
Membuat bucket Cloud Storage
Buat bucket Cloud Storage untuk menyimpan model terlatih yang akan ditayangkan.
Di Cloud Shell, jalankan perintah berikut:
gcloud storage buckets create gs://$GSBUCKET
Mengonfigurasi 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 diharapkan 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 yang telah dilatih ke bucket Cloud Storage:
gcloud storage cp src/triton-model-repository gs://$GSBUCKET --recursive
Deploy framework menggunakan Deployment. Deployment adalah API Kubernetes yang memungkinkan Anda menjalankan beberapa replika Pod di antara node dalam cluster:
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
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
Men-deploy Layanan untuk mengakses Deployment:
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-triton.yaml
Periksa apakah IP eksternal telah 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 ...
Penayangan TF
Di Cloud Shell, salin model ML yang telah dilatih ke bucket Cloud Storage:
gcloud storage cp src/tfserve-model-repository gs://$GSBUCKET --recursive
Deploy framework menggunakan Deployment. Deployment adalah API Kubernetes yang memungkinkan Anda menjalankan beberapa replika Pod di antara node dalam cluster:
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
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
Men-deploy Layanan untuk mengakses Deployment:
kubectl apply --namespace=gke-ai-namespace -f src/gke-config/service-tfserve.yaml
Periksa apakah IP eksternal telah 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": "" } } ] }
Menayangkan 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 image 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
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
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 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
- 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.