Tutorial ini menunjukkan cara menyajikan model machine learning (ML) PyTorch terlatih di cluster GKE menggunakan framework TorchServe. Model ML yang digunakan dalam tutorial ini menghasilkan prediksi berdasarkan permintaan pengguna. Anda dapat menggunakan informasi dalam tutorial ini untuk membantu men-deploy dan menyalurkan model Anda sendiri dalam skala besar di 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 menangkap input teks pengguna dan pasangan bahasa, serta mengirimkan informasi ke model. Model ini menerjemahkan teks dan menampilkan hasilnya ke aplikasi, yang menampilkan hasilnya kepada pengguna. Untuk mengetahui informasi selengkapnya tentang Fast Dash, lihat dokumentasi Fast Dash.
Cara kerjanya
Tutorial ini men-deploy workload di cluster GKE Autopilot. GKE mengelola sepenuhnya node Autopilot, yang mengurangi overhead administratif untuk konfigurasi, penskalaan, dan upgrade node. Saat Anda men-deploy beban kerja dan aplikasi ML pada mode Autopilot, GKE akan memilih jenis dan ukuran mesin dasar yang tepat untuk menjalankan workload. Untuk mengetahui informasi selengkapnya, lihat ringkasan Autopilot.
Setelah men-deploy model, Anda akan mendapatkan URL prediksi yang dapat digunakan aplikasi Anda untuk mengirim permintaan prediksi ke model. Metode ini memisahkan model dari aplikasi, sehingga memungkinkan model melakukan penskalaan secara terpisah dari aplikasi web.
Tujuan
- Siapkan model T5 terlatih dari repositori Hugging Face untuk inferensi 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 model secara otomatis berdasarkan metrik Prometheus
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang 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
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Kubernetes Engine, Cloud Storage, Artifact Registry, and Cloud Build:
gcloud services enable container.googleapis.com
storage.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com - Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Kubernetes Engine, Cloud Storage, Artifact Registry, and Cloud Build:
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 perlu waktu beberapa menit sampai 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 mendefinisikan proses build beberapa tahap berikut:
- Download artefak model dari repositori Hugging Face.
- Kemas model menggunakan alat PyTorch Serve Archive. Langkah ini akan membuat file arsip model (.mar) yang digunakan server inferensi untuk memuat model.
- Bangun gambar akhir dengan PyTorch Serve.
Bangun 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 membutuhkan waktu beberapa menit. Jika Anda menggunakan ukuran model yang lebih besar dari
t5-small
, proses build mungkin memerlukan waktu jauh 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 terpaket ke GKE
Untuk men-deploy image, ubah manifes Kubernetes di repositori contoh agar sesuai dengan lingkungan Anda.
Tinjau manifes untuk beban kerja inferensi:
Ganti
PROJECT_ID
dengan ID project 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 Service:
kubectl get -f kubernetes/serving-gpu.yaml
Tunggu hingga output menampilkan Pod yang sudah siap, seperti berikut. Bergantung pada ukuran gambar, pull gambar 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 Service:
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 outputnya 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 sebelumnya untuk membuka port di Pod baru.
Mengakses model yang di-deploy menggunakan aplikasi web
Bangun 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 Service mungkin memerlukan beberapa waktu untuk penyediaan penuh.
Untuk memeriksa status, jalankan perintah berikut:
kubectl get -f kubernetes/application.yaml
Tunggu hingga output menampilkan Pod yang sudah siap, seperti berikut:
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 sedang berjalan, meskipun tidak diekspos pada 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 dan 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 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 hal 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
Adaptor ini memungkinkan cluster Anda 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
Beri akun layanan IAM peran
monitoring.viewer
pada project dan peraniam.workloadIdentityUser
: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.Beri anotasi pada ServiceAccount Kubernetes adaptor agar dapat meniru 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 untuk Prometheus yang memungkinkan penyerapan metrik dan scraping target dalam 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.Membuat HorizontalPodAutoscaler:
kubectl apply -f kubernetes/hpa.yaml
Memverifikasi penskalaan otomatis menggunakan generator beban
Untuk menguji konfigurasi penskalaan otomatis Anda, buat beban untuk aplikasi penayangan. Tutorial ini menggunakan generator pemuatan Locust untuk mengirim permintaan ke endpoint prediksi model.
Buat generator beban:
kubectl apply -f kubernetes/loadgenerator.yaml
Tunggu hingga Pod generator pemuatan selesai.
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 penskala otomatis 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
- Bangun model Anda dengan versi image Docker dasar yang sama dengan yang akan digunakan untuk inferensi.
- Jika model Anda memiliki dependensi paket khusus, atau jika ukuran dependensi Anda besar, buat versi kustom image Docker dasar.
- Lihat 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 intensif GPU di node GPU dan model yang menggunakan CPU secara intensif di CPU. Hal ini dapat meningkatkan stabilitas penyajian model dan memastikan Anda memakai 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
Menghapus project Google Cloud:
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 transformer 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 span input. Model T5 juga dapat digunakan untuk tugas-tugas seperti perangkuman, tanya jawab, atau klasifikasi teks. Model ini dilatih dengan sejumlah besar teks dari Colossal Clean Crawled Corpus (C4) dan Wiki-DPR.
Untuk 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 berbagai tingkat kompleksitas
yang sesuai dengan kasus penggunaan tertentu. Tutorial ini menggunakan ukuran default, t5-small
,
tetapi Anda juga dapat memilih ukuran lain. 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 lain yang tersedia, lihat repositori Wajah Melebarkan.
Tentang TorchServe
TorchServe adalah alat fleksibel untuk menyajikan model PyTorch. Library ini memberikan dukungan siap pakai 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 selanjutnya
- Melayani LLM dengan beberapa GPU.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.