Partager via


Tutoriel : Déployer la génération d’images IA avec des GPU serverless

Dans ce tutoriel, vous déployez un générateur d’images à diffusion stable à l’aide de 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.

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

Dans ce tutoriel, vous allez apprendre à :

  • 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 inutiles

Prerequisites

Requirement Descriptif
Abonnement Azure Si vous n’en avez pas, créez un compte gratuit.
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.
Interface en ligne de commande Azure pour les développeurs Installez Azure Developer CLI pour un déploiement simplifié.
Docker Desktop Requis pour le développement de conteneurs local. Installez Docker Desktop.

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é.

Pour vérifier que vos outils sont installés correctement, exécutez les commandes suivantes :

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ébergez votre application avec une prise en charge de GPU sans serveur
Profil de charge de travail GPU Fournit un calcul GPU NVIDIA T4 pour l’inférence IA
Azure Container Registry Stocke votre image conteneur personnalisée
Stockage Azure Obligatoire pour l'environnement d’exécution Azure Functions (déploiement des Functions uniquement)
Application Insights Fournit des analyses et des diagnostics

L’application suit un flux de requête simple. Lorsqu’un client envoie une requête, il atteint d’abord le point de terminaison d’entrée Container Apps. Votre application traite ensuite 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 au client.

Considérations relatives aux coûts

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

Facteur Impact
Type de l'GPU NVIDIA T4 coûte moins de A100
Réplicas minimales Défini sur 0 pour le développement (réduit à zéro lorsque inactif)
Temps de démarrage à froid La première requête prend 1 à 2 minutes (chargement du modèle)
Durée de la demande La génération d’images prend généralement 5 à 15 secondes

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 qui contient l’implémentation d’Azure Functions :

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

Le référentiel contient :

Fichier Objectif
function_app.py Fonction déclenchée par HTTP pour la génération d’images
requirements.txt Dépendances Python, y compris la bibliothèque de diffusions
Dockerfile Définition d’image de conteneur avec prise en charge GPU
host.json Configuration d’Azure Functions
azure.yaml Configuration du déploiement 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. Dans le portail Azure, recherchez Container Apps et sélectionnez-le.

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

  3. Sous l’onglet Informations de base , configurez les paramètres suivants :

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

  5. Dans le volet 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 , configurez les paramètres suivants :

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

Configurez une entrée

  1. Sous l’onglet Entrée , configurez les paramètres suivants :

    Réglage Valeur
    Entrée Sélectionnez Activé
    Trafic d’entrée Sélectionner Accepter le trafic n’importe où
    Port cible Entrez 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 développeur Azure (recommandée pour l’application Functions) ou d’Azure CLI (pour plus de contrôle sur les ressources individuelles).

Option A : Déployer en tant qu’application Azure Functions avec azd

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é, fournissez les valeurs suivantes :

    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 les ressources suivantes :

Resource Objectif
groupe de ressources Conteneur pour toutes les ressources
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 Requis pour le runtime Azure Functions
Application Insights Surveillance et diagnostics
Application de fonction API de génération d’images

Option B : Déployer en tant qu’application conteneur à l’aide d’Azure CLI

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

  1. Définir les 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"
    

    Ce script définit 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
    

    La commande crée un groupe de ressources en Suède Central, qui prend en charge les profils de charge de travail GPU. La sortie doit s’afficher 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 doit s’afficher 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. Le profil active le calcul GPU pour les conteneurs qui en ont besoin.

  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.

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 d’Azure Functions, vous pouvez appeler l’API directement :

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 prend 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 la commande suivante 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. Activer le streaming d’artefacts pour accélérer le tirage d’images conteneur.

  2. Définissez le nombre minimal de réplicas sur 1 pour conserver 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 approuvé Demander un quota GPU et attendre l’approbation
Le conteneur ne parvient pas à démarrer Délai d'attente de récupération d'image Activer le streaming d’artefacts ou utiliser 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 court délai est un comportement attendu.
Erreur « CUDA n’a plus de mémoire » Le modèle dépasse la mémoire GPU Réduire la taille du lot ou utiliser une variante de modèle plus petite
502 Passerelle incorrecte Conteneur non prêt Examiner les journaux de conteneur ; s'assurer que les sondes de santé sont configurées.
Génération lente d’images Étapes d’inférence insuffisantes Augmenter num_steps le paramètre (valeurs plus élevées = meilleure qualité, plus lent)

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

Une fois que vous avez fini d'utiliser les ressources, supprimez-les pour éviter les frais en cours.

  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 d’Azure Developer CLI :

azd down

Si vous avez déployé à l’aide d’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