Azure Container Apps üzerinde Azure İşlevleri ile GPU’ları kullanma

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:

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:

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:

  1. İşlev uygulaması URL'sini alın:

    az containerapp show \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --query "properties.configuration.ingress.fqdn" \
      --output tsv
    
  2. İş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

  1. Azure portalında kapsayıcı uygulamanıza gidin.
  2. İzleme Konsolu'nu> seçin.
  3. Replikanızı ve kapsayıcınızı seçin, ardından /bin/bash seçeneğini belirleyin.
  4. 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

  1. Gerçek zamanlı kapsayıcı günlüklerini görüntülemek için İzleme>Günlük akışı seçin.
  2. CPU, bellek ve çoğaltma sayısı ölçümlerini görüntülemek için İzleme>Ölçümleri'ne tıklayın.
  3. 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