AI Deploy - Tutoriel - Déployer Stable Diffusion WebUI (AUTOMATIC1111)
Comment déployer l'interface Stable Diffusion WebUI d'AUTOMATIC1111 sur des GPUs
AI Deploy est couvert par les Conditions particulières OVHcloud Public Cloud.
Introduction
Stable Diffusion est un modèle de deep learning sorti en 2022. Il est principalement utilisé pour générer des images et des vidéos détaillées à partir de descriptions textuelles, mais il peut également être appliqué à d’autres tâches telles que l’inpainting, l’outpainting, ou la génération de traductions image-à-image guidées par un prompt textuel. Ce qui le distingue, c’est qu’il est open source, ce qui le rend plus accessible que ses prédécesseurs.
Stable Diffusion WebUI, également connu sous le nom d’AUTOMATIC1111 (son créateur), est l’interface web utilisateur (WebUI) par défaut pour de nombreux utilisateurs avancés de Stable Diffusion. Cette interface vous permet de choisir vos modèles Stable Diffusion (checkpoints), vos extensions et vos paramètres de génération.
Objectif
Dans ce tutoriel, nous allons vous guider tout au long du processus de déploiement de la Stable Diffusion WebUI d’AUTOMATIC1111 sur AI Deploy. Nous vous montrerons également comment ajouter de nouveaux checkpoints de modèle à votre application.
Contrairement à une application hébergée en local, l’utilisation d’AI Deploy offre une inférence extrêmement rapide puisqu’elle est déployée sur des ressources puissantes (GPU). Vous pouvez ainsi générer le contenu souhaité dans les meilleurs délais.
Prérequis
Pour construire et déployer votre app Stable Diffusion, vous avez besoin de :
- Un projet AI Deploy créé au sein d’un projet Public Cloud de votre compte OVHcloud
- Un utilisateur pour AI Deploy & Object Storage
- L’AI CLI OVHcloud installée sur votre ordinateur local
- Docker installé sur votre ordinateur local, ou un accès à une instance Docker Debian, disponible sur le
En pratique
Vous allez suivre différentes étapes pour déployer votre application Stable Diffusion :
- Étape 1 : configurer l’environnement
- Étape 2 : déploiement de l’app Stable Diffusion
- Étape 3 : ajouter des checkpoints Stable Diffusion
Étape 1 : configurer l’environnement
Dans cette section, nous allons vous guider tout au long du processus d’utilisation d’une image Docker qui servira de base au déploiement du modèle Stable Diffusion sur AI Deploy.
Pour cela, vous aurez besoin de Docker, installé directement sur votre ordinateur, ou via une instance Docker Debian, disponible sur le Public Cloud.
Construire une image Docker
Le Dockerfile permettant de construire l’image à utiliser est déjà fourni. Clonez le dépôt GitHub ai-training-examples :
Exécutez ensuite cd ai-training-examples/apps/gradio/stable-diffusion/ pour vous déplacer dans le dossier de la Stable Diffusion Web UI. Si vous exécutez ls pour lister les fichiers existants, vous devriez voir le Dockerfile, qui contient toutes les commandes que vous pouvez appeler en ligne de commande pour exécuter votre application (comme l’installation de paquets système par exemple). Voici le Dockerfile :
Comme vous pouvez le voir grâce aux commentaires, ce Dockerfile installe plusieurs paquets, télécharge le script d’installation de l’interface, puis l’exécute. Ces instructions seront exécutées étape par étape pendant le processus de build.
Pour lancer ce processus, assurez-vous d’être dans le dossier contenant le Dockerfile (ai-training-examples/apps/gradio/stable-diffusion/). Une fois dedans, exécutez l’une des commandes suivantes pour construire l’image de votre application :
-
La première commande construit l’image en utilisant l’architecture par défaut de votre système. Cela peut fonctionner si votre machine utilise déjà l’architecture
linux/amd64, requise pour exécuter des containers avec nos produits AI. Cependant, sur des systèmes ayant une architecture différente (par exempleARM64surApple Silicon), l’image obtenue ne sera pas compatible et ne pourra pas être déployée. -
La seconde commande cible explicitement l’architecture
linux/amd64afin de garantir la compatibilité avec nos services AI. Elle nécessitebuildx, qui n’est pas installé par défaut. Si vous n’avez jamais utilisébuildx, vous pouvez l’installer en exécutant :docker buildx install
L’argument point . indique que votre contexte de build (emplacement du Dockerfile et des autres fichiers nécessaires) est le répertoire courant.
L’argument -t vous permet de choisir l’identifiant à donner à votre image. En général, les identifiants d’image se composent d’un nom et d’un tag de version <name>:<version>. Pour cet exemple, nous avons choisi sd_webui:latest.
Envoyer l’image vers un registre
Une fois votre image construite, vous devrez la tagger et l’envoyer vers un registre. Lorsque vous travaillez avec les solutions AI d’OVHcloud, plusieurs registres peuvent être utilisés (Managed Private Registry OVHcloud, Docker Hub, GitHub packages, ...). Dans ce tutoriel, nous utiliserons le registre partagé OVHcloud, une solution dédiée aux solutions AI.
Avertissement Le registre partagé doit être utilisé uniquement à des fins de test. Nous vous recommandons de créer et de rattacher votre propre registre. Plus d’informations à ce sujet sont disponibles ici. Les images envoyées vers ce registre sont réservées aux workloads AI Tools et ne seront pas accessibles pour des usages externes.
Trouvez l’adresse de votre registre partagé en lançant cette commande :
Vous devriez voir un registre de type SHARED. Connectez-vous ensuite à votre registre partagé avec vos identifiants habituels d’utilisateur AI Platform :
Taguez l’image compilée et envoyez-la vers votre registre partagé :
Étape 2 : déploiement de l’app Stable Diffusion
Une fois votre image envoyée, elle peut être utilisée pour déployer de nouvelles solutions AI.
Exécutez la commande suivante pour déployer votre application Stable Diffusion en utilisant votre image Docker personnalisée :
Explication des paramètres
-
<shared-registry-address>/sd_webui:latestest l’image sur laquelle repose l’app. Remplacez l’adresse du registre par la vôtre. Assurez-vous également d’utiliser le bon nom d’image. -
--name stable_diffusion_webuiest un argument facultatif qui vous permet de donner un nom personnalisé à votre app, facilitant ainsi la gestion de l’ensemble de vos apps. -
--default-http-port 7860indique que le port à joindre sur l’URL de l’app est7860(port Gradio par défaut). -
--gpu 1indique que nous demandons 1 GPU pour cette app. -
--volumepermet de préciser quel conteneur vous souhaitez ajouter à votre app. La Stable Diffusion Web UI récupère les checkpoints de modèle depuis le répertoirestable-diffusion-webui/models/. C’est pourquoi nous montons un volume sur ce répertoire. Cela permettra d’interagir avec lui, en ajoutant de nouveaux checkpoints de modèle, puis de les utiliser au sein de la Web UI. Ce volume est monté avec la permission RW (lecture-écriture), ce qui permet d’ajouter des modèles et d’y accéder. Cependant, les checkpoints ne peuvent pas être ajoutés directement dans le volume. Ils devront être ajoutés dans des sous-répertoires, correspondant à leur nature (Stable Diffusion / Variational Autoencoders (VAE)). L’utilisation et l’ajout de nouveaux checkpoints seront détaillés à l’étape 3. -
-- bash -cvous permet de lancer la Web UI en exécutant le scriptwebui.shavec des arguments en ligne de commande. Personnalisez les arguments selon vos besoins. La liste des options disponibles est accessible sur le dépôt GitHub de la Stable Diffusion Web UI d’AUTOMATIC1111. -
Pensez à ajouter l’attribut
--unsecure-httpsi vous souhaitez que votre application soit accessible sans aucune authentification.
Après l’exécution de la commande, le volume sera créé s’il n’existe pas encore, et l’image Docker sera récupérée. La Web UI téléchargera ensuite un checkpoint Stable Diffusion par défaut, la rendant prête à l’emploi.
Vous pouvez suivre la progression du déploiement de votre app et de ces étapes via le lien « Info Url », ou via les logs de votre app en utilisant (le paramètre --follow permet de streamer les logs) :
Une fois votre app prête à l’emploi, vous pourrez générer vos premières images à l’aide du checkpoint par défaut.
Pour votre information, le paramètre --volume permet d’utiliser des conteneurs Object Storage compatibles Swift comme S3*. Cependant, il est important de noter que pour une utilisation compatible S3, une configuration spécifique est nécessaire. Si l’Object Storage compatible S3 n’est pas encore configuré et que vous souhaitez l’utiliser, veuillez consulter le guide de conformité compatible S3.
Étape 3 : ajouter des checkpoints Stable Diffusion
Il est probable que vous souhaitiez ajouter de nouveaux checkpoints afin de générer des images dans un style spécifique, de meilleure qualité que celles fournies par le checkpoint par défaut.
Comme expliqué précédemment dans le paramètre --volume, les fichiers de modèle sont enregistrés dans le répertoire stable-diffusion-webui/models/. Ce répertoire contient plusieurs sous-répertoires. Par exemple, les checkpoints Stable Diffusion sont stockés dans le répertoire stable-diffusion-webui/models/Stable-diffusion, tandis que ceux des Variational Autoencoder (VAE) sont enregistrés dans stable-diffusion-webui/models/VAE.
Pour ajouter un nouveau checkpoint Stable Diffusion, vous devez le télécharger et l’ajouter au dossier correspondant (stable-diffusion-webui/models/Stable-diffusion).
Par exemple, si vous souhaitez ajouter et utiliser la version XL de Stable Diffusion, vous devrez :
- Rechercher le checkpoint de modèle. Beaucoup sont disponibles sur la page Hugging Face de Stability AI.
- Télécharger le checkpoint de modèle. Cela peut se faire manuellement ou en ligne de commande, en exécutant :
- Ajouter le checkpoint au conteneur que vous avez monté sur votre app. Voici la commande par défaut pour cela :
En suivant l’exemple donné dans ce tutoriel (conteneur nommé stable_diff_checkpoints et créé sur GRA), nous utiliserons :
N’oubliez pas d’utiliser un préfixe
Comme expliqué ci-dessus, il est très important de placer le checkpoint dans le sous-dossier (stable-diffusion-webui/models/Stable-diffusion), et non dans le dossier models principal, sous peine de rendre le checkpoint inutilisable.
Cela peut se faire à l’aide du paramètre --add-prefix /Stable-diffusion/, qui placera le checkpoint sd_xl_base_1.0.safetensors dans le répertoire stable-diffusion-webui/models/Stable-diffusion/.
Puis-je ne pas préciser de préfixe ?
Si vous ne prévoyez d’ajouter que des checkpoints Stable Diffusion, vous pouvez également monter votre volume (lors du déploiement de l’app) directement sur @GRA:/workspace/stable-diffusion-webui/models/Stable-diffusion/ plutôt que sur @GRA:/workspace/stable-diffusion-webui/models/. Cela vous évitera de devoir préciser un préfixe lors de l’envoi d’un checkpoint, le volume étant monté directement au bon endroit.
Une fois le checkpoint envoyé, vous devriez le voir en listant les objets de votre volume :
En suivant l’exemple donné dans ce tutoriel, nous utiliserons :
L’ajout d’un objet dans un conteneur ne le rendra pas immédiatement disponible dans l’app. Vous devrez déclencher manuellement une synchronisation des données.
Pour cela, vous aurez besoin de l’UUID de votre app. Il vous a été communiqué lors de son déploiement. Si vous l’avez perdu, vous pouvez le retrouver dans l’espace client OVHcloud, ou via la CLI en listant toutes vos apps, avec ovhai app list. Vous devrez retrouver l’UUID de l’app nommée stable-diffusion-webui.
Vous pouvez ensuite démarrer un datasync pour synchroniser votre app avec votre conteneur, qui contient votre nouveau checkpoint de modèle, en exécutant :
Selon la taille et le nombre de checkpoints ajoutés, cela prendra plus ou moins de temps. La progression de la synchronisation des données peut être suivie via les informations de l’app :
Dans les informations affichées, un champ Data Sync: contiendra toutes les synchronisations de données effectuées sur votre app. Dans votre cas, c’est la plus récente qui vous intéresse (affichée tout en bas). Si elle est à l’état RUNNING, cela signifie qu’elle n’est pas encore terminée. Vous pouvez également voir la progression des données envoyées. Elle sera prête une fois le statut DONE atteint.
Ensuite, sur la Web UI, rechargez la liste des checkpoints Stable Diffusion utilisables en haut à gauche, en cliquant sur l’icône 🔄. Vous devriez y voir votre nouveau checkpoint de modèle, prêt à l’emploi !
Aller plus loin
Ce tutoriel vous a guidé à travers le déploiement d’une Stable Diffusion Web UI pour la génération d’images.
Si vous souhaitez utiliser une API, vous pouvez utiliser le paramètre --api et consulter la documentation d’AUTOMATIC1111.
Notez qu’il existe d’autres projets sous forme d’API, comme One Diffusion, de BentoML, très simple à mettre en œuvre. Voici la commande One Diffusion pour déployer Stable Diffusion XL :
Si les concepts de génération d’images vous intéressent, vous pouvez apprendre le fonctionnement des réseaux de génération d’images et entraîner votre propre réseau antagoniste génératif (GAN). Consultez ce guide AI Notebooks : Créer et entraîner un modèle de génération d’images.
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.
Nous voulons vos retours !
N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :
- Sur le serveur Discord OVHcloud
*: S3 est une marque déposée d’Amazon Technologies, Inc. Le service d’OVHcloud n’est ni sponsorisé, ni approuvé, ni affilié de quelque manière que ce soit à Amazon Technologies, Inc.