Tutorial ini menunjukkan cara menyajikan Model pembuatan gambar SDXL menggunakan Tensor Processing Unit (TPU) di Google Kubernetes Engine (GKE) dengan MaxDiffusion. Dalam tutorial ini, Anda download model dari Hugging Face dan deploy model dengan Autopilot atau Standard menggunakan kontainer yang menjalankan MaxDiffusion.
Panduan ini merupakan titik awal yang baik jika Anda membutuhkan kontrol terperinci, penyesuaian, skalabilitas, ketahanan, portabilitas, dan efektivitas biaya layanan Kubernetes saat men-deploy dan melayani workload AI/ML Anda. Jika Anda memerlukan platform AI terkelola terpadu untuk membangun dan menyalurkan model ML dengan cepat secara efektif, kami sarankan Anda untuk mencoba Solusi deployment Vertex AI.
Latar belakang
Dengan menyajikan SDXL menggunakan TPU di GKE menggunakan MaxDiffusion, Anda dapat membuat solusi inferensi yang tangguh dan siap produksi dengan semua manfaat Kubernetes terkelola, termasuk efisiensi biaya, skalabilitas, dan ketersediaan lebih tinggi. Bagian ini menjelaskan teknologi utama yang digunakan dalam tutorial ini.
Stabil 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 seperti penelusuran gambar dan keterangan gambar.
SDXL mendukung inferensi tunggal atau multi-host dengan anotasi sharding. Hal ini memungkinkan SDXL dilatih dan dijalankan di banyak komputer, yang dapat meningkatkan efisiensi.
Untuk mempelajari lebih lanjut, lihat Repositori Model Generatif berdasarkan Stability AI dan Kertas SDXL.
TPU
TPU adalah sirkuit terintegrasi khusus aplikasi Google yang dikembangkan (ASIC) yang digunakan untuk mempercepat machine learning dan model AI yang dibangun 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 penyajian model SDXL. GKE
men-deploy model pada node TPU v5e host tunggal dengan topologi TPU yang dikonfigurasi
berdasarkan persyaratan model untuk menyalurkan prompt dengan latensi rendah. Di sini
, model ini menggunakan chip TPU v5e dengan topologi 1x1
.
MaxDiffusion
MaxDiffusion adalah kumpulan referensi implementasi, yang ditulis dalam Python dan Jax, dari berbagai model difusi laten yang berjalan di perangkat XLA, termasuk TPU dan GPU. MaxDiffusion adalah proyek Difusi, baik untuk riset maupun produksi.
Untuk mempelajari lebih lanjut, lihat repositori MaxDiffusion.
Tujuan
Tutorial ini ditujukan untuk pelanggan AI generatif yang menggunakan JAX, model baru atau pengguna SDXL yang sudah ada, dan ML Engineer, engineer MLOps (DevOps), atau administrator platform yang tertarik menggunakan container Kubernetes kemampuan orkestrasi untuk menginferensi LLM.
Tutorial ini membahas langkah-langkah berikut:
- Membuat cluster GKE Autopilot atau Standard dengan topologi TPU yang direkomendasikan, berdasarkan karakteristik model.
- Bangun image container inferensi SDXL.
- Men-deploy server inferensi SDXL di GKE.
- Menyajikan interaksi dengan model melalui aplikasi web.
Arsitektur
Bagian ini menjelaskan arsitektur GKE yang digunakan dalam tutorial ini. Arsitekturnya terdiri dari GKE Autopilot atau Cluster standar yang menyediakan TPU dan menghosting komponen MaxDiffusion. GKE menggunakan komponen ini untuk men-deploy dan menyalurkan model.
Diagram berikut menampilkan komponen arsitektur ini:
Arsitektur ini mencakup komponen berikut:
- Cluster regional Standar atau Autopilot GKE.
- Satu kumpulan node 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 model pengalihan yang melayani traffic keClusterIP
Layanan.
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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API yang diperlukan.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API yang diperlukan.
-
Pastikan Anda memiliki peran berikut di project: roles/container.admin, roles/iam.serviceAccountAdmin
Memeriksa peran
-
Di konsol Google Cloud, buka halaman IAM.
Buka IAM - Pilih project.
-
Di kolom Akun utama, cari baris yang berisi alamat email Anda.
Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.
- Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.
Memberikan peran
-
Di konsol Google Cloud, buka halaman IAM.
Buka IAM - Pilih project.
- Klik Berikan akses.
- Di kolom Akun utama baru, masukkan alamat email Anda.
- 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
TPU v5e PodSlice Lite
chip. Dalam tutorial ini, Anda menggunakan instance on-demand.
Menyiapkan lingkungan
Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah dilengkapi dengan software yang 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: project ID Google Cloud Anda.
- CLUSTER_NAME: nama cluster GKE Anda.
- REGION_NAME: region tempat GKE Anda
ada cluster, bucket Cloud Storage, dan TPU node. Wilayah
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.
Buat 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 berikut untuk membuat resource yang diperlukan.
Membuat cluster GKE
Anda dapat menyalurkan SDXL di TPU dengan Autopilot GKE atau Standard Anda. Sebaiknya gunakan Autopilot untuk pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode operasi GKE yang paling cocok 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}
Standard
Buat cluster GKE Standard 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 memerlukan waktu beberapa menit.
Jalankan perintah berikut untuk membuat kumpulan node 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 kumpulan node dengan topologi yang berbeda, pelajari cara Rencanakan konfigurasi TPU Anda. Pastikan Anda memperbarui nilai sampel dalam tutor ini, seperti sebagai
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}
Membangun container inferensi SDXL
Ikuti petunjuk ini untuk membangun image container bagi 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 berisi jalur image container.
Men-deploy server inferensi SDXL
Pelajari manifes
serve_sdxl_v5e.yaml
.Perbarui project ID di 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 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, outputnya 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 aplikasi web untuk menyalurkan SDXL model transformer.
Pelajari manifes
build/webapp/cloudbuild.yaml
.Jalankan build dan buat image container klien di bagian Direktori
build/webapp
.cd $WORK_DIR/build/webapp gcloud builds submit . --region=$REGION
Output 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.
Berinteraksilah dengan model menggunakan halaman web
Akses ke URL berikut dari browser web:
http://EXTERNAL_IP:8080
Ganti EXTERNAL_IP dengan nilai
EXTERNAL_IP
yang yang Anda catat sebelumnya.Berinteraksilah dengan SDXL menggunakan antarmuka chat. Tambahkan perintah dan klik Kirim. Contoh:
Create a detailed image of a fictional historical site, capturing its unique architecture and cultural significance
Output-nya adalah gambar buatan model yang 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
- 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.
Menghapus resource satu per satu
Simpan project dan hapus setiap resource, seperti yang dijelaskan di bagian berikut. Jalankan perintah berikut dan ikuti petunjuknya:
gcloud container clusters delete ${CLUSTER_NAME} --region=${REGION}
Langkah selanjutnya
- Konfigurasikan tutorial dengan topologi TPU lainnya. Untuk mempelajari lebih lanjut topologi TPU lainnya, lihat Merencanakan konfigurasi TPU.
- Pelajari kode contoh server inferensi MaxDiffusion di repositori contoh yang Anda clone dalam tutorial ini.
- Pelajari lebih lanjut TPU di GKE.
- Pelajari repositori GitHub JetStream.
- Pelajari Vertex AI Model Garden.