Tutorial ini menunjukkan cara men-deploy dan menayangkan model machine learning (ML) yang skalabel ke cluster Google Kubernetes Engine (GKE) menggunakan framework TorchServe. Anda menayangkan model PyTorch yang telah dilatih sebelumnya yang menghasilkan prediksi berdasarkan permintaan pengguna. Setelah men-deploy model, Anda akan mendapatkan URL prediksi yang digunakan aplikasi untuk mengirim permintaan prediksi. Metode ini memungkinkan Anda menskalakan model dan aplikasi web secara terpisah. Saat Anda men-deploy aplikasi dan workload ML di Autopilot, GKE memilih jenis dan ukuran mesin yang mendasarinya yang paling efisien untuk menjalankan workload.
Tutorial ini ditujukan untuk engineer Machine Learning (ML), admin dan operator Platform, serta untuk spesialis Data dan AI yang tertarik menggunakan GKE Autopilot untuk mengurangi overhead administratif untuk konfigurasi, penskalaan, dan upgrade node. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud , lihat Peran dan tugas pengguna GKE Enterprise umum.
Sebelum membaca halaman ini, pastikan Anda sudah memahami mode Autopilot GKE.
Tentang aplikasi tutorial
Aplikasi ini adalah aplikasi web Python kecil yang dibuat menggunakan framework Fast Dash. Anda menggunakan aplikasi untuk mengirim permintaan prediksi ke model T5. Aplikasi ini mengambil input teks pengguna dan pasangan bahasa, lalu mengirim informasi ke model. Model menerjemahkan teks dan menampilkan hasilnya ke aplikasi, yang menampilkan hasilnya kepada pengguna. Untuk informasi selengkapnya tentang Fast Dash, lihat dokumentasi Fast Dash.
Tujuan
- Siapkan model T5 terlatih dari repositori Hugging Face untuk ditayangkan dengan mengemasnya sebagai image container dan mengirimkannya ke Artifact Registry
- Men-deploy model ke cluster Autopilot
- Men-deploy aplikasi Fast Dash yang berkomunikasi dengan model
- Menskalakan otomatis model berdasarkan metrik Prometheus
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine, Cloud Storage, Artifact Registry, and Cloud Build APIs:
gcloud services enable container.googleapis.com
storage.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Kubernetes Engine, Cloud Storage, Artifact Registry, and Cloud Build APIs:
gcloud services enable container.googleapis.com
storage.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
Menyiapkan lingkungan
Clone repositori contoh dan buka direktori tutorial:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/ai-ml/t5-model-serving
Membuat cluster
Jalankan perintah berikut:
gcloud container clusters create-auto ml-cluster \
--release-channel=RELEASE_CHANNEL \
--cluster-version=CLUSTER_VERSION \
--location=us-central1
Ganti kode berikut:
RELEASE_CHANNEL
: saluran rilis untuk cluster Anda. Harus salah satu darirapid
,regular
, ataustable
. Pilih saluran yang memiliki GKE versi 1.28.3-gke.1203000 atau yang lebih baru untuk menggunakan GPU L4. Untuk melihat versi yang tersedia di saluran tertentu, lihat Melihat versi default dan yang tersedia untuk saluran rilis.CLUSTER_VERSION
: versi GKE yang akan digunakan. Harus1.28.3-gke.1203000
atau yang lebih baru.
Operasi ini memerlukan waktu beberapa menit hingga selesai.
Membuat repositori Artifact Registry
Buat repositori standar Artifact Registry baru dengan format Docker di region yang sama dengan cluster Anda:
gcloud artifacts repositories create models \ --repository-format=docker \ --location=us-central1 \ --description="Repo for T5 serving image"
Verifikasi nama repositori:
gcloud artifacts repositories describe models \ --location=us-central1
Outputnya mirip dengan hal berikut ini:
Encryption: Google-managed key Repository Size: 0.000MB createTime: '2023-06-14T15:48:35.267196Z' description: Repo for T5 serving image format: DOCKER mode: STANDARD_REPOSITORY name: projects/PROJECT_ID/locations/us-central1/repositories/models updateTime: '2023-06-14T15:48:35.267196Z'
Memaketkan model
Di bagian ini, Anda akan memaketkan model dan framework penayangan dalam satu image container menggunakan Cloud Build dan mengirim image yang dihasilkan ke repositori Artifact Registry.
Tinjau Dockerfile untuk image container:
Dockerfile ini menentukan proses build beberapa tahap berikut:
- Download artefak model dari repositori Hugging Face.
- Paketkan model menggunakan alat PyTorch Serving Archive. Tindakan ini akan membuat file arsip model (.mar) yang digunakan server inferensi untuk memuat model.
- Build image akhir dengan PyTorch Serve.
Build dan kirim image menggunakan Cloud Build:
gcloud builds submit model/ \ --region=us-central1 \ --config=model/cloudbuild.yaml \ --substitutions=_LOCATION=us-central1,_MACHINE=gpu,_MODEL_NAME=t5-small,_MODEL_VERSION=1.0
Proses build memerlukan waktu beberapa menit hingga selesai. Jika Anda menggunakan ukuran model yang lebih besar dari
t5-small
, proses build mungkin memerlukan waktu yang signifikan lebih lama.Pastikan image ada di repositori:
gcloud artifacts docker images list us-central1-docker.pkg.dev/PROJECT_ID/models
Ganti
PROJECT_ID
dengan project ID Google Cloud Anda.Outputnya mirip dengan hal berikut ini:
IMAGE DIGEST CREATE_TIME UPDATE_TIME us-central1-docker.pkg.dev/PROJECT_ID/models/t5-small sha256:0cd... 2023-06-14T12:06:38 2023-06-14T12:06:38
Men-deploy model yang dipaketkan ke GKE
Untuk men-deploy image, tutorial ini menggunakan Deployment Kubernetes. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster.
Ubah manifes Kubernetes di repositori contoh agar sesuai dengan lingkungan Anda.
Tinjau manifes untuk workload inferensi:
Ganti
PROJECT_ID
dengan project ID Google Cloud Anda:sed -i "s/PROJECT_ID/PROJECT_ID/g" "kubernetes/serving-gpu.yaml"
Tindakan ini memastikan bahwa jalur image container dalam spesifikasi Deployment cocok dengan jalur ke image model T5 Anda di Artifact Registry.
Buat resource Kubernetes:
kubectl create -f kubernetes/serving-gpu.yaml
Untuk memverifikasi bahwa model berhasil di-deploy, lakukan hal berikut:
Dapatkan status Deployment dan Layanan:
kubectl get -f kubernetes/serving-gpu.yaml
Tunggu hingga output menampilkan Pod yang siap, mirip dengan berikut ini. Bergantung pada ukuran image, pull image pertama mungkin memerlukan waktu beberapa menit.
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/t5-inference 1/1 1 0 66s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/t5-inference ClusterIP 10.48.131.86 <none> 8080/TCP,8081/TCP,8082/TCP 66s
Buka port lokal untuk Layanan
t5-inference
:kubectl port-forward svc/t5-inference 8080
Buka jendela terminal baru dan kirim permintaan pengujian ke Layanan:
curl -v -X POST -H 'Content-Type: application/json' -d '{"text": "this is a test sentence", "from": "en", "to": "fr"}' "http://localhost:8080/predictions/t5-small/1.0"
Jika permintaan pengujian gagal dan koneksi Pod ditutup, periksa log:
kubectl logs deployments/t5-inference
Jika output-nya mirip dengan berikut ini, TorchServe gagal menginstal beberapa dependensi model:
org.pytorch.serve.archive.model.ModelException: Custom pip package installation failed for t5-small
Untuk mengatasi masalah ini, mulai ulang Deployment:
kubectl rollout restart deployment t5-inference
Pengontrol Deployment membuat Pod baru. Ulangi langkah-langkah sebelumnya untuk membuka port di Pod baru.
Mengakses model yang di-deploy menggunakan aplikasi web
Untuk mengakses model yang di-deploy dengan aplikasi web Fast Dash, selesaikan langkah-langkah berikut:
Build dan kirim aplikasi web Fast Dash sebagai image container di Artifact Registry:
gcloud builds submit client-app/ \ --region=us-central1 \ --config=client-app/cloudbuild.yaml
Buka
kubernetes/application.yaml
di editor teks dan gantiPROJECT_ID
di kolomimage:
dengan project ID Anda. Atau, jalankan perintah berikut:sed -i "s/PROJECT_ID/PROJECT_ID/g" "kubernetes/application.yaml"
Buat resource Kubernetes:
kubectl create -f kubernetes/application.yaml
Deployment dan Layanan mungkin memerlukan waktu beberapa saat untuk disediakan sepenuhnya.
Untuk memeriksa status, jalankan perintah berikut:
kubectl get -f kubernetes/application.yaml
Tunggu hingga output menampilkan Pod yang siap, mirip dengan berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/fastdash 1/1 1 0 1m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/fastdash NodePort 203.0.113.12 <none> 8050/TCP 1m
Aplikasi web kini berjalan, meskipun tidak ditampilkan di alamat IP eksternal. Untuk mengakses aplikasi web, buka port lokal:
kubectl port-forward service/fastdash 8050
Di browser, buka antarmuka web:
- Jika Anda menggunakan shell lokal, buka browser, lalu buka http://127.0.0.1:8050.
- Jika Anda menggunakan Cloud Shell, klik Web preview, lalu klik
Change port. Tentukan port
8050
.
Untuk mengirim permintaan ke model T5, tentukan nilai di kolom TEXT, FROM LANG, dan TO LANG di antarmuka web, lalu klik Submit. Untuk mengetahui daftar bahasa yang tersedia, lihat dokumentasi T5.
Mengaktifkan penskalaan otomatis untuk model
Bagian ini menunjukkan cara mengaktifkan penskalaan otomatis untuk model berdasarkan metrik dari Google Cloud Managed Service for Prometheus dengan melakukan tindakan berikut:
- Menginstal Adaptor Stackdriver Metrik Kustom
- Menerapkan konfigurasi PodMonitoring dan HorizontalPodAutoscaling
Google Cloud Managed Service for Prometheus diaktifkan secara default di cluster Autopilot yang menjalankan versi 1.25 dan yang lebih baru.
Menginstal Adaptor Stackdriver Metrik Kustom
Dengan adaptor ini, cluster Anda dapat menggunakan metrik dari Prometheus untuk membuat keputusan penskalaan otomatis Kubernetes.
Deploy adaptor:
kubectl create -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Buat akun layanan IAM untuk digunakan adaptor:
gcloud iam service-accounts create monitoring-viewer
Berikan peran
monitoring.viewer
pada project dan peraniam.workloadIdentityUser
kepada akun layanan IAM:gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:monitoring-viewer@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/monitoring.viewer gcloud iam service-accounts add-iam-policy-binding monitoring-viewer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[custom-metrics/custom-metrics-stackdriver-adapter]"
Ganti
PROJECT_ID
dengan project ID Google Cloud Anda.Anotasikan ServiceAccount Kubernetes adaptor agar dapat meniru identitas akun layanan IAM:
kubectl annotate serviceaccount custom-metrics-stackdriver-adapter \ --namespace custom-metrics \ iam.gke.io/gcp-service-account=monitoring-viewer@PROJECT_ID.iam.gserviceaccount.com
Mulai ulang adaptor untuk menerapkan perubahan:
kubectl rollout restart deployment custom-metrics-stackdriver-adapter \ --namespace=custom-metrics
Menerapkan konfigurasi PodMonitoring dan HorizontalPodAutoscaling
PodMonitoring adalah resource kustom Google Cloud Managed Service for Prometheus yang memungkinkan penyerapan metrik dan scraping target di namespace tertentu.
Deploy resource PodMonitoring di namespace yang sama dengan Deployment TorchServe:
kubectl apply -f kubernetes/pod-monitoring.yaml
Tinjau manifes HorizontalPodAutoscaler:
HorizontalPodAutoscaler menskalakan jumlah Pod model T5 berdasarkan durasi kumulatif antrean permintaan. Penskalaan otomatis didasarkan pada metrik
ts_queue_latency_microseconds
, yang menunjukkan durasi antrean kumulatif dalam mikrodetik.Buat HorizontalPodAutoscaler:
kubectl apply -f kubernetes/hpa.yaml
Memverifikasi penskalaan otomatis menggunakan generator beban
Untuk menguji konfigurasi penskalaan otomatis, buat beban untuk aplikasi penayangan. Tutorial ini menggunakan generator beban Locust untuk mengirim permintaan ke endpoint prediksi untuk model.
Buat generator beban:
kubectl apply -f kubernetes/loadgenerator.yaml
Tunggu hingga Pod generator beban siap.
Ekspos antarmuka web generator beban secara lokal:
kubectl port-forward svc/loadgenerator 8080
Jika Anda melihat pesan error, coba lagi saat Pod berjalan.
Di browser, buka antarmuka web generator beban:
- Jika Anda menggunakan shell lokal, buka browser, lalu buka http://127.0.0.1:8080.
- Jika Anda menggunakan Cloud Shell, klik Web preview, lalu
klik Change port. Masukkan port
8080
.
Klik tab Diagram untuk mengamati performa dari waktu ke waktu.
Buka jendela terminal baru dan lihat jumlah replika autoscaler Pod horizontal Anda:
kubectl get hpa -w
Jumlah replika meningkat seiring dengan bertambahnya beban. Peningkatan skala mungkin memerlukan waktu sekitar sepuluh menit. Saat replika baru dimulai, jumlah permintaan yang berhasil dalam diagram Locust akan meningkat.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE t5-inference Deployment/t5-inference 71352001470m/7M 1 5 1 2m11s
Rekomendasi
- Build model Anda dengan versi image Docker dasar yang sama dengan yang akan Anda gunakan untuk penayangan.
- Jika model Anda memiliki dependensi paket khusus, atau jika ukuran dependensi Anda besar, buat versi kustom image Docker dasar Anda.
- Tonton versi hierarki paket dependensi model Anda. Pastikan dependensi paket Anda mendukung versi satu sama lain. Misalnya, Panda versi 2.0.3 mendukung NumPy versi 1.20.3 dan yang lebih baru.
- Menjalankan model yang intensif GPU di node GPU dan model yang intensif CPU di CPU. Hal ini dapat meningkatkan stabilitas penayangan model dan memastikan bahwa Anda menggunakan resource node secara efisien.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus setiap resource
Menghapus resource Kubernetes:
kubectl delete -f kubernetes/loadgenerator.yaml kubectl delete -f kubernetes/hpa.yaml kubectl delete -f kubernetes/pod-monitoring.yaml kubectl delete -f kubernetes/application.yaml kubectl delete -f kubernetes/serving-gpu.yaml kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Hapus cluster GKE:
gcloud container clusters delete "ml-cluster" \ --location="us-central1" --quiet
Hapus akun layanan IAM dan binding kebijakan IAM:
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member "serviceAccount:monitoring-viewer@PROJECT_ID.iam.gserviceaccount.com" \ --role roles/monitoring.viewer gcloud iam service-accounts remove-iam-policy-binding monitoring-viewer@PROJECT_ID.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:PROJECT_ID.svc.id.goog[custom-metrics/custom-metrics-stackdriver-adapter]" gcloud iam service-accounts delete monitoring-viewer
Hapus image di Artifact Registry. Jika ingin, hapus seluruh repositori. Untuk mengetahui petunjuknya, lihat dokumentasi Artifact Registry tentang Menghapus image.
Ringkasan komponen
Bagian ini menjelaskan komponen yang digunakan dalam tutorial ini, seperti model, aplikasi web, framework, dan cluster.
Tentang model T5
Tutorial ini menggunakan model T5 multibahasa terlatih. T5 adalah pengubah teks ke teks yang mengonversi teks dari satu bahasa ke bahasa lain. Di T5, input dan output selalu berupa string teks, berbeda dengan model bergaya BERT yang hanya dapat menghasilkan label class atau rentang input. Model T5 juga dapat digunakan untuk tugas seperti peringkasan, Tanya Jawab, atau klasifikasi teks. Model ini dilatih dengan teks dalam jumlah besar dari Colossal Clean Crawled Corpus (C4) dan Wiki-DPR.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi model T5.
Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, dan Peter J. Liu mempresentasikan model T5 dalam Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer, yang dipublikasikan di Journal of Machine Learning Research.
Model T5 mendukung berbagai ukuran model, dengan tingkat kompleksitas yang berbeda-beda
yang sesuai dengan kasus penggunaan tertentu. Tutorial ini menggunakan ukuran default, t5-small
,
tetapi Anda juga dapat memilih ukuran yang berbeda. Ukuran T5 berikut didistribusikan
berdasarkan lisensi Apache 2.0:
t5-small
: 60 juta parametert5-base
: 220 juta parametert5-large
: 770 juta parameter. Download 3 GB.t5-3b
: 3 miliar parameter. Download 11 GB.t5-11b
: 11 miliar parameter. Download 45 GB.
Untuk model T5 lainnya yang tersedia, lihat repositori Hugging Face.
Tentang TorchServe
TorchServe adalah alat yang fleksibel untuk menayangkan model PyTorch. JupyterLab menyediakan dukungan langsung untuk semua framework deep learning utama, termasuk PyTorch, TensorFlow, dan ONNX. TorchServe dapat digunakan untuk men-deploy model dalam produksi, atau untuk pembuatan prototipe dan eksperimen yang cepat.
Langkah berikutnya
- Menyajikan LLM dengan beberapa GPU.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.