Bagikan melalui


Tutorial: Menyebarkan pembuatan gambar AI dengan GPU tanpa server

Dalam tutorial ini, Anda menyebarkan generator gambar yang didukung Diffusion Stabil menggunakan GPU tanpa server di Azure Container Apps. Anda dapat menyebarkan solusi ini baik sebagai aplikasi Azure Functions atau sebagai aplikasi kontainer standar, tergantung pada kebutuhan Anda.

GPU tanpa server menyediakan akses sesuai permintaan ke sumber daya komputasi GPU tanpa manajemen infrastruktur. Anda hanya membayar untuk waktu GPU yang Anda gunakan, dan solusi secara otomatis diskalakan ke nol saat diam.

Dalam tutorial ini, Anda akan belajar cara:

  • Membuat lingkungan Container Apps dengan profil beban kerja GPU
  • Menyebarkan API pembuatan gambar AI menggunakan GPU tanpa server
  • Menguji penyebaran dengan permintaan teks ke gambar
  • Memantau pemanfaatan GPU dan mengoptimalkan performa
  • Membersihkan sumber daya untuk menghindari biaya yang tidak perlu

Prasyarat

Persyaratan Description
Langganan Azure Jika Anda tidak memilikinya, buat akun gratis.
Kuota GPU Minta akses kuota GPU. Persetujuan biasanya memakan waktu satu hingga dua hari kerja.
Azure CLI (antarmuka baris perintah Azure) Instal Azure CLI versi 2.62.0 atau yang lebih baru.
Azure Developer CLI Instal Azure Developer CLI untuk penyebaran yang disederhanakan.
** Docker Desktop Diperlukan untuk pengembangan kontainer lokal. Instal Docker Desktop.

Penting

Minta akses kuota GPU sebelum memulai tutorial ini. Anda dapat melanjutkan membaca saat menunggu persetujuan, tetapi penyebaran memerlukan kuota yang disetujui.

Untuk memverifikasi bahwa alat Anda diinstal dengan benar, jalankan perintah berikut:

az --version
azd version
docker --version

Gambaran umum arsitektur

Solusi ini menggunakan layanan Azure berikut:

Komponen Tujuan
Azure Container Apps Menghosting aplikasi Anda dengan dukungan GPU tanpa server
Profil beban kerja GPU Menyediakan komputasi GPU NVIDIA T4 untuk inferensi AI
Azure Container Registry Menyimpan gambar kontainer kustom Anda
Azure Storage Diperlukan untuk runtime Azure Functions (khusus untuk penyebaran Functions)
Wawasan Aplikasi Menyediakan pemantauan dan diagnostik

Aplikasi ini mengikuti alur permintaan langsung. Saat klien mengirim permintaan, permintaan tersebut pertama kali mencapai titik akhir ingress Container Apps. Aplikasi Anda kemudian memproses permintaan dan meneruskannya ke model Diffusion Stabil yang berjalan pada GPU. Model menghasilkan gambar yang diminta berdasarkan permintaan Anda dan mengembalikan gambar yang dihasilkan sebagai respons terhadap klien.

Pertimbangan biaya

GPU tanpa server menggunakan penagihan per detik. Tinjau faktor biaya ini sebelum menyebarkan:

Faktor Dampak
Jenis GPU NVIDIA T4 harganya kurang dari A100
Replika minimum Atur ke 0 untuk pengembangan (akan menjadi nol saat tidak aktif)
Waktu mulai dingin Permintaan pertama membutuhkan waktu 1-2 menit (pemuatan model)
Durasi permintaan Pembuatan gambar biasanya membutuhkan waktu 5-15 detik

Untuk harga terperinci, lihat Harga Azure Container Apps.

Dapatkan kode contoh

Kloning repositori sampel yang berisi implementasi Azure Functions:

git clone https://github.com/Azure-Samples/function-on-aca-gpu.git
cd function-on-aca-gpu

Repositori berisi:

File Tujuan
function_app.py Fungsi yang dipicu HTTP untuk pembuatan gambar
requirements.txt Dependensi Python termasuk pustaka bernama diffusers
Dockerfile Definisi gambar kontainer dengan dukungan GPU
host.json Konfigurasi Azure Functions
azure.yaml Konfigurasi penyebaran Azure Developer CLI

Menyebarkan dengan menggunakan portal Microsoft Azure

Ikuti langkah-langkah ini untuk membuat aplikasi kontainer berkemampuan GPU dan menyebarkan solusi pembuatan gambar dengan menggunakan portal Microsoft Azure.

Membuat lingkungan Container Apps dengan GPU

  1. Di portal Microsoft Azure, cari Aplikasi Kontainer dan pilih.

  2. Pilih Buat>Aplikasi Kontainer.

  3. Di tab Dasar, konfigurasikan pengaturan berikut:

    Setting Nilai
    Subscription Pilih langganan Azure Anda
    grup Sumber Daya Pilih Buat baru dan masukkan rg-gpu-image-gen
    Nama aplikasi kontainer Masukkan ca-image-gen
    Sumber penyebaran Pilih gambar Kontainer
    Wilayah Pilih Swedia Tengah
  4. Di bawah Lingkungan Aplikasi Kontainer, pilih Buat baru.

  5. Di panel Buat lingkungan Aplikasi Kontainer , masukkan cae-gpu-image-gen untuk nama lingkungan.

  6. Pilih Buat untuk membuat lingkungan.

  7. Pilih Berikutnya: Kontainer >.

Mengonfigurasi kontainer dengan GPU

  1. Pada tab Kontainer , konfigurasikan pengaturan berikut:

    Setting Nilai
    Nama Masukkan gpu-image-gen-container
    Sumber gambar Pilih Docker Hub atau registri lainnya
    Jenis gambar Pilih Publik
    server masuk Registri Masukkan mcr.microsoft.com
    Gambar dan tag Masukkan k8se/gpu-quickstart:latest
    Profil beban kerja Pilih Konsumsi - Hingga 4 vCPU, memori 8 GiB
    GPU Untuk mengaktifkan GPU, pilih kotak centang
    Jenis GPU Pilih Consumption-GPU-NC8as-T4 lalu klik tautannya untuk menambahkan profil
  2. Pilih Berikutnya: Ingress >.

Mengonfigurasi akses masuk

  1. Pada tab Ingress , konfigurasikan pengaturan berikut:

    Setting Nilai
    Ingress Pilih Diaktifkan
    lalu lintas yang masuk Pilih Menerima lalu lintas dari mana saja
    port target Masukkan 80
  2. Pilih Tinjau + kreasikan.

  3. Tinjau pengaturan Anda dan pilih Buat.

  4. Tunggu hingga penyebaran selesai (sekitar 5 menit), lalu pilih Buka sumber daya.

Verifikasi proses penyebaran

  1. Pada halaman Gambaran Umum aplikasi kontainer, salin URL Aplikasi.

  2. Buka URL di browser untuk mengakses antarmuka pembuatan gambar.

Menyebarkan dengan Azure CLI

Anda dapat menyebarkan dengan menggunakan Azure Developer CLI (disarankan untuk aplikasi Functions) atau Azure CLI (untuk kontrol lebih besar atas sumber daya individual).

Opsi A: Sebarkan sebagai aplikasi Azure Functions dengan azd

Azure Developer CLI memberikan pengalaman penyebaran tercepat untuk implementasi Azure Functions.

  1. Navigasi ke repositori kloning:

    cd function-on-aca-gpu
    
  2. Menginisialisasi dan menyebarkan aplikasi:

    azd up
    
  3. Saat diminta, berikan nilai berikut:

    Cepat Nilai
    Nama lingkungan Masukkan nama unik (misalnya, gpufunc-dev)
    Lokasi Azure Pilih swedencentral
    langganan Azure Pilih langganan Anda

    Penyebaran membutuhkan waktu sekitar 15-20 menit.

  4. Saat penyebaran selesai, perhatikan URL titik akhir yang ditampilkan dalam output.

Perintah azd up membuat sumber daya berikut:

Sumber Daya Tujuan
Grup sumber daya Kontainer untuk segala sumber daya
Grup sumber daya Kontainer untuk semua sumber daya
Lingkungan Aplikasi Container Menghosting aplikasi dengan profil beban kerja GPU
Registri kontainer Menyimpan gambar kontainer kustom Anda
Akun penyimpanan Diperlukan untuk runtime Azure Functions
Application Insights Pemantauan dan diagnostik
Aplikasi Fungsi API pembuatan gambar

Opsi B: Menyebarkan sebagai aplikasi kontainer dengan menggunakan Azure CLI

Untuk kontrol lebih besar atas penyebaran, gunakan Azure CLI untuk membuat setiap sumber daya satu per satu.

  1. Atur variabel lingkungan:

    RESOURCE_GROUP="rg-gpu-image-gen"
    ENVIRONMENT_NAME="cae-gpu-image-gen"
    LOCATION="swedencentral"
    CONTAINER_APP_NAME="ca-image-gen"
    CONTAINER_IMAGE="mcr.microsoft.com/k8se/gpu-quickstart:latest"
    WORKLOAD_PROFILE_NAME="NC8as-T4"
    WORKLOAD_PROFILE_TYPE="Consumption-GPU-NC8as-T4"
    

    Skrip ini mendefinisikan nilai konfigurasi yang digunakan di seluruh penyebaran. WORKLOAD_PROFILE_TYPE menentukan konfigurasi GPU NVIDIA T4.

  2. Buat grup sumber daya:

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState" \
      --output tsv
    

    Perintah membuat grup sumber daya di Swedia Tengah, yang mendukung profil beban kerja GPU. Output harus menampilkan Succeeded.

  3. Buat lingkungan Container Apps:

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState" \
      --output tsv
    

    Perintah ini membuat lingkungan terkelola yang menghosting aplikasi kontainer Anda. Output harus menampilkan Succeeded.

  4. Tambahkan profil beban kerja GPU ke lingkungan Anda:

    az containerapp env workload-profile add \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --workload-profile-name $WORKLOAD_PROFILE_NAME \
      --workload-profile-type $WORKLOAD_PROFILE_TYPE
    

    Perintah ini menambahkan profil beban kerja GPU NVIDIA T4 ke lingkungan Anda. Profil memungkinkan komputasi GPU untuk kontainer yang memerlukannya.

  5. Buat aplikasi kontainer dengan dukungan GPU:

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT_NAME \
      --image $CONTAINER_IMAGE \
      --target-port 80 \
      --ingress external \
      --cpu 8.0 \
      --memory 56.0Gi \
      --workload-profile-name $WORKLOAD_PROFILE_NAME \
      --query properties.configuration.ingress.fqdn \
      --output tsv
    

    Perintah ini membuat aplikasi kontainer dan menetapkannya ke profil beban kerja GPU. Nilai --cpu dan --memory cocok dengan persyaratan profil T4. Perintah menghasilkan URL aplikasi.

  6. Salin URL output untuk pengujian di bagian berikutnya.

Menguji API pembuatan gambar

Nota

Permintaan pertama membutuhkan waktu satu hingga dua menit saat model mengunduh (sekitar 5 GB) dan dimuat ke dalam memori GPU. Permintaan berikutnya selesai dalam 5-15 detik.

Verifikasi bahwa aplikasi sedang berjalan

Buka URL aplikasi di browser. Anda akan melihat antarmuka pembuatan gambar.

Membuat gambar menggunakan UI

  1. Di bidang teks, masukkan perintah seperti:

    A friendly robot chef cooking pasta in a cozy kitchen, digital art style
    
  2. Pilih Hasilkan Gambar.

  3. Tunggu hingga gambar muncul. Generasi pertama membutuhkan waktu lebih lama karena proses pemuatan model.

Membuat gambar menggunakan API (Penyebaran Fungsi)

Jika Anda menyebarkan versi Azure Functions, Anda dapat memanggil API secara langsung:

curl -X POST "https://<YOUR-FUNCTION-URL>/api/generate" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "A friendly robot chef cooking pasta in a cozy kitchen",
    "num_steps": 25
  }'

Ganti <YOUR-FUNCTION-URL> dengan URL aplikasi fungsi Anda yang sebenarnya. Parameter num_steps mengontrol kualitas gambar (nilai yang lebih tinggi menghasilkan hasil yang lebih baik tetapi membutuhkan waktu lebih lama).

Format respons yang diharapkan:

{
  "success": true,
  "image": "iVBORw0KGgoAAAANSUhEUgAA...(base64 PNG data)..."
}

Respons berisi gambar PNG yang dikodekan base64 yang dapat Anda dekodekan dan simpan.

Memantau penggunaan GPU

Pemantauan membantu Anda memahami pemanfaatan GPU dan mengoptimalkan biaya.

Melihat status GPU di konsol

  1. Di portal Microsoft Azure, buka aplikasi kontainer Anda.

  2. Di bawah Pemantauan, pilih Konsol.

  3. Pilih replika dan kontainer Anda.

  4. Pilih Sambungkan ulang, lalu pilih /bin/bash sebagai perintah startup.

  5. Jalankan perintah berikut untuk melihat status GPU:

    nvidia-smi
    

    Output menunjukkan penggunaan memori GPU, persentase pemanfaatan, dan proses yang sedang berjalan.

Menampilkan metrik di Azure Monitor

  1. Di portal Microsoft Azure, buka aplikasi kontainer Anda.

  2. Di bawah Pemantauan, pilih Metrik.

  3. Tambahkan metrik untuk:

    • Penggunaan CPU
    • Penggunaan Memori
    • Jumlah Replika

Untuk opsi pengamatan terperinci, lihat Memantau Aplikasi Kontainer Azure.

Mengoptimalkan performa saat memulai dari kondisi dingin

Untuk mengurangi waktu mulai dingin untuk beban kerja produksi:

  1. Aktifkan streaming artefak untuk mempercepat penarikan gambar kontainer.

  2. Atur replika minimum ke 1 untuk menjaga instans tetap hangat:

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --min-replicas 1
    

    Perintah ini membuat satu instans selalu berjalan, menghilangkan penundaan cold start tetapi menimbulkan biaya berkelanjutan.

Untuk teknik pengoptimalan lainnya, lihat Meningkatkan cold start untuk GPU tanpa server.

Troubleshooting

Masalah Penyebab Solusi
Kesalahan "Kuota GPU terlampaui" Tidak ada kuota GPU yang disetujui Minta kuota GPU dan tunggu persetujuan
Kontainer tidak dapat memulai Batas waktu penarikan gambar Mengaktifkan streaming artefak atau menggunakan gambar dasar yang lebih kecil
Permintaan pertama kedaluwarsa Pengunduhan model sedang berlangsung Tunggu 2-3 menit dan coba lagi. Penundaan singkat ini adalah perilaku yang diharapkan.
Kesalahan "CUDA kehabisan memori" Model melebihi kapasitas memori GPU Mengurangi ukuran batch atau menggunakan varian model yang lebih kecil
502 Gateway Buruk Kontainer belum siap Periksa log kontainer; pastikan pemeriksaan kesehatan sudah dikonfigurasi
Pembuatan gambar lambat Langkah-langkah inferensi tidak mencukup Tingkatkan num_steps parameter (nilai yang lebih tinggi = kualitas lebih baik, lebih lambat)

Untuk melihat log kontainer untuk pemecahan masalah:

az containerapp logs show \
  --name $CONTAINER_APP_NAME \
  --resource-group $RESOURCE_GROUP \
  --follow

Perintah ini mengalirkan log real-time dari kontainer Anda, membantu Anda mengidentifikasi masalah startup atau kesalahan runtime.

Membersihkan sumber daya

Setelah selesai dengan sumber daya, hapus sumber daya tersebut untuk menghindari biaya yang sedang berlangsung.

  1. Di portal Microsoft Azure, cari grup Sumber Daya.

  2. Pilih grup sumber daya yang Anda buat (misalnya, rg-gpu-image-gen).

  3. Pilih Hapus grup sumber daya.

  4. Untuk mengonfirmasi penghapusan, masukkan nama grup sumber daya.

  5. Pilih Hapus.

Jika Anda menyebarkan dengan menggunakan Azure Developer CLI:

azd down

Jika Anda menyebarkan dengan menggunakan Azure CLI:

az group delete --name $RESOURCE_GROUP --yes --no-wait

--no-wait Bendera segera kembali saat penghapusan berlanjut di latar belakang.

Langkah selanjutnya