Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
Dans le portail Azure, recherchez Container Apps et sélectionnez-le.
Sélectionnez Créer une>application conteneur.
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-genNom de l’application conteneur Entrez ca-image-genSource de déploiement Sélectionner image de conteneur Region Sélectionner Suède Centre Dans l’environnement Container Apps, sélectionnez Créer nouveau.
Dans le volet Créer un environnement Container Apps , entrez
cae-gpu-image-genle nom de l’environnement.Sélectionnez Créer pour créer l’environnement.
Sélectionnez Suivant : Conteneur >.
Configurer le conteneur avec GPU
Sous l’onglet Conteneur , configurez les paramètres suivants :
Réglage Valeur Nom Entrez gpu-image-gen-containerSource 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.comImage et étiquette Entrez k8se/gpu-quickstart:latestProfil 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 Sélectionnez Suivant : Entrée >.
Configurez une entrée
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 80Sélectionnez Vérifier + créer.
Passez en revue vos paramètres, puis sélectionnez Créer.
Attendez que le déploiement se termine (environ 5 minutes), puis sélectionnez Atteindre la ressource.
Vérifier le déploiement
Dans la page Vue d’ensemble de l’application conteneur, copiez l’URL de l’application.
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.
Accédez au référentiel cloné :
cd function-on-aca-gpuInitialisez et déployez l’application :
azd upLorsque 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 swedencentralAbonnement Azure Sélectionnez votre abonnement Le déploiement prend environ 15 à 20 minutes.
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.
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_TYPEla configuration GPU NVIDIA T4.Créez le groupe de ressources :
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvLa 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.Créez l’environnement Container Apps :
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvCette commande crée l’environnement managé qui héberge vos applications conteneur. La sortie doit s’afficher
Succeeded.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_TYPECette 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.
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 tsvCette commande crée l’application conteneur et l’affecte au profil de charge de travail GPU. Les valeurs
--cpuet--memorycorrespondent aux exigences du profil T4. La commande génère l’URL de l’application.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
Dans le champ de texte, entrez une instruction telle que :
A friendly robot chef cooking pasta in a cozy kitchen, digital art styleSélectionnez Générer une image.
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
Dans le portail Azure, accédez à votre application conteneur.
Sous Surveillance, sélectionnez Console.
Sélectionnez votre réplica et votre conteneur.
Sélectionnez Reconnecter, puis choisissez /bin/bash comme commande de démarrage.
Exécutez la commande suivante pour afficher l’état du GPU :
nvidia-smiLa 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
Dans le portail Azure, accédez à votre application conteneur.
Sous Surveillance, sélectionnez Métriques.
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 :
Activer le streaming d’artefacts pour accélérer le tirage d’images conteneur.
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 1Cette 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.
Dans le portail Azure, recherchez les groupes de ressources.
Sélectionnez le groupe de ressources que vous avez créé (par exemple).
rg-gpu-image-genSélectionnez Supprimer le groupe de ressources.
Pour confirmer la suppression, entrez le nom du groupe de ressources.
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.