Gunakan node pekerja ECS g8i di kluster ACK dengan IPEX untuk inferensi teks-ke-gambar yang hemat biaya, dan opsional memigrasikan ke kelompok node VM rahasia TDX demi kerahasiaan data.
Topik ini menggunakan model stabilityai/sdxl-turbo sebagai contoh.
-
Alibaba Cloud tidak menjamin legalitas, keamanan, atau akurasi model pihak ketiga "Stable Diffusion" dan "stabilityai/sdxl-turbo". Alibaba Cloud tidak bertanggung jawab atas kerugian atau kerusakan apa pun yang timbul dari penggunaan model-model tersebut.
-
Patuhi perjanjian pengguna, spesifikasi penggunaan, serta hukum dan peraturan terkait dari model pihak ketiga tersebut. Penggunaan model-model ini sepenuhnya menjadi risiko Anda sendiri.
-
Layanan contoh ini hanya ditujukan untuk pembelajaran, pengujian, dan proof of concept (POC). Statistik yang disajikan hanya bersifat referensi. Hasil aktual dapat berbeda tergantung lingkungan.
Kapan menggunakan inferensi CPU
g8i + IPEX + Advanced Matrix Extensions (AMX) merupakan alternatif praktis terhadap inferensi GPU ketika:
-
Biaya menjadi prioritas utama: Beralih dari
ecs.gn7i-c8g1.2xlarge(GPU) keecs.g8i.4xlargemengurangi biaya instans lebih dari 53%. -
Kebutuhan throughput moderat: Dengan step=4, batch=16,
ecs.g8i.8xlargemenghasilkan 1,2 gambar/detik — melebihi ambang batas 1 gambar/detik untuk banyak beban kerja produksi. -
Diperlukan kerahasiaan data: Migrasikan ke kelompok node VM rahasia TDX tanpa perubahan kode.
Jika SLO latensi Anda memerlukan throughput setara GPU (0,4 gambar/detik pada step=30, batch=16), pertahankan instans GPU. Namun, jika 1,2 gambar/detik pada step=4 sudah memadai, g8i lebih hemat biaya.
Latar Belakang
Keluarga instans g8i
Keluarga instans ECS tujuan umum g8i didukung oleh Cloud Infrastructure Processing Units (CIPUs) dan Apsara Stack. Instans ini menggunakan prosesor Intel® Xeon® Scalable generasi ke-5 (kode nama Emerald Rapids) dengan AMX untuk akselerasi AI. Semua instans g8i mendukung Intel® TDX, memungkinkan beban kerja Trusted Execution Environment (TEE) dengan overhead kinerja minimal dan tanpa perubahan kode.
Intel® TDX
Intel® TDX adalah teknologi TEE berbasis perangkat keras yang mengisolasi dan mengenkripsi instans ECS, melindungi register CPU, memori, dan injeksi interupsi saat runtime. Teknologi ini membantu mencegah akses tidak sah ke proses dan data sensitif tanpa perubahan kode.
IPEX
Intel® Extension for PyTorch (IPEX) adalah ekstensi open source PyTorch yang mempercepat AI pada prosesor Intel, terus-menerus dioptimalkan untuk perangkat keras dan perangkat lunak Intel terbaru.
Lihat IPEX.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Kluster ACK Pro di wilayah China (Beijing). Lihat Buat kluster ACK yang dikelola.
-
Kelompok node dengan instans ECS g8i yang memenuhi persyaratan berikut:
-
Tipe instans: Minimal 16 vCPU. Direkomendasikan:
ecs.g8i.4xlarge,ecs.g8i.8xlarge, atauecs.g8i.12xlarge. -
Ruang disk: Minimal 200 GiB per node (disk sistem atau disk data).
-
Wilayah dan zona: Wilayah dan zona tempat instans g8i tersedia. Periksa Tipe instans yang tersedia untuk setiap wilayah.
-
-
kubectl terhubung ke kluster ACK. Lihat Hubungkan ke kluster ACK menggunakan kubectl.
Langkah 1: Siapkan model
Penerapan ini menggunakan model stabilityai/sdxl-turbo. Pilih opsi berdasarkan lokasi penyimpanan model Anda.
Opsi 1: Gunakan model resmi (direkomendasikan)
Gambar Helm chart (v0.1.5) telah menyertakan model resmi stabilityai/sdxl-turbo. Buat file values.yaml dengan konten berikut. Sesuaikan CPU dan memori sesuai tipe instans Anda.
resources:
limits:
cpu: "16"
memory: 32Gi
requests:
cpu: "14"
memory: 24Gi
Opsi 2: Gunakan model kustom dari OSS
Jika Anda menyimpan model kustom stabilityai/sdxl-turbo di Object Storage Service (OSS), pasang model tersebut menggunakan PersistentVolume (PV) dan PersistentVolumeClaim (PVC).
Buat Pengguna Resource Access Management (RAM) dengan izin baca OSS dan dapatkan Pasangan Kunci Aksesnya.
-
Buat file
models-oss-secret.yamldengan konten berikut.apiVersion: v1 kind: Secret metadata: name: models-oss-secret namespace: default stringData: akId: <your-access-key-id> # ID AccessKey dari Pengguna RAM akSecret: <your-access-key-secret> # Rahasia AccessKey dari Pengguna RAM -
Terapkan Secret tersebut.
kubectl create -f models-oss-secret.yamlOutput yang diharapkan:
secret/models-oss-secret created -
Buat file
models-oss-pv.yamldengan konten berikut. Ganti placeholder dengan detail bucket OSS Anda.apiVersion: v1 kind: PersistentVolume metadata: name: models-oss-pv labels: alicloud-pvname: models-oss-pv spec: capacity: storage: 50Gi accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: models-oss-pv nodePublishSecretRef: name: models-oss-secret namespace: default volumeAttributes: bucket: "<your-bucket-name>" # Bucket OSS yang akan dipasang url: "<your-oss-endpoint>" # Gunakan titik akhir internal, misalnya oss-cn-beijing-internal.aliyuncs.com otherOpts: "-o umask=022 -o max_stat_cache_size=0 -o allow_other" path: "/models" # Harus berisi subdirektori stabilityai/sdxl-turboLihat Metode 1: Gunakan Secret untuk parameter OSS.
-
Buat PV tersebut.
kubectl create -f models-oss-pv.yamlOutput yang diharapkan:
persistentvolume/models-oss-pv created -
Buat file
models-oss-pvc.yamldengan konten berikut.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: models-oss-pvc spec: accessModes: - ReadOnlyMany resources: requests: storage: 50Gi selector: matchLabels: alicloud-pvname: models-oss-pv -
Terapkan PVC tersebut.
kubectl create -f models-oss-pvc.yamlOutput yang diharapkan:
persistentvolumeclaim/models-oss-pvc created -
Buat file
values.yamldengan volume model kustom diaktifkan. Sesuaikan resource sesuai tipe instans Anda.resources: limits: cpu: "16" memory: 32Gi requests: cpu: "14" memory: 24Gi # Atur ke true untuk memasang model kustom dari OSS alih-alih menggunakan model dalam gambar. useCustomModels: true volumes: models: name: data-volume persistentVolumeClaim: claimName: models-oss-pvc
Referensi lengkap values.yaml
Helm chart mendukung opsi tambahan selain resource dan sumber model. Nilai default:
# Jumlah replika pod.
replicaCount: 1
# Konfigurasi gambar kontainer.
image:
repository: registry-vpc.cn-beijing.aliyuncs.com/eric-dev/stable-diffusion-ipex
pullPolicy: IfNotPresent
tag: "v0.1.5" # Menyertakan model resmi stabilityai/sdxl-turbo
tagOnlyApi: "v0.1.5-lite" # Gambar khusus API; memerlukan pemasangan model manual (lihat useCustomModels)
# Kredensial untuk menarik gambar kontainer privat.
imagePullSecrets: []
# Jalur output untuk gambar yang dihasilkan di dalam kontainer.
outputDirPath: /tmp/sd
# Atur ke true untuk menggunakan model kustom yang dipasang melalui PVC volumes.models.
# Jika false, gambar image.tag (yang mencakup model) akan digunakan.
useCustomModels: false
volumes:
# Volume untuk jalur output gambar.
output:
name: output-volume
emptyDir: {}
# Volume untuk model kustom. Hanya aktif jika useCustomModels: true.
# Letakkan model di subdirektori stabilityai/sdxl-turbo dari jalur mount.
models:
name: data-volume
persistentVolumeClaim:
claimName: models-oss-pvc
# Alternatifnya, gunakan host path:
# models:
# hostPath:
# path: /data/models
# type: DirectoryOrCreate
# Konfigurasi layanan.
service:
type: ClusterIP
port: 5000
# Batas dan permintaan resource kontainer.
resources:
limits:
cpu: "16"
memory: 32Gi
requests:
cpu: "14"
memory: 24Gi
# Strategi pembaruan beban kerja.
strategy:
type: RollingUpdate
# Konfigurasi penjadwalan.
nodeSelector: {}
tolerations: []
affinity: {}
# Pengaturan keamanan kontainer.
securityContext:
capabilities:
drop:
- ALL
runAsNonRoot: true
runAsUser: 1000
# Konfigurasi Horizontal Pod Autoscaler (HPA).
# https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 3
targetCPUUtilizationPercentage: 80
targetMemoryUtilizationPercentage: 90
Langkah 2: Terapkan layanan
-
Terapkan layanan Stable Diffusion XL Turbo yang dipercepat IPEX menggunakan Helm.
helm install stable-diffusion-ipex \ https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.7.tgz \ -f values.yamlOutput yang diharapkan:
NAME: stable-diffusion-ipex LAST DEPLOYED: Mon Jan 22 20:42:35 2024 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None -
Tunggu sekitar 10 menit hingga model dimuat, lalu verifikasi pod sedang berjalan.
kubectl get pod | grep stable-diffusion-ipexOutput yang diharapkan:
stable-diffusion-ipex-65d98cc78-vmj49 1/1 Running 0 1m44s
Setelah berjalan, layanan ini mengekspos API teks-ke-gambar di port 5000. Lihat referensi API untuk parameter.
Langkah 3: Uji layanan
-
Teruskan port layanan ke mesin lokal Anda.
kubectl port-forward svc/stable-diffusion-ipex 5000:5000Output yang diharapkan:
Forwarding from 127.0.0.1:5000 -> 5000 Forwarding from [::1]:5000 -> 5000 -
Kirim permintaan generasi. Ukuran yang didukung:
512x512dan1024x1024. Gambar 512x512curl -X POST http://127.0.0.1:5000/api/text2image \ -d '{"prompt": "A panda listening to music with headphones. highly detailed, 8k.", "number": 1}'Output yang diharapkan:
{ "averageImageGenerationTimeSeconds": 2.0333826541900635, "generationTimeSeconds": 2.0333826541900635, "id": "9ae43577-170b-45c9-ab80-69c783b41a70", "meta": { "input": { "batch": 1, "model": "stabilityai/sdxl-turbo", "number": 1, "prompt": "A panda listening to music with headphones. highly detailed, 8k.", "size": "512x512", "step": 4 } }, "output": [ { "latencySeconds": 2.0333826541900635, "url": "http://127.0.0.1:5000/images/9ae43577-170b-45c9-ab80-69c783b41a70/0_0.png" } ], "status": "success" }Gambar 1024x1024
curl -X POST http://127.0.0.1:5000/api/text2image \ -d '{"prompt": "A panda listening to music with headphones. highly detailed, 8k.", "number": 1, "size": "1024x1024"}'Output yang diharapkan:
{ "averageImageGenerationTimeSeconds": 8.635204315185547, "generationTimeSeconds": 8.635204315185547, "id": "ac341ced-430d-4952-b9f9-efa57b4eeb60", "meta": { "input": { "batch": 1, "model": "stabilityai/sdxl-turbo", "number": 1, "prompt": "A panda listening to music with headphones. highly detailed, 8k.", "size": "1024x1024", "step": 4 } }, "output": [ { "latencySeconds": 8.635204315185547, "url": "http://127.0.0.1:5000/images/ac341ced-430d-4952-b9f9-efa57b4eeb60/0_0.png" } ], "status": "success" }Buka
urldi browser untuk melihat gambar yang dihasilkan.
Tolok ukur kinerja
Waktu generasi rata-rata pada tipe instans g8i (batch: 1, step: 4). Hasil hanya untuk referensi.
| Tipe instans | Permintaan/batas Pod (vCPU) | Durasi rata-rata — 512x512 | Durasi rata-rata — 1024x1024 |
|---|---|---|---|
| ecs.g8i.4xlarge (16 vCPU, 64 GiB) | 14/16 | 2,2 dtk | 8,8 dtk |
| ecs.g8i.8xlarge (32 vCPU, 128 GiB) | 24/32 | 1,3 dtk | 4,7 dtk |
| ecs.g8i.12xlarge (48 vCPU, 192 GiB) | 32/32 | 1,1 dtk | 3,9 dtk |
Rekomendasi: ecs.g8i.8xlarge memberikan keseimbangan biaya-terhadap-throughput terbaik. Pada step=4, batch=16, menghasilkan 1,2 gambar/detik tanpa mengorbankan kualitas gambar.
(Opsional) Langkah 4: Migrasi ke kelompok node VM rahasia TDX
Migrasikan layanan yang telah diterapkan ke kelompok node VM rahasia TDX untuk isolasi dan enkripsi memori berbasis perangkat keras. Tidak diperlukan perubahan kode.
Prasyarat
Kelompok node VM rahasia TDX telah ada di kluster ACK dengan konfigurasi berikut:
-
Tipe instans: Minimal 16 vCPU. Direkomendasikan:
ecs.g8i.4xlarge. -
Ruang disk: Minimal 200 GiB per node.
-
Label node:
nodepool-label=tdx-vm-pool.
Migrasi layanan
-
Buat file
tdx_values.yamldengan selector node berikut. Gantitdx-vm-pooljika Anda menggunakan nilai label berbeda.nodeSelector: nodepool-label: tdx-vm-pool -
Perbarui rilis Helm untuk menjadwalkan ulang pod ke kelompok node TDX.
helm upgrade stable-diffusion-ipex \ https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/pre/charts-incubator/stable-diffusion-ipex-0.1.7.tgz \ -f tdx_values.yamlOutput yang diharapkan:
Release "stable-diffusion-ipex" has been upgraded. Happy Helming! NAME: stable-diffusion-ipex LAST DEPLOYED: Wed Jan 24 16:38:04 2024 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None -
Tunggu sekitar 10 menit, lalu verifikasi pod berjalan di kelompok node TDX.
kubectl get pod | grep stable-diffusion-ipexOutput yang diharapkan:
stable-diffusion-ipex-7f8c4f88f5-r478t 1/1 Running 0 1m44s -
Ulangi Langkah 3: Uji layanan untuk memverifikasi model berfungsi di kelompok node TDX.
Referensi API
Setelah penerapan, layanan ini mengekspos REST API di port 5000.
Sintaksis permintaan
POST /api/text2image
Parameter permintaan
Contoh permintaan
Parameter respons
Contoh respons
Perbandingan kinerja
Kelompok node g8i menggunakan AMX dan IPEX untuk mempercepat inferensi CPU. Tolok ukur menggunakan ecs.g8i.8xlarge (32 vCPU, 128 GiB) dengan alat tolok ukur lambda-diffusers. Hasil hanya untuk referensi.
Tolok ukur akselerasi CPU
| Tipe instans | Model | Step | Perintah |
|---|---|---|---|
| ecs.g8i.8xlarge (32 vCPU, 128 GiB) | sdxl-turbo | 4 | python sd_pipe_sdxl_turbo.py --bf16 --batch 1 --height 512 --width 512 --repeat 5 --step 4 --prompt "A panda listening to music with headphones. highly detailed, 8k" |
| ecs.g8i.8xlarge (32 vCPU, 128 GiB) | stable-diffusion-2-1-base | 30 | python sd_pipe_infer.py --model /data/models/stable-diffusion-2-1-base --bf16 --batch 1 --height 512 --width 512 --repeat 5 --step 30 --prompt "A panda listening to music with headphones. highly detailed, 8k" |
Hasil kinerja (gambar/detik):
| Konfigurasi | Throughput |
|---|---|
| ecs.g8i.8xlarge, step=4, batch=16 (sdxl-turbo) | 1,2 gambar/detik |
| ecs.g8i.8xlarge, step=30, batch=16 (sd-2-1-base) | 0,14 gambar/detik |
Tolok ukur akselerasi GPU
Tolok ukur GPU berasal dari Lambda Diffusers Benchmarking inference. Hasil aktual dapat berbeda.
Perbandingan biaya
Estimasi ini membandingkan instans CPU g8i dengan ecs.gn7i-c8g1.2xlarge (GPU). Untuk harga terkini, lihat tab Pricing di halaman Elastic Compute Service.
| Tipe instans | Biaya vs. ecs.gn7i-c8g1.2xlarge | Throughput pada step=4, batch=16 |
|---|---|---|
| ecs.g8i.8xlarge | 9% lebih rendah | 1,2 gambar/detik |
| ecs.g8i.4xlarge | >53% lebih rendah | 0,5 gambar/detik |
Gunakan ecs.g8i.8xlarge ketika Anda memerlukan penghematan biaya sekaligus throughput di atas 1 gambar/detik. Gunakan ecs.g8i.4xlarge ketika pengurangan biaya, kerahasiaan data berbasis TEE, atau ketersediaan sumber daya CPU skala besar menjadi prioritas utama dan throughput 0,5 gambar/detik sudah memenuhi kebutuhan Anda.