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 kılavuzda, Azure Container Apps üzerinde GPU özellikli bir işlev uygulaması oluşturup dağıtacaksınız. İşlev kodunuzu GPU kitaplıklarıyla bir kapsayıcı görüntüsüne paketleyin ve ardından isteğe bağlı olarak NVIDIA T4 veya A100 GPU'larına erişmek için dağıtın.
Container Apps'te Azure İşlevleri sunucusuz modelini GPU işlemiyle birleştirerek yoğun işlem gücü kullanan yapay zeka çıkarımı, görüntü işleme ve isteğe bağlı olarak otomatik olarak ölçeklendirilen makine öğrenmesi iş yüklerini çalıştırabilirsiniz. Yalnızca işlevleriniz istekleri etkin bir şekilde işlerken GPU işlem süresi için ödeme alırsınız.
Genel bakış
Azure Container Apps üzerinde Azure İşlevleri barındırdığınızda, NVIDIA A100 ve T4 kaynaklarıyla sunucusuz GPU erişebilirsiniz. Sunucusuz GPU'lar boştayken sıfır olarak ölçeklendirilir, bu nedenle yalnızca etkin işlem süresi için faturalandırılırsınız.
GPU özellikli işlevler şunları gerektirir:
- GPU iş yükü profillerine sahip bir Container Apps ortamı
- İşlevler çalışma zamanını ve GPU kitaplıklarını (CUDA, cuDNN, AI çerçeveleri) içeren özel bir kapsayıcı görüntüsü
- Azure aboneliğiniz için onaylanan GPU kotası
Prerequisites
Başlamadan önce aşağıdaki öğelere sahip olduğunuzu doğrulayın:
- Etkin hesabı olan bir Azure aboneliği. Ücretsiz bir hesap oluşturun.
- Aboneliğiniz için onaylanan GPU kotası. Gerekirse GPU kotası isteyin. Kurumsal ve kullandıkça öde aboneliklerinde genellikle varsayılan olarak A100 ve T4 kotası etkinleştirilir.
- Azure CLI sürüm 2.62.0 veya üzeri.
- Azure İşlevleri Çekirdek Araçları sürüm 4.x.
- Kapsayıcı görüntüleri oluşturmak için docker yerel olarak yüklendi.
GPU için kapsayıcı imajı gereksinimleri
Container Apps'te GPU ile Azure İşlevleri çalıştırmak için İşlevler çalışma zamanını, GPU kitaplıklarını ve uygulama kodunuzu içeren özel bir kapsayıcı görüntüsü sağlamanız gerekir. Bu bölümde görüntünüzün içermesi gerekenler açıklanmaktadır.
Temel görüntü
Kapsayıcı görüntünüz, Functions konak çalışma zamanını içeren resmi bir Azure İşlevleri temel görüntüsüyle başlamalıdır. Çalışma zamanınızla eşleşen görüntüyü seçin:
| Çalışma Zamanı | Temel Görüntü |
|---|---|
| Python 3.11 | mcr.microsoft.com/azure-functions/python:4-python3.11 |
| Node.js 20 | mcr.microsoft.com/azure-functions/node:4-node20 |
| .NET 8 | mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 |
| Java 17 | mcr.microsoft.com/azure-functions/java:4-java17 |
| Özel işleyici | mcr.microsoft.com/azure-functions/base:4 |
Hızlı başlangıç görüntüsü (mcr.microsoft.com/k8se/gpu-quickstart:latest), ortamınızda GPU erişimini test etmede kullanışlıdır, ancak İşlevler çalışma zamanını içermez. Yalnızca GPU desteğinin çalıştığını doğrulamak için kullanın.
Tip
ile func init --dockerbir İşlevler projesi oluşturduğunuzda, oluşturulan Dockerfile zaten seçtiğiniz çalışma zamanı için doğru temel görüntüyü kullanır.
CUDA ve GPU kitaplıkları
Azure Container Apps hem NVIDIA sürücüsünü hem de platform tarafından sağlanan CUDA çalışma zamanını (şu anda CUDA 12.x) sağlar. Uygulamanız platform CUDA sürümünü kullanabiliyorsa ek CUDA kurulumuna ihtiyacınız yoktur. Ancak kapsayıcı görüntünüze AI/ML çerçeveleri ve cuDNN gibi ek kitaplıklar eklemeniz gerekir.
Şu yaklaşımlardan birini seçin:
Önerilen: GPU çerçeveleriyle platform tarafından sağlanan CUDA çalışma zamanını kullanma
PyTorch ve TensorFlow gibi çoğu AI/ML çerçevesi kendi CUDA çalışma zamanını içerir. Bunları platform sürümüyle eşleşen CUDA değişkeniyle yükleyin:
FROM mcr.microsoft.com/azure-functions/python:4-python3.11
# PyTorch includes CUDA runtime
RUN pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
COPY . /home/site/wwwroot
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
Alternatif: Çok aşamalı derleme kullanarak belirli bir CUDA sürümünü sabitleme
Uygulamanız platform varsayılanından farklı bir CUDA sürümü gerektiriyorsa, çok aşamalı bir derleme kullanın:
# Stage 1: CUDA runtime
FROM nvidia/cuda:12.1.0-runtime-ubuntu22.04 AS cuda-base
# Stage 2: Functions image with CUDA libraries
FROM mcr.microsoft.com/azure-functions/python:4-python3.11
# Copy CUDA libraries from the NVIDIA base image
COPY --from=cuda-base /usr/local/cuda /usr/local/cuda
ENV PATH="/usr/local/cuda/bin:${PATH}"
ENV LD_LIBRARY_PATH="/usr/local/cuda/lib64:${LD_LIBRARY_PATH}"
COPY requirements.txt /
RUN pip install -r /requirements.txt
COPY . /home/site/wwwroot
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
Important
Kendi CUDA çalışma zamanınızı sağlarsanız platformdaki NVIDIA sürücü sürümüyle uyumlu olduğunu doğrulayın. Genel olarak, NVIDIA sürücüsü eski CUDA sürümleriyle geriye dönük uyumludur. Ayrıntılar için NVIDIA CUDA uyumluluk matrisini gözden geçirin. Platform tarafından sağlanan CUDA'yı kullanıyorsanız uygulamanızın geçerli platform sürümleriyle çalıştığını doğrulayın.
Kapsayıcı görüntüsü boyutunu iyileştirme
CUDA kitaplıkları ve model dosyaları içerdiği için GPU kapsayıcı görüntüleri genellikle büyük (5-15 GB) olur. Büyük görüntüler çekme sürelerini ve soğuk başlatma gecikme süresini artırır. Başlangıç süresini kısaltmak için şu stratejileri kullanın:
- Derleme bağımlılıklarını son görüntünün dışında tutmak için çok aşamalı Docker derlemelerini kullanın.
- Büyük model dosyalarını görüntüde paketlemek yerine Azure Depolama bağlamalarında depolayın.
- Daha hızlı imaj çekme işlemleri için Azure Container Registry’de (Premium SKU gereklidir) artifact streaming özelliğini etkinleştirin.
- Gereksiz dosyaları derleme bağlamından dışlamak için kullanın
.dockerignore.
Örnek Dockerfile'lar ve kaynaklar
Örnekler ve şablonlar için bkz:
- Container Apps'te Azure İşlevleri GPU örneği: Dockerfile, işlev kodu ve dağıtım yapılandırması ile örneği tamamlayın.
- Azure Container Apps GPU şablonları: Sunucusuz GPU'lara model dağıtma şablonları.
- Azure İşlevleri temel imajları: Desteklenen tüm diller için resmî Azure İşlevleri çalışma zamanı imajları.
GPU özellikli işlev uygulaması oluşturma ve dağıtma
Bu bölümde GPU özellikli bir işlev oluşturacak, bir kapsayıcıda paketleyip Azure Container Apps dağıtacaksınız.
1. Adım: Docker desteğiyle İşlevler projesi oluşturma
func init Komutunu çalıştırarak Dockerfile ile yeni bir İşlevler projesi oluşturun:
func init MyGpuFunctionApp --worker-runtime python --docker
cd MyGpuFunctionApp
2. Adım: İşlev ekleme
func new KOMUTUNU çalıştırarak HTTP ile tetiklenen bir işlev oluşturun:
func new --name GpuProcess --template "HTTP trigger"
3. Adım: GPU desteği için Dockerfile'ı güncelleştirme
Dockerfile öğesini GPU özellikli bir temel imaj kullanacak ve GPU bağımlılıklarını ekleyecek şekilde düzenleyin. Bu örnekte yapay zeka çıkarımı için PyTorch kullanılır:
FROM mcr.microsoft.com/azure-functions/python:4-python3.11
# Install GPU dependencies
RUN pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
RUN pip install -r requirements.txt
ENV AzureWebJobsScriptRoot=/home/site/wwwroot
COPY . /home/site/wwwroot
Important
Platform varsayılan olarak bir CUDA çalışma zamanı sağlar. İş yükünüz belirli CUDA sürümleri veya ek GPU kitaplıkları gerektiriyorsa bunları kapsayıcı görüntünüze ekleyin. Azure Container Apps tarafından desteklenen GPU yazılım yığını sürümleri ile uyumluluğu doğrulayın.
4. Adım: GPU ile Container Apps ortamı oluşturma
Ortam değişkenlerinizi ayarlayın:
RESOURCE_GROUP="myGpuFunctionRg"
ENVIRONMENT_NAME="myGpuEnv"
LOCATION="swedencentral"
Kaynak grubu oluşturma:
az group create --name $RESOURCE_GROUP --location $LOCATION
Container Apps ortamı oluşturun:
az containerapp env create \
--name $ENVIRONMENT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Ortamınıza bir GPU iş yükü profili ekleyin:
az containerapp env workload-profile add \
--name $ENVIRONMENT_NAME \
--resource-group $RESOURCE_GROUP \
--workload-profile-name gpu-t4 \
--workload-profile-type Consumption-GPU-NC8as-T4
5. Adım: Kapsayıcı görüntüsünü oluşturma ve gönderme
Kapsayıcı kayıt defteri değişkenlerinizi ayarlayın:
REGISTRY_NAME="myGpuRegistry"
Kapsayıcı kayıt defteri oluşturma (Premium SKU, daha hızlı görüntü çekme işlemleri için yapıt akışını etkinleştirir):
az acr create \
--name $REGISTRY_NAME \
--resource-group $RESOURCE_GROUP \
--sku Premium
"Container görüntüsünü oluşturun ve gönderin:"
az acr build \
--registry $REGISTRY_NAME \
--image my-gpu-function:v1 \
.
6. Adım: İşlev uygulamasını GPU ile dağıtma
Uygulama değişkenlerinizi ayarlayın:
APP_NAME="myGpuFunction"
Kapsayıcı uygulamasını GPU desteğiyle dağıtın:
az containerapp create \
--name $APP_NAME \
--resource-group $RESOURCE_GROUP \
--environment $ENVIRONMENT_NAME \
--image $REGISTRY_NAME.azurecr.io/my-gpu-function:v1 \
--registry-server $REGISTRY_NAME.azurecr.io \
--workload-profile-name gpu-t4 \
--cpu 8.0 \
--memory 56.0Gi \
--ingress external \
--target-port 80 \
--kind functionapp \
--min-replicas 0 \
--max-replicas 5
--kind functionapp bayrağı Azure İşlevleri tümleştirmeyi etkinleştirir.
--min-replicas 0 ayarı, maliyet tasarrufu için sıfıra ölçekleme davranışını etkinleştirir.
Dağıtımı doğrulayın.
Dağıtım tamamlandıktan sonra işlevinizin çalışıp çalışmadığını test edin:
İşlev uygulaması URL'sini alın:
az containerapp show \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.configuration.ingress.fqdn" \ --output tsvİşlevinizi çağır:
curl https://<YOUR-FUNCTION-URL>/api/GpuProcess
İşlev başarıyla yanıt verirse dağıtımınız çalışır. Artık kendi verilerinizle çağırabilirsiniz.
Soğuk başlangıcı optimize edin
GPU iş yükleri genellikle büyük kapsayıcı görüntülerini ve model dosyalarını içerir. Bu stratejiler başlangıç gecikme süresini azaltır:
- Artefakt akışını etkinleştirin: İmaj çekme işlemlerini hızlandırmak için Azure Container Registry'de (Premium SKU gereklidir) artefakt akışı kullanın.
- Depolama bağlamalarını kullanın: Büyük model dosyalarını kapsayıcı görüntüsünde paketlemek yerine bir Azure depolama bağlamasında depolayın.
-
Minimum çoğaltmaları ayarlama: Soğuk başlangıçları ortadan kaldırarak sıcak bir örneği korumak için ayarlayın
--min-replicas 1. Bu ayar için sürekli ücret alınır, ancak sıkı gecikme gereksinimleri olan üretim iş yükleri için bu maliyete değer.
Performans izlemeyle GPU dağıtımını gösteren kapsamlı bir öğretici için bkz. Öğretici: ACA üzerinde Azure İşlevleri ile sunucusuz GPU'larda yapay zeka görüntü oluşturmayı dağıtma.
Dikkat edilmesi gerekenler ve sınırlamalar
Aşağıdaki kısıtlamaları göz önünde bulundurun:
- Kapsayıcı başına bir GPU: İşlev uygulamasındaki yalnızca bir kapsayıcı GPU'ya erişebilir. Yan kapsayıcılar kullanıyorsanız yalnızca ilk kapsayıcı GPU’ya erişebilir.
- İş yükü profilleri ortamı gerekli: Sunucusuz GPU'lar bir iş yükü profilleri ortamı gerektirir. Yalnızca tüketim ortamları GPU'ları desteklemez.
- Bölge kullanılabilirliği: GPU iş yükü profilleri yalnızca belirli bölgelerde kullanılabilir. Desteklenen bölgelere bakın.
- GPU kotası gerekiyor: Aboneliğiniz için onaylanmış GPU kotanız olmalıdır. Bkz. GPU kotası isteme.
GPU kullanımını izleme
GPU kullanımını ve uygulama performansını izlemek için Azure Container Apps gözlemlenebilirlik araçlarını kullanın.
Konsolda GPU durumunu denetleme
- Azure portalında kapsayıcı uygulamanıza gidin.
- İzleme Konsolu'nu> seçin.
- Replikanızı ve kapsayıcınızı seçin, ardından /bin/bash seçeneğini belirleyin.
- GPU bellek kullanımını, kullanım yüzdesini ve çalışan işlemleri görüntülemek için komutunu çalıştırın
nvidia-smi.
Günlükleri ve ölçümleri görüntüleme
- Gerçek zamanlı kapsayıcı günlüklerini görüntülemek için İzleme>Günlük akışı seçin.
- CPU, bellek ve çoğaltma sayısı ölçümlerini görüntülemek için İzleme>Ölçümleri'ne tıklayın.
- Kapsayıcı uygulamanızın günlük verilerine karşı KQL sorguları çalıştırmak için İzleme>Günlükleri'ni seçin.
Gözlemlenebilirlik hakkında daha fazla bilgi için bkz. Monitor Azure Container Apps. Application Insights'ı ayrıntılı işlev yürütme telemetrisi için de yapılandırabilirsiniz.
Sonraki Adımlar
- Öğretici: ACA üzerinde Azure İşlevleri ile sunucusuz GPU'larla yapay zeka görüntü oluşturma çözümü dağıtma: Eksiksiz bir görüntü oluşturma çözümünü dağıtmak için adım adım kılavuz
- Azure Container Apps üzerinde Azure İşlevleri'ne genel bakış
- Azure Container Apps'te sunucusuz GPU'ları kullanma
- Sunucusuz GPU'lar için soğuk başlatmayı geliştirme
- Azure Container Uygulamalarını İzle