All Products
Search
Document Center

Container Service for Kubernetes:Mempercepat inferensi teks-ke-gambar Stable Diffusion XL Turbo dengan CPU

Last Updated:Jun 24, 2026

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.

Penting
  • 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) ke ecs.g8i.4xlarge mengurangi biaya instans lebih dari 53%.

  • Kebutuhan throughput moderat: Dengan step=4, batch=16, ecs.g8i.8xlarge menghasilkan 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.

Lihat g8i, keluarga instans tujuan umum.

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.

Lihat Intel® Trust Domain Extensions (Intel® TDX).

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:

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.

  1. Buat file models-oss-secret.yaml dengan 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
  2. Terapkan Secret tersebut.

    kubectl create -f models-oss-secret.yaml

    Output yang diharapkan:

    secret/models-oss-secret created
  3. Buat file models-oss-pv.yaml dengan 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-turbo

    Lihat Metode 1: Gunakan Secret untuk parameter OSS.

  4. Buat PV tersebut.

    kubectl create -f models-oss-pv.yaml

    Output yang diharapkan:

    persistentvolume/models-oss-pv created
  5. Buat file models-oss-pvc.yaml dengan 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
  6. Terapkan PVC tersebut.

    kubectl create -f models-oss-pvc.yaml

    Output yang diharapkan:

    persistentvolumeclaim/models-oss-pvc created
  7. Buat file values.yaml dengan 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

  1. 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.yaml

    Output yang diharapkan:

    NAME: stable-diffusion-ipex
    LAST DEPLOYED: Mon Jan 22 20:42:35 2024
    NAMESPACE: default
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
  2. Tunggu sekitar 10 menit hingga model dimuat, lalu verifikasi pod sedang berjalan.

    kubectl get pod | grep stable-diffusion-ipex

    Output 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

  1. Teruskan port layanan ke mesin lokal Anda.

    kubectl port-forward svc/stable-diffusion-ipex 5000:5000

    Output yang diharapkan:

    Forwarding from 127.0.0.1:5000 -> 5000
    Forwarding from [::1]:5000 -> 5000
  2. Kirim permintaan generasi. Ukuran yang didukung: 512x512 dan 1024x1024. Gambar 512x512

    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}'

    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 url di 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.

Lihat Buat kelompok node yang mendukung VM rahasia TDX.

Migrasi layanan

  1. Buat file tdx_values.yaml dengan selector node berikut. Ganti tdx-vm-pool jika Anda menggunakan nilai label berbeda.

    nodeSelector:
      nodepool-label: tdx-vm-pool
  2. 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.yaml

    Output 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
  3. Tunggu sekitar 10 menit, lalu verifikasi pod berjalan di kelompok node TDX.

    kubectl get pod | grep stable-diffusion-ipex

    Output yang diharapkan:

    stable-diffusion-ipex-7f8c4f88f5-r478t   1/1     Running   0   1m44s
  4. 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

Parameter Tipe Deskripsi
prompt string Prompt teks untuk generasi gambar.
number integer Jumlah gambar yang akan dihasilkan. Total jumlah gambar adalah number × batch.
size string Ukuran gambar output. Default: 512x512. Nilai valid: 512x512, 1024x1024.
step integer Jumlah langkah penyebaran. Default: 4.
batch integer Ukuran batch. Default: 1.

Contoh permintaan

{
  "prompt": "A panda listening to music with headphones. highly detailed, 8k.",
  "number": 1
}

Parameter respons

Parameter Tipe Deskripsi
id string ID tugas.
averageImageGenerationTimeSeconds float Waktu rata-rata untuk menghasilkan satu gambar, dalam detik.
generationTimeSeconds float Total waktu untuk menghasilkan semua gambar, dalam detik.
meta object Metadata tugas.
meta.input object Parameter input yang dikembalikan: model, batch, step, number, size, prompt.
output array Hasil gambar. Ketika number > 1, gambar gabungan tambahan (image_grid.png) disertakan.
output[].url string URL gambar yang dihasilkan. Hanya dapat diakses di browser ketika replicaCount bernilai 1.
output[].latencySeconds float Waktu untuk menghasilkan batch ini, dalam detik.
status string Status tugas.

Contoh respons

{
  "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"
}

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

Penting

Tolok ukur GPU berasal dari Lambda Diffusers Benchmarking inference. Hasil aktual dapat berbeda.

image image

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.

Langkah selanjutnya