Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Azure portalını açın ve Container Apps araması yapın.
Oluştur>Kapsayıcı Uygulaması seçin.
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-gengirin.Kapsayıcı uygulama adı ca-image-gengirin.Dağıtım kaynağı Kapsayıcı görüntüsü'ne tıklayın. Region İsveç Orta seçin. Container Apps ortamı'nın altında Yeni oluştur'u seçin.
Container Apps ortamı oluştur iletişim kutusunda ortam adı olarak girin
cae-gpu-image-gen.Ortamı oluşturmak için Oluştur'u seçin.
İleri: Kapsayıcı >'yı seçin.
Kapsayıcıyı GPU ile yapılandırma
Kapsayıcı sekmesinde şu değerleri girin:
Setting Değer İsim gpu-image-gen-containergirin.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.comgirin.Resim ve etiket k8se/gpu-quickstart:latestgirin.İş 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. İleri: Giriş'i >seçin.
Giriş yapılandırması
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ı 80girin.Seçin, gözden geçir ve oluştur.
Ayarlarınızı gözden geçirin ve Oluştur'u seçin.
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.
Kapsayıcı uygulamasına Genel Bakış sayfasında Uygulama URL'sini kopyalayın.
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.
Kopyalanan depoya gidin:
cd function-on-aca-gpuUygulamayı başlatın ve dağıtın:
azd upİ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.
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.
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_TYPENVIDIA T4 GPU yapılandırmasını belirtir.Kaynak grubunu oluşturun:
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvBu komut, İsveç Merkezi'nde GPU iş yükü profillerini destekleyen bir kaynak grubu oluşturur.
Succeededçıktıda görüntülenir.Container Apps ortamını oluşturma:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvBu komut, kapsayıcı uygulamalarınızı barındıran yönetilen ortamı oluşturur.
Succeededçıktıda görüntülenir.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_TYPEBu 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.
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 tsvBu komut kapsayıcı uygulamasını oluşturur ve GPU iş yükü profiline atar.
--cpuve--memorydeğerleri T4 profil gereksinimleriyle eşleşmektedir. Komut, uygulama URL'sini çıkış olarak verir.Sonraki bölümde test için çıkış URL'sini kopyalayın. --konum $LOCATION
--query "properties.provisioningState"
--output tsvThis command creates the managed environment that hosts your container apps. The output should display `Succeeded`.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_TYPEBu 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.
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 tsvBu komut kapsayıcı uygulamasını oluşturur ve GPU iş yükü profiline atar.
--cpuve--memorydeğerleri T4 profil gereksinimleriyle eşleşmektedir. Komut, uygulama URL'sini çıkış olarak verir.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
Metin alanına aşağıdaki gibi bir istem girin:
A friendly robot chef cooking pasta in a cozy kitchen, digital art styleGörüntü Oluştur'a tıklayın.
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
Azure portalında kapsayıcı uygulamanıza gidin.
İzleme'nin altında Konsol'a tıklayın.
Replikayı ve kapsayıcınızı seçin.
Yeniden Bağlan'ı ve ardından başlangıç komutu olarak /bin/bash'i seçin.
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
Azure portalında kapsayıcı uygulamanıza gidin.
İzleme seçeneğinin altından Ölçümler’i seçin.
Ş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:
Kapsayıcı imajlarının çekilmesini hızlandırmak için artifakt akışını etkinleştirin.
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 1Bu 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.
Azure portalında Kaynak grupları için arama yapın.
Oluşturduğunuz kaynak grubunu seçin (örneğin,
rg-gpu-image-gen).Kaynak grubunu sil seçeneğini seçin.
Silme işlemini onaylamak için kaynak grubu adını girin.
'ı 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: