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 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
Ouvrez le portail Azure et recherchez Container Apps.
Sélectionnez Créer une>application conteneur.
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. Dans l’environnement Container Apps, sélectionnez Créer nouveau.
Dans la boîte de dialogue 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 , 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. Sélectionnez Suivant : Entrée >.
Configurez une entrée
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.Sé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 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.
Accédez au référentiel cloné :
cd function-on-aca-gpuInitialisez et déployez l’application :
azd upLorsque 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.
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.
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_TYPEla configuration GPU NVIDIA T4.Créez le groupe de ressources :
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState" \ --output tsvCette 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.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 affiche
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, ce qui active le calcul GPU pour les conteneurs qui l’utilisent.
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. --location $LOCATION
--query « properties.provisioningState »
--output tsvThis command creates the managed environment that hosts your container apps. The output should display `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 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
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 cette commande 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 :
Activez la diffusion des artefacts en continu pour accélérer le téléchargement des images de conteneur.
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 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 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.
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 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 :