Öğretici: ACA üzerinde Azure İşlevleri kullanarak sunucusuz GPU’larla yapay zeka ile görüntü oluşturma dağıtımı

Bu öğreticide, Azure Container Apps'te sunucusuz GPU'lar kullanan, Stable Diffusion destekli bir görüntü oluşturucuyu dağıtırsınız. Bu çözümü gereksinimlerinize bağlı olarak bir Azure İşlevleri uygulaması olarak veya standart bir kapsayıcı uygulaması olarak dağıtabilirsiniz. Bu eğitimin sonunda, talebe göre otomatik olarak ölçeklenen çalışan bir yapay zeka görüntü oluşturma hizmetine sahip olacaksınız.

Sunucusuz GPU'lar, altyapı yönetimi olmadan GPU işlem kaynaklarına isteğe bağlı erişim sağlar. Yalnızca kullandığınız GPU süresi için ödeme yaptığınızda çözüm boştayken sıfıra ölçeklendirilir.

Bu eğitimde şunları öğreniyorsunuz:

  • Aboneliğiniz için GPU kotası isteme ve doğrulama
  • GPU iş yükü profilleriyle Container Apps ortamı oluşturma
  • Sunucusuz GPU'ları kullanarak yapay zeka görüntüsü oluşturma API'si dağıtma
  • Metinden görüntüye isteklerle dağıtımı test etme
  • GPU kullanımını izleme ve performansı iyileştirme
  • Devam eden maliyetlerden kaçınmak için kaynakları temizleme

Önkoşullar

Başlamadan önce aşağıdaki öğelere sahip olduğunuzu doğrulayın:

Gereksinim Ayrıntılar
Azure aboneliği Hesabınız yoksa ücretsiz bir hesap oluşturun.
GPU kotası GPU kotası erişimi isteyin. Onay genellikle bir ile iki iş günü arasında sürer.
Azure Komut Satırı Arayüzü (Azure CLI) Azure CLI 2.62.0 veya sonraki bir sürümünü yükleyin.
Azure Geliştirici CLI'sı (azd) Kolaylaştırılmış dağıtım için Azure Geliştirici CLI'sini yükleyin.
Docker Desktop Docker Desktop'ı yükleyin. Yerel kapsayıcı geliştirme için gereklidir.

Önemli

Bu eğitime başlamadan önce GPU kotası erişimi isteyin. Onay beklerken okumaya devam edebilirsiniz, ancak dağıtım için onaylanan bir kota gerekir.

Araçlarınızın doğru yüklendiğini doğrulayın:

az --version
azd version
docker --version

Mimariye genel bakış

Bu çözüm aşağıdaki Azure hizmetlerini kullanır:

Bileşen Amaç
Azure Container Apps Uygulamanızı sunucusuz GPU desteğiyle barındırıyor.
GPU iş yükü profili Yapay zeka çıkarımı için NVIDIA T4 GPU işlem sağlar.
Azure Container Registry Özel kapsayıcı görüntünüzü depolar.
Azure Depolama Azure İşlevleri çalışma zamanı için gereklidir (yalnızca Functions dağıtımı için).
Application Insights İzleme ve tanılama sağlar.

İstemci bir istek gönderdiğinde Container Apps giriş uç noktasına ulaşır. Uygulamanız isteği işler ve bunu GPU’da çalışan Stable Diffusion modeline iletir. Model, istenen görüntüyü isteminize göre oluşturur ve oluşturulan görüntüyü yanıt olarak döndürür.

Maliyetle ilgili dikkat edilmesi gerekenler

Sunucusuz GPU'lar saniye başına faturalama kullanır. Dağıtmadan önce şu faktörleri gözden geçirin:

Faktör Etki
GPU türü NVIDIA T4'ün maliyeti A100'den düşük.
En az replikalar Geliştirme için 0 olarak ayarlayın (boştayken sıfıra düşer).
Soğuk başlangıç zamanı Model indirilip (yaklaşık 5 GB) GPU belleğine yüklenirken ilk istek 1-2 dakika sürer.
İstek süresi Görüntü oluşturma işlemi genellikle istek başına 5-15 saniye sürer.

Ayrıntılı fiyatlandırma için bkz. Azure Container Apps fiyatlandırması.

Örnek kodunu alma

Azure İşlevleri uygulamasını içeren örnek depoyu kopyalayın:

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

Depo şu dosyaları içerir:

Dosya Amaç
function_app.py Görüntüleri oluşturan HTTP ile tetiklenen işlev.
requirements.txt diffusers kitaplığı dahil Python bağımlılıkları.
Dockerfile GPU destekli kapsayıcı imajı tanımı.
host.json Azure İşlevleri yapılandırması.
azure.yaml Azure Developer CLI dağıtım yapılandırması.

Azure portalını kullanarak dağıtma

GPU özellikli bir kapsayıcı uygulaması oluşturmak ve Azure portalını kullanarak görüntü oluşturma çözümünü dağıtmak için bu adımları izleyin.

GPU ile Container Apps ortamı oluşturma

  1. Azure portalını açın ve Container Apps araması yapın.

  2. Oluştur>Kapsayıcı Uygulaması seçin.

  3. Temel Bilgiler sekmesinde şu değerleri girin:

    Setting Değer
    Subscription Azure aboneliğinizi seçin.
    Kaynak Grubu Yeni oluştur seçeneğini belirleyin ve rg-gpu-image-gen girin.
    Kapsayıcı uygulama adı ca-image-gen girin.
    Dağıtım kaynağı Kapsayıcı görüntüsü'ne tıklayın.
    Region İsveç Orta seçin.
  4. Container Apps ortamı'nın altında Yeni oluştur'u seçin.

  5. Container Apps ortamı oluştur iletişim kutusunda ortam adı olarak girincae-gpu-image-gen.

  6. Ortamı oluşturmak için Oluştur'u seçin.

  7. İleri: Kapsayıcı >'yı seçin.

Kapsayıcıyı GPU ile yapılandırma

  1. Kapsayıcı sekmesinde şu değerleri girin:

    Setting Değer
    İsim gpu-image-gen-container girin.
    Görüntü kaynağı Docker Hub'ı veya diğer kayıt defterlerini seçin.
    Görüntü türü Genel’i seçin.
    Kayıt defteri oturum açma sunucusu mcr.microsoft.com girin.
    Resim ve etiket k8se/gpu-quickstart:latest girin.
    İş yükü profili Tüketim - En fazla 4 vCPU, 8 GiB bellek'i seçin.
    GPU GPU'yı etkinleştirmek için kutuyu işaretleyin.
    GPU Türü Consumption-GPU-NC8as-T4 öğesini seçin ve profili eklemek için bağlantıyı seçin.
  2. İleri: Giriş'i >seçin.

Giriş yapılandırması

  1. Giriş sekmesinde şu değerleri girin:

    Setting Değer
    Giriş Etkin'i seçin.
    Giriş trafiği Her yerden trafik kabul etme'yi seçin.
    Hedef bağlantı noktası 80 girin.
  2. Seçin, gözden geçir ve oluştur.

  3. Ayarlarınızı gözden geçirin ve Oluştur'u seçin.

  4. Dağıtımın tamamlanmasını bekleyin (yaklaşık 5 dakika) ve ardından Kaynağa git'i seçin.

Dağıtımı doğrulayın.

  1. Kapsayıcı uygulamasına Genel Bakış sayfasında Uygulama URL'sini kopyalayın.

  2. Görüntü oluşturma arabirimine erişmek için URL'yi tarayıcıda açın.

Azure CLI ile dağıtma

Azure Geliştirici CLI'sını (İşlevler uygulamaları için önerilir) veya Azure CLI (daha fazla denetim için) kullanarak dağıtabilirsiniz.

Azure Developer CLI'yi kullanarak Azure İşlevleri uygulaması olarak dağıtın

Azure Geliştirici CLI'sı, Azure İşlevleri uygulaması için en hızlı dağıtım deneyimini sağlar.

  1. Kopyalanan depoya gidin:

    cd function-on-aca-gpu
    
  2. Uygulamayı başlatın ve dağıtın:

    azd up
    
  3. İstendiğinde şu değerleri girin:

    Uyarı Değer
    Çevre adı Benzersiz bir ad girin (örneğin, gpufunc-dev).
    Azure veri merkezi konumu swedencentralseçin.
    Azure aboneliği Aboneliğinizi seçin.

    Dağıtım yaklaşık 15-20 dakika sürer.

  4. Dağıtım tamamlandığında çıkışta görüntülenen uç nokta URL'sine dikkat edin.

azd up komutu şunu oluşturur:

Kaynak Amaç
Kaynak grubu Tüm kaynakların kapsayıcısı.
Container Apps ortamı GPU iş yükü profiline sahip uygulamayı barındırıyor.
Container kayıt defteri Özel kapsayıcı görüntünüzü depolar.
Depolama hesabı Azure İşlevleri çalışma zamanı için gereklidir.
Uygulama Öngörüleri İzleme ve tanılama.
İşlev Uygulaması Görüntü oluşturma API'si.

Azure CLI kullanarak kapsayıcı uygulaması olarak dağıtın

Her kaynak üzerinde daha fazla denetim için Azure CLI kullanarak kaynakları tek tek oluşturun.

  1. Ortam değişkenlerini ayarlama:

    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"
    

    Bu değişkenler dağıtım boyunca kullanılan yapılandırma değerlerini tanımlar. WORKLOAD_PROFILE_TYPE NVIDIA T4 GPU yapılandırmasını belirtir.

  2. Kaynak grubunu oluşturun:

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

    Bu komut, İsveç Merkezi'nde GPU iş yükü profillerini destekleyen bir kaynak grubu oluşturur. Succeeded çıktıda görüntülenir.

  3. Container Apps ortamını oluşturma:

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

    Bu komut, kapsayıcı uygulamalarınızı barındıran yönetilen ortamı oluşturur. Succeeded çıktıda görüntülenir.

  4. GPU iş yükü profilini ortamınıza ekleyin:

    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
    

    Bu komut, ortamınıza NVIDIA T4 GPU iş yükü profilini ekler ve bunu kullanan kapsayıcılar için GPU işlemini etkinleştirir.

  5. GPU desteğiyle kapsayıcı uygulamasını oluşturun:

    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
    

    Bu komut kapsayıcı uygulamasını oluşturur ve GPU iş yükü profiline atar. --cpu ve --memory değerleri T4 profil gereksinimleriyle eşleşmektedir. Komut, uygulama URL'sini çıkış olarak verir.

  6. Sonraki bölümde test için çıkış URL'sini kopyalayın. --konum $LOCATION
    --query "properties.provisioningState"
    --output tsv

    
    This command creates the managed environment that hosts your container apps. The output should display `Succeeded`.
    
    
  7. GPU iş yükü profilini ortamınıza ekleyin:

    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
    

    Bu komut, ortamınıza NVIDIA T4 GPU iş yükü profilini ekler. Profil, bunu gerektiren kapsayıcılar için GPU işlemini etkinleştirir.

  8. GPU desteğiyle kapsayıcı uygulamasını oluşturun:

    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
    

    Bu komut kapsayıcı uygulamasını oluşturur ve GPU iş yükü profiline atar. --cpu ve --memory değerleri T4 profil gereksinimleriyle eşleşmektedir. Komut, uygulama URL'sini çıkış olarak verir.

  9. Sonraki bölümde test için çıkış URL'sini kopyalayın.

Görüntü oluşturma API'sini test edin

Uyarı

model indirilirken (yaklaşık 5 GB) ve GPU belleğine yüklenirken ilk istek bir-iki dakika sürer. Sonraki istekler 5-15 saniye içinde tamamlanmaktadır.

Uygulamanın çalıştığını doğrulama

Uygulama URL'sini tarayıcıda açın. Görüntü oluşturma arabirimini görmeniz gerekir.

Kullanıcı arabirimini kullanarak görüntü oluşturma

  1. Metin alanına aşağıdaki gibi bir istem girin:

    A friendly robot chef cooking pasta in a cozy kitchen, digital art style
    
  2. Görüntü Oluştur'a tıklayın.

  3. Görüntünün görünmesini bekleyin. Model yüklemesi nedeniyle ilk oluşturma daha uzun sürer.

API kullanarak görüntü oluşturma (İşlevler dağıtımı)

Azure İşlevleri sürümünü dağıttıysanız API'yi doğrudan çağırın:

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

<YOUR-FUNCTION-URL> öğesini gerçek işlev uygulaması URL'nizle değiştirin. num_steps parametresi görüntü kalitesini denetler (daha yüksek değerler daha iyi sonuçlar üretir ancak daha uzun sürer).

Beklenen yanıt biçimi:

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

Yanıt, kodunu çözebileceğiniz ve kaydedebileceğiniz base64 kodlu bir PNG görüntüsü içerir.

GPU kullanımını izleme

İzleme, GPU kullanımını anlamanıza ve maliyetleri iyileştirmenize yardımcı olur.

Konsolda GPU durumunu görüntüleme

  1. Azure portalında kapsayıcı uygulamanıza gidin.

  2. İzleme'nin altında Konsol'a tıklayın.

  3. Replikayı ve kapsayıcınızı seçin.

  4. Yeniden Bağlan'ı ve ardından başlangıç komutu olarak /bin/bash'i seçin.

  5. GPU durumunu görüntülemek için şu komutu çalıştırın:

    nvidia-smi
    

    Çıktıda GPU bellek kullanımı, kullanım yüzdesi ve çalışan işlemler gösterilir.

Azure İzleyici'de ölçümleri görüntüleme

  1. Azure portalında kapsayıcı uygulamanıza gidin.

  2. İzleme seçeneğinin altından Ölçümler’i seçin.

  3. Şu ölçüler için ekleyin:

    • CPU Kullanımı
    • Bellek Kullanımı
    • Replika Sayısı

Ayrıntılı gözlemlenebilirlik seçenekleri için bkz. Azure Container Apps'i izleme.

Soğuk başlangıç performansını iyileştirme

Üretim iş yüklerinin soğuk başlangıç süresini azaltmak için:

  1. Kapsayıcı imajlarının çekilmesini hızlandırmak için artifakt akışını etkinleştirin.

  2. Bir örneği hazır tutmak için minimum kopya sayısını 1 olarak ayarlayın:

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

    Bu komut, bir örneğin her zaman çalışır durumda kalmasını sağlayarak soğuk başlatma gecikmelerini ortadan kaldırır ancak sürekli maliyetler doğurur.

Daha fazla iyileştirme tekniği için bkz. Sunucusuz GPU'lar için soğuk başlatmayı geliştirme.

Sorun giderme

Sorun Nedeni Çözüm
"GPU kotası aşıldı" hatası GPU kotası onaylanmadı. GPU kotası isteyin ve onay bekleyin.
Kapsayıcı başlatılamıyor İmaj indirme zaman aşımı. Artefakt akışını etkinleştirin veya daha küçük bir temel imaj kullanın.
İlk istek zaman aşımına uğradı Model indirme işlemi devam ediyor. 2-3 dakika bekleyin ve yeniden deneyin. Bu gecikme bekleniyor.
"CUDA bellek yetersiz" hatası Model GPU belleğini aşıyor. Toplu iş boyutunu küçültün veya daha küçük bir model çeşidi kullanın.
502 Hatalı Ağ Geçidi Kapsayıcı hazır değil. Kapsayıcı günlüklerini kontrol edin; sağlık yoklamalarının yapılandırıldığından emin olun.
Yavaş görüntü oluşturma Yetersiz çıkarım adımları. Parametreyi artırın num_steps (daha yüksek değerler = daha iyi kalite, daha yavaş).

Konteyner günlüklerini hata ayıklamak için görüntülemek üzere:

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

Bu komut, kapsayıcınızdan gerçek zamanlı günlükleri akışla aktararak başlangıç sorunlarını veya çalışma zamanı hatalarını belirlemenize yardımcı olur.

Kaynakları temizle

Kaynaklarla işiniz bittiğinde, ek ücretler oluşmasını önlemek için bunları silin.

  1. Azure portalında Kaynak grupları için arama yapın.

  2. Oluşturduğunuz kaynak grubunu seçin (örneğin, rg-gpu-image-gen).

  3. Kaynak grubunu sil seçeneğini seçin.

  4. Silme işlemini onaylamak için kaynak grubu adını girin.

  5. 'ı seçin,'i silin.

Azure Geliştirici CLI'sı kullanarak dağıttıysanız:

azd down

Azure CLI kullanarak dağıttıysanız:

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

Bayrak --no-wait hemen döndürülürken silme işlemi arka planda devam ediyor.

Sonraki Adımlar

GPU iyileştirmesi hakkında daha fazla bilgi için bkz: