Tutorial ini menunjukkan cara menayangkan model pembuatan gambar SDXL menggunakan Tensor Processing Unit (TPU) di Google Kubernetes Engine (GKE) dengan MaxDiffusion. Dalam tutorial ini, Anda akan mendownload model dari Hugging Face dan men-deploy-nya di cluster Autopilot atau Standard menggunakan penampung yang menjalankan MaxDiffusion.
Panduan ini adalah titik awal yang baik jika Anda memerlukan kontrol terperinci, penyesuaian, skalabilitas, ketahanan, portabilitas, dan efektivitas biaya Kubernetes terkelola saat men-deploy dan menayangkan beban kerja AI/ML. Jika Anda memerlukan platform AI terkelola terpadu untuk membuat dan menayangkan model ML dengan cepat dan biaya yang efektif, sebaiknya coba solusi deployment Vertex AI kami.
Latar belakang
Dengan menayangkan SDXL menggunakan TPU di GKE dengan MaxDiffusion, Anda dapat membuat solusi penayangan yang andal dan siap produksi dengan semua manfaat Kubernetes terkelola, termasuk efisiensi biaya, skalabilitas, dan ketersediaan yang lebih tinggi. Bagian ini menjelaskan teknologi utama yang digunakan dalam tutorial ini.
Stable Diffusion XL (SDXL)
Stable Diffusion XL (SDXL) adalah jenis model difusi laten (LDM) yang didukung oleh MaxDiffusion untuk inferensi. Untuk AI generatif, Anda dapat menggunakan LDM untuk membuat gambar berkualitas tinggi dari deskripsi teks. LDM berguna untuk aplikasi seperti penelusuran gambar dan pemberian teks pada gambar.
SDXL mendukung inferensi satu atau multi-host dengan anotasi sharding. Hal ini memungkinkan SDXL dilatih dan dijalankan di beberapa mesin, yang dapat meningkatkan efisiensi.
Untuk mempelajari lebih lanjut, lihat repositori Generative Models by Stability AI dan makalah SDXL.
TPU
TPU adalah sirkuit terintegrasi khusus aplikasi (ASIC) Google yang dikembangkan secara khusus dan digunakan untuk mempercepat machine learning dan model AI yang dibuat menggunakan framework seperti TensorFlow, PyTorch, dan JAX.
Sebelum menggunakan TPU di GKE, sebaiknya selesaikan jalur pembelajaran berikut:
- Pelajari ketersediaan versi TPU saat ini dengan arsitektur sistem Cloud TPU.
- Pelajari TPU di GKE.
Tutorial ini membahas penayangan model SDXL. GKE
men-deploy model di node TPU v5e host tunggal dengan topologi TPU yang dikonfigurasi
berdasarkan persyaratan model untuk menayangkan perintah dengan latensi rendah. Dalam
panduan ini, model menggunakan chip TPU v5e dengan topologi 1x1
.
MaxDiffusion
MaxDiffusion adalah kumpulan implementasi referensi, yang ditulis dalam Python dan Jax, dari berbagai model difusi laten yang berjalan di perangkat XLA, termasuk TPU dan GPU. MaxDiffusion adalah titik awal untuk project Diffusion, baik untuk riset maupun produksi.
Untuk mempelajari lebih lanjut, lihat repositori MaxDiffusion.
Tujuan
Tutorial ini ditujukan untuk pelanggan AI generatif yang menggunakan JAX, pengguna baru atau lama SDXL, dan Engineer ML, engineer MLOps (DevOps), atau administrator platform yang tertarik untuk menggunakan kemampuan orkestrasi penampung Kubernetes untuk menayangkan LLM.
Tutorial ini membahas langkah-langkah berikut:
- Buat cluster GKE Autopilot atau Standard dengan topologi TPU yang direkomendasikan, berdasarkan karakteristik model.
- Build image container inferensi SDXL.
- Men-deploy server inferensi SDXL di GKE.
- Menampilkan interaksi dengan model melalui aplikasi web.
Arsitektur
Bagian ini menjelaskan arsitektur GKE yang digunakan dalam tutorial ini. Arsitektur ini terdiri dari cluster GKE Autopilot atau Standard yang menyediakan TPU dan menghosting komponen MaxDiffusion. GKE menggunakan komponen ini untuk men-deploy dan menayangkan model.
Diagram berikut menunjukkan komponen arsitektur ini:
Arsitektur ini mencakup komponen berikut:
- Cluster regional GKE Autopilot atau Standard.
- Satu node pool slice TPU host tunggal yang menghosting model SDXL pada deployment MaxDiffusion.
- Komponen Layanan dengan load balancer jenis
ClusterIP
. Layanan ini mendistribusikan traffic masuk ke semua replikaMaxDiffusion HTTP
. - Server
WebApp HTTP
dengan LayananLoadBalancer
eksternal yang mendistribusikan traffic masuk dan mengalihkan traffic penayangan model ke LayananClusterIP
.
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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the required API.
-
Make sure that you have the following role or roles on the project: roles/container.admin, roles/iam.serviceAccountAdmin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Buka IAM - Pilih project.
- Klik Berikan akses.
-
Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.
- Di daftar Pilih peran, pilih peran.
- Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
- Klik Simpan.
-
- Pastikan Anda memiliki kuota yang cukup untuk chip
TPU v5e PodSlice Lite
. Dalam tutorial ini, Anda akan menggunakan instance on-demand.
Menyiapkan lingkungan
Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting diGoogle Cloud. Cloud Shell telah diinstal dengan software yang akan Anda perlukan untuk tutorial ini, termasuk kubectl
dan
gcloud CLI.
Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:
Di konsol Google Cloud, luncurkan sesi Cloud Shell dengan mengklik
Aktifkan Cloud Shell di konsol Google Cloud. Tindakan ini akan meluncurkan sesi di panel bawah Konsol Google Cloud.
Tetapkan variabel lingkungan default:
gcloud config set project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=CLUSTER_NAME export REGION=REGION_NAME export ZONE=ZONE
Ganti nilai berikut:
- PROJECT_ID: Google Cloud project ID Anda.
- CLUSTER_NAME: nama cluster GKE Anda.
- REGION_NAME: region tempat cluster GKE, bucket Cloud Storage, dan node TPU Anda berada. Wilayah ini
berisi zona tempat jenis mesin TPU v5e tersedia (misalnya,
us-west1
,us-west4
,us-central1
,us-east1
,us-east5
, ataueurope-west4
). - (Khusus cluster standar) ZONE: zona tempat resource TPU tersedia (misalnya,
us-west4-a
). Untuk cluster Autopilot, Anda tidak perlu menentukan zona, hanya region.
Clone repositori contoh dan buka direktori tutorial:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/ai-ml/maxdiffusion-tpu WORK_DIR=$(pwd) gcloud artifacts repositories create gke-llm --repository-format=docker --location=$REGION gcloud auth configure-docker $REGION-docker.pkg.dev
Membuat dan mengonfigurasi resource Google Cloud
Ikuti petunjuk ini untuk membuat resource yang diperlukan.
Membuat cluster GKE
Anda dapat menayangkan SDXL di TPU dalam cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola sepenuhnya. Untuk memilih mode operasi GKE yang paling sesuai untuk workload Anda, lihat Memilih mode operasi GKE.
Autopilot
Jalankan perintah berikut di Cloud Shell:
gcloud container clusters create-auto ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --region=${REGION} \ --release-channel=rapid \ --cluster-version=1.29
GKE membuat cluster Autopilot dengan node CPU dan TPU seperti yang diminta oleh workload yang di-deploy.
Konfigurasi
kubectl
untuk berkomunikasi dengan cluster Anda:gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${REGION}
Standar
Buat cluster GKE Standar regional yang menggunakan Workload Identity Federation for GKE.
gcloud container clusters create ${CLUSTER_NAME} \ --enable-ip-alias \ --machine-type=n2-standard-4 \ --num-nodes=2 \ --workload-pool=${PROJECT_ID}.svc.id.goog \ --location=${REGION}
Pembuatan cluster mungkin memerlukan waktu beberapa menit.
Jalankan perintah berikut untuk membuat node pool untuk cluster Anda:
gcloud container node-pools create maxdiffusion-tpu-nodepool \ --cluster=${CLUSTER_NAME} \ --machine-type=ct5lp-hightpu-1t \ --num-nodes=1 \ --region=${REGION} \ --node-locations=${ZONE} \ --spot
GKE membuat node pool TPU v5e dengan topologi
1x1
dan satu node.Untuk membuat node pool dengan topologi yang berbeda, pelajari cara Merencanakan konfigurasi TPU. Pastikan Anda memperbarui nilai contoh dalam tutorial ini, seperti
cloud.google.com/gke-tpu-topology
dangoogle.com/tpu
.Konfigurasi
kubectl
untuk berkomunikasi dengan cluster Anda:gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${REGION}
Mem-build container inferensi SDXL
Ikuti petunjuk ini untuk mem-build image container untuk server inferensi SDXL.
Buka manifes
server/cloudbuild.yaml
:Jalankan build dan buat image container inferensi.
cd $WORK_DIR/build/server gcloud builds submit . --region=$REGION
Output-nya berisi jalur image container.
Men-deploy server inferensi SDXL
Di bagian ini, Anda akan men-deploy server inferensi SDXL. Untuk men-deploy server, tutorial ini menggunakan Deployment Kubernetes. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster.
Jelajahi manifes
serve_sdxl_v5e.yaml
.Perbarui project ID dalam manifes.
cd $WORK_DIR sed -i "s|PROJECT_ID|$PROJECT_ID|g" serve_sdxl_v5e.yaml sed -i "s|REGION|$REGION|g" serve_sdxl_v5e.yaml
Terapkan manifes:
kubectl apply -f serve_sdxl_v5e.yaml
Outputnya mirip dengan hal berikut ini:
deployment.apps/max-diffusion-server created
Verifikasi status model:
watch kubectl get deploy
Outputnya mirip dengan hal berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE stable-diffusion-deployment 1/1 1 1 8m21s
Ambil alamat
ClusterIP
:kubectl get service max-diffusion-server
Output berisi kolom
ClusterIP
. Catat nilai CLUSTER-IP.Validasi Deployment:
export ClusterIP=CLUSTER_IP kubectl run curl --image=curlimages/curl \ -it --rm --restart=Never \ -- "$ClusterIP:8000"
Ganti CLUSTER_IP dengan nilai CLUSTER-IP yang Anda catat sebelumnya. Outputnya mirip dengan hal berikut ini:
{"message":"Hello world! From FastAPI running on Uvicorn with Gunicorn."} pod "curl" deleted
Lihat log dari Deployment:
kubectl logs -l app=max-diffusion-server
Setelah Deployment selesai, output-nya akan mirip dengan berikut ini:
2024-06-12 15:45:45,459 [INFO] __main__: replicate params: 2024-06-12 15:45:46,175 [INFO] __main__: start initialized compiling 2024-06-12 15:45:46,175 [INFO] __main__: Compiling ... 2024-06-12 15:45:46,175 [INFO] __main__: aot compiling: 2024-06-12 15:45:46,176 [INFO] __main__: tokenize prompts:2024-06-12 15:48:49,093 [INFO] __main__: Compiled in 182.91802048683167 INFO: Started server process [1] INFO: Waiting for application startup. INFO: Application startup complete.
Men-deploy klien webapp
Di bagian ini, Anda akan men-deploy klien webapp untuk menayangkan model SDXL.
Jelajahi manifes
build/webapp/cloudbuild.yaml
.Jalankan build dan buat image container klien di direktori
build/webapp
.cd $WORK_DIR/build/webapp gcloud builds submit . --region=$REGION
Output-nya berisi jalur image container.
Buka manifes
serve_sdxl_client.yaml
:Edit project ID dalam manifes:
cd $WORK_DIR sed -i "s|PROJECT_ID|$PROJECT_ID|g" serve_sdxl_client.yaml sed -i "s|ClusterIP|$ClusterIP|g" serve_sdxl_client.yaml sed -i "s|REGION|$REGION|g" serve_sdxl_client.yaml
Terapkan manifes:
kubectl apply -f serve_sdxl_client.yaml
Ambil alamat IP
LoadBalancer
:kubectl get service max-diffusion-client-service
Output berisi kolom
LoadBalancer
. Catat nilai EXTERNAL-IP.
Berinteraksi dengan model menggunakan halaman web
Akses ke URL berikut dari browser web:
http://EXTERNAL_IP:8080
Ganti EXTERNAL_IP dengan nilai
EXTERNAL_IP
yang Anda catat sebelumnya.Berinteraksi dengan SDXL menggunakan antarmuka chat. Tambahkan perintah, lalu klik Kirim. Contoh:
Create a detailed image of a fictional historical site, capturing its unique architecture and cultural significance
Outputnya adalah gambar yang dihasilkan model, mirip dengan contoh berikut:
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
- 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.
Menghapus resource satu per satu
Simpan project dan hapus resource individual, seperti yang dijelaskan di bagian berikut. Jalankan perintah berikut dan ikuti petunjuknya:
gcloud container clusters delete ${CLUSTER_NAME} --region=${REGION}
Langkah berikutnya
- Konfigurasikan tutorial dengan topologi TPU lainnya. Untuk mempelajari topologi TPU lainnya lebih lanjut, lihat Merencanakan konfigurasi TPU.
- Jelajahi kode contoh server inferensi MaxDiffusion di repositori contoh yang Anda clone dalam tutorial ini.
- Pelajari TPU di GKE lebih lanjut.
- Jelajahi repositori GitHub JetStream.
- Jelajahi Model Garden Vertex AI.