Tutoriel : Déployer la génération d’images IA avec des GPU serverless à l’aide de Azure Functions sur ACA

Dans ce tutoriel, vous déployez un générateur d’images à diffusion stable qui utilise des GPU serverless dans Azure Container Apps. Vous pouvez déployer cette solution en tant qu’application Azure Functions ou en tant qu’application conteneur standard, en fonction de vos besoins. À la fin de ce tutoriel, vous disposez d’un service de génération d’images IA opérationnel qui s’adapte automatiquement en fonction de la demande.

Les GPU serverless fournissent un accès à la demande aux ressources de calcul GPU sans gestion de l’infrastructure. Vous payez uniquement pour le temps d’utilisation du GPU que vous utilisez, et la solution revient à zéro en cas d’inactivité.

Dans ce tutoriel, vous allez apprendre à :

  • Demander et vérifier le quota GPU pour votre abonnement
  • Créer un environnement Container Apps avec des profils de charge de travail GPU
  • Déployer une API de génération d’images IA à l’aide de GPU serverless
  • Tester le déploiement avec des requêtes de texte à image
  • Surveiller l’utilisation du GPU et optimiser les performances
  • Nettoyer les ressources pour éviter les coûts continus

Prerequisites

Avant de commencer, vérifiez que vous disposez des éléments suivants :

Requirement Détails
Abonnement Azure Créez un compte gratuit si vous n’en avez pas.
Quota GPU Demander l’accès au quota GPU. L’approbation prend généralement un à deux jours ouvrables.
Azure CLI Installez Azure CLI version 2.62.0 ou ultérieure.
Azure Developer CLI (azd) Installez Azure Developer CLI pour un déploiement simplifié.
Docker Desktop Installez Docker Desktop. Requis pour le développement de conteneurs local.

Important

Demandez l’accès au quota GPU avant de commencer ce didacticiel. Vous pouvez continuer la lecture pendant que vous attendez l’approbation, mais le déploiement nécessite un quota approuvé.

Vérifiez que vos outils sont installés correctement :

az --version
azd version
docker --version

Vue d’ensemble de l’architecture

Cette solution utilise les services Azure suivants :

Composant Objectif
Azure Container Apps Héberge votre application avec prise en charge des GPU sans serveur.
Profil de charge de travail GPU Fournit une puissance de calcul GPU NVIDIA T4 pour l’inférence d’IA.
Azure Container Registry Stocke votre image conteneur personnalisée.
Stockage Azure Obligatoire pour l’environnement d’exécution d’Azure Functions (pour le déploiement de Functions uniquement).
Application Insights Fournit des analyses et des diagnostics.

Lorsqu’un client envoie une requête, il atteint le point de terminaison d’entrée Container Apps. Votre application traite la requête et la transmet au modèle de diffusion stable s’exécutant sur le GPU. Le modèle génère l’image demandée en fonction de votre invite et retourne l’image générée en tant que réponse.

Considérations relatives aux coûts

Les GPU serverless utilisent la facturation par seconde. Passez en revue ces facteurs avant de déployer :

Facteur Impact
Type de l'GPU NVIDIA T4 coûte moins de A100.
Réplicas minimales Réglez sur 0 pour le développement (redescend à zéro en cas d’inactivité).
Temps de démarrage à froid La première requête prend 1 à 2 minutes pendant que le modèle télécharge (environ 5 Go) et se charge en mémoire GPU.
Durée de la demande La génération d’images prend généralement 5 à 15 secondes par requête.

Pour obtenir des tarifs détaillés, consultez la tarification d’Azure Container Apps.

Obtenir l’exemple de code

Clonez l’exemple de référentiel contenant l’implémentation Azure Functions :

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

Le référentiel contient ces fichiers :

Fichier Objectif
function_app.py Fonction déclenchée par HTTP qui génère des images.
requirements.txt Les dépendances Python, y compris la bibliothèque Diffusers.
Dockerfile Définition d’une image de conteneur avec prise en charge GPU.
host.json Configuration d’Azure Functions.
azure.yaml Configuration de déploiement d’Azure Developer CLI

Déployer à l’aide du portail Azure

Suivez ces étapes pour créer une application conteneur compatible GPU et déployer la solution de génération d’images à l’aide du portail Azure.

Créer un environnement Container Apps avec GPU

  1. Ouvrez le portail Azure et recherchez Container Apps.

  2. Sélectionnez Créer une>application conteneur.

  3. Sous l’onglet Informations de base, entrez ces valeurs :

    Réglage Valeur
    Subscription Sélectionnez votre abonnement Azure.
    Groupe de ressources Sélectionnez Créer, puis entrez rg-gpu-image-gen.
    Nom de l’application conteneur Saisissez ca-image-gen.
    Source de déploiement Sélectionnez Image conteneur.
    Region Sélectionnez Suède Centre.
  4. Dans l’environnement Container Apps, sélectionnez Créer nouveau.

  5. Dans la boîte de dialogue Créer un environnement Container Apps , entrez cae-gpu-image-gen le nom de l’environnement.

  6. Sélectionnez Créer pour créer l’environnement.

  7. Sélectionnez Suivant : Conteneur >.

Configurer le conteneur avec GPU

  1. Sous l’onglet Conteneur , entrez ces valeurs :

    Réglage Valeur
    Nom Saisissez gpu-image-gen-container.
    Source de l’image Sélectionnez Docker Hub ou d’autres registres.
    Type d’image Sélectionnez Public.
    Serveur de connexion au registre Saisissez mcr.microsoft.com.
    Image et étiquette Saisissez k8se/gpu-quickstart:latest.
    Profil de charge de travail Sélectionner Consommation : jusqu’à 4 processeurs virtuels, 8 Gio de mémoire.
    GPU Cochez la case pour activer le GPU.
    GPU Type Sélectionnez Consumption-GPU-NC8as-T4, puis sélectionnez le lien pour ajouter le profil.
  2. Sélectionnez Suivant : Entrée >.

Configurez une entrée

  1. Sous l’onglet Entrée , entrez ces valeurs :

    Réglage Valeur
    Entrée Sélectionnez Activé.
    Trafic d’entrée Sélectionnez Accepter le trafic n’importe où.
    Port cible Saisissez 80.
  2. Sélectionnez Vérifier + créer.

  3. Passez en revue vos paramètres, puis sélectionnez Créer.

  4. Attendez que le déploiement se termine (environ 5 minutes), puis sélectionnez Atteindre la ressource.

Vérifier le déploiement

  1. Dans la page Vue d’ensemble de l’application conteneur, copiez l’URL de l’application.

  2. Ouvrez l’URL dans un navigateur pour accéder à l’interface de génération d’image.

Déploiement avec l’interface de ligne de commande Azure

Vous pouvez effectuer un déploiement à l’aide de l’interface CLI Azure développeur (recommandée pour les applications Functions) ou du Azure CLI (pour plus de contrôle).

Déployer en tant qu’application Azure Functions à l’aide de l’interface CLI développeur Azure

Azure Developer CLI offre l’expérience de déploiement la plus rapide pour l’implémentation d’Azure Functions.

  1. Accédez au référentiel cloné :

    cd function-on-aca-gpu
    
  2. Initialisez et déployez l’application :

    azd up
    
  3. Lorsque vous y êtes invité, entrez ces valeurs :

    Prompt Valeur
    Nom de l’environnement Entrez un nom unique (par exemple, gpufunc-dev).
    Emplacement Azure Sélectionnez swedencentral.
    Abonnement Azure Sélectionnez votre abonnement.

    Le déploiement prend environ 15 à 20 minutes.

  4. Une fois le déploiement terminé, notez l’URL du point de terminaison affichée dans la sortie.

La azd up commande crée :

Resource Objectif
groupe de ressources Conteneur pour toutes les ressources.
Environnement Container Apps Héberge l’application avec le profil de charge de travail GPU.
Registre de conteneurs Stocke votre image conteneur personnalisée.
Compte de stockage Obligatoire pour Azure Functions runtime.
Application Insights Surveillance et diagnostics.
Application de fonction API de génération d’images.

Déployer en tant qu’application conteneur à l’aide de Azure CLI

Pour plus de contrôle sur chaque ressource, utilisez Azure CLI pour créer des ressources individuellement.

  1. Définissez des variables d’environnement :

    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"
    

    Ces variables définissent les valeurs de configuration utilisées tout au long du déploiement. Spécifie WORKLOAD_PROFILE_TYPE la configuration GPU NVIDIA T4.

  2. Créez le groupe de ressources :

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

    Cette commande crée un groupe de ressources en Suède Central, qui prend en charge les profils de charge de travail GPU. La sortie affiche Succeeded.

  3. Créez l’environnement Container Apps :

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

    Cette commande crée l’environnement managé qui héberge vos applications conteneur. La sortie affiche Succeeded.

  4. Ajoutez le profil de charge de travail GPU à votre environnement :

    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
    

    Cette commande ajoute le profil de charge de travail GPU NVIDIA T4 à votre environnement, ce qui active le calcul GPU pour les conteneurs qui l’utilisent.

  5. Créez l’application conteneur avec prise en charge du 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
    

    Cette commande crée l’application conteneur et l’affecte au profil de charge de travail GPU. Les valeurs --cpu et --memory correspondent aux exigences du profil T4. La commande génère l’URL de l’application.

  6. Copiez l’URL de sortie à tester dans la section suivante. --location $LOCATION
    --query « properties.provisioningState »
    --output tsv

    
    This command creates the managed environment that hosts your container apps. The output should display `Succeeded`.
    
    
  7. Ajoutez le profil de charge de travail GPU à votre environnement :

    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
    

    Cette commande ajoute le profil de charge de travail GPU NVIDIA T4 à votre environnement. Le profil active le calcul GPU pour les conteneurs qui en ont besoin.

  8. Créez l’application conteneur avec prise en charge du 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
    

    Cette commande crée l’application conteneur et l’affecte au profil de charge de travail GPU. Les valeurs --cpu et --memory correspondent aux exigences du profil T4. La commande génère l’URL de l’application.

  9. Copiez l’URL de sortie à tester dans la section suivante.

Tester l’API de génération d’images

Note

La première requête prend une à deux minutes pendant que le modèle télécharge (environ 5 Go) et se charge en mémoire GPU. Les requêtes suivantes se terminent en 5 à 15 secondes.

Vérifier que l’application est en cours d’exécution

Ouvrez l’URL de l’application dans un navigateur. Vous devez voir l’interface de génération d’image.

Générer une image à l’aide de l’interface utilisateur

  1. Dans le champ de texte, entrez une instruction telle que :

    A friendly robot chef cooking pasta in a cozy kitchen, digital art style
    
  2. Sélectionnez Générer une image.

  3. Attendez que l’image apparaisse. La première génération prend plus de temps en raison du chargement du modèle.

Générer une image à l’aide de l’API (déploiement des fonctions)

Si vous avez déployé la version Azure Functions, appelez directement l’API :

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

Remplacez <YOUR-FUNCTION-URL> par l’URL de votre application de fonction réelle. Le paramètre contrôle la num_steps qualité de l’image (des valeurs plus élevées produisent de meilleurs résultats mais prennent plus de temps).

Format de réponse attendu :

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

La réponse contient une image PNG encodée en base64 que vous pouvez décoder et enregistrer.

Surveiller l’utilisation du GPU

La supervision vous aide à comprendre l’utilisation du GPU et à optimiser les coûts.

Afficher l’état du GPU dans la console

  1. Dans le portail Azure, accédez à votre application conteneur.

  2. Sous Surveillance, sélectionnez Console.

  3. Sélectionnez votre réplica et votre conteneur.

  4. Sélectionnez Reconnecter, puis choisissez /bin/bash comme commande de démarrage.

  5. Exécutez cette commande pour afficher l’état du GPU :

    nvidia-smi
    

    La sortie affiche l’utilisation de la mémoire GPU, le pourcentage d’utilisation et les processus en cours d’exécution.

Afficher les métriques dans Azure Monitor

  1. Dans le portail Azure, accédez à votre application conteneur.

  2. Sous Surveillance, sélectionnez Métriques.

  3. Ajoutez des métriques pour :

    • Utilisation du processeur
    • Utilisation de la mémoire
    • Nombre de réplicas

Pour obtenir des options d’observabilité détaillées, consultez Surveiller Azure Container Apps.

Optimiser les performances de démarrage à froid

Pour réduire le temps de démarrage à froid des charges de travail de production :

  1. Activez la diffusion des artefacts en continu pour accélérer le téléchargement des images de conteneur.

  2. Définissez le nombre minimal de réplicas sur 1 pour maintenir une instance active :

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

    Cette commande conserve une instance toujours en cours d’exécution, éliminant les retards de démarrage à froid, mais entraîne des coûts continus.

Pour plus de techniques d’optimisation, consultez Améliorer le démarrage à froid pour les GPU serverless.

Résolution des problèmes

Problème La cause Solution
Erreur « Quota GPU dépassé » Aucun quota GPU n’est approuvé. Demandez un quota GPU et attendez l’approbation.
Le conteneur ne parvient pas à démarrer Délai d’attente du téléchargement de l’image. Activez le streaming d’artefacts ou utilisez une image de base plus petite.
La première demande expire Téléchargement du modèle en cours. Attendez 2 à 3 minutes et réessayez. Ce retard est attendu.
Erreur « CUDA n’a plus de mémoire » Le modèle dépasse la mémoire GPU. Réduisez la taille du lot ou utilisez une variante de modèle plus petite.
502 Passerelle incorrecte Conteneur non prêt. Vérifier les journaux de conteneur ; vérifiez que les sondes d’intégrité sont configurées.
Génération lente d’images Étapes d’inférence insuffisantes. Augmentez num_steps le paramètre (valeurs plus élevées = meilleure qualité, plus lente).

Pour consulter les journaux des conteneurs afin de procéder au débogage :

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

Cette commande diffuse des journaux en temps réel à partir de votre conteneur, ce qui vous aide à identifier les problèmes de démarrage ou les erreurs d’exécution.

Nettoyer les ressources

Lorsque vous n’avez plus besoin des ressources, supprimez-les afin d’éviter des frais supplémentaires.

  1. Dans le portail Azure, recherchez les groupes de ressources.

  2. Sélectionnez le groupe de ressources que vous avez créé (par exemple). rg-gpu-image-gen

  3. Sélectionnez Supprimer le groupe de ressources.

  4. Pour confirmer la suppression, entrez le nom du groupe de ressources.

  5. Sélectionnez Supprimer.

Si vous avez déployé à l’aide de l’interface CLI Azure développeur :

azd down

Si vous avez déployé à l’aide de Azure CLI :

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

L’indicateur --no-wait retourne immédiatement tandis que la suppression se poursuit en arrière-plan.

Prochaines étapes

Pour plus d’informations sur l’optimisation gpu, consultez :