For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-deploy-stable-diffusion-webui.md.

AI Deploy - Tutoriel - Déployer Stable Diffusion WebUI (AUTOMATIC1111)

Voir en Markdown

Comment déployer l'interface Stable Diffusion WebUI d'AUTOMATIC1111 sur des GPUs

Info

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.

Vue d'ensemble

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 :

En pratique

Vous allez suivre différentes étapes pour déployer votre application 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 :

git clone https://github.com/ovh/ai-training-examples.git

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 :

# 🐳 Base image
FROM pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime

# 🚫 Remove interactivity since using the base image will ask for a timezone - This allows to not provide it
ENV DEBIAN_FRONTEND=noninteractive

# 📚 Install missing system packages (git, libgl1, ..., are needed for Stable Diffusion and are not installed in the base image)
RUN apt-get update && \
    apt-get install -y wget git python3 python3-venv libgl1 libglib2.0-0

# 👱 Set the working directory inside the container
WORKDIR /workspace

# 📥 Download the webui.sh script from the specified URL
RUN wget -q https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh

# 👮‍♀️ Make the webui.sh script executable
RUN chmod +x webui.sh

# ⌛️ Install the webui.sh file (--exit parameter allows to only install it without without running it)
RUN ./webui.sh -f --exit

# 🔑 Give correct access rights to the OVHcloud user
RUN chown -R 42420:42420 /workspace
ENV HOME=/workspace

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 :

# Build the image using your machine's default architecture
docker build . -t sd_webui:latest

# Build image targeting the linux/amd64 architecture
docker buildx build --platform linux/amd64 -t sd_webui:latest .
  • 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 exemple ARM64 sur Apple Silicon), l’image obtenue ne sera pas compatible et ne pourra pas être déployée.

  • La seconde commande cible explicitement l’architecture linux/amd64 afin de garantir la compatibilité avec nos services AI. Elle nécessite buildx, 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

Info

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.

Warning

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 :

ovhai registry list

Vous devriez voir un registre de type SHARED. Connectez-vous ensuite à votre registre partagé avec vos identifiants habituels d’utilisateur AI Platform :

docker login -u <user> -p <password> <shared-registry-address>

Taguez l’image compilée et envoyez-la vers votre registre partagé :

docker tag sd_webui:latest <shared-registry-address>/sd_webui:latest
docker push <shared-registry-address>/sd_webui:latest

É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 :

ovhai app run <shared-registry-address>/sd_webui:latest \
    --name stable-diffusion-webui \
    --gpu 1 \
    --default-http-port 7860 \
    --volume stable_diff_checkpoints@GRA:/workspace/stable-diffusion-webui/models/:rw \
    -- bash -c './webui.sh --xformers --enable-insecure-extension-access --listen --api'
Info

Explication des paramètres

  • <shared-registry-address>/sd_webui:latest est 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_webui est 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 7860 indique que le port à joindre sur l’URL de l’app est 7860 (port Gradio par défaut).

  • --gpu 1 indique que nous demandons 1 GPU pour cette app.

  • --volume permet 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épertoire stable-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 -c vous permet de lancer la Web UI en exécutant le script webui.sh avec 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-http si 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) :

ovhai app logs <app_id> --follow

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 :
curl -L -O https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
  • Ajouter le checkpoint au conteneur que vous avez monté sur votre app. Voici la commande par défaut pour cela :
ovhai bucket object upload <bucket_name>@<datastore_alias> object1 --add-prefix /model_subdirectory/

En suivant l’exemple donné dans ce tutoriel (conteneur nommé stable_diff_checkpoints et créé sur GRA), nous utiliserons :

ovhai bucket object upload stable_diff_checkpoints@GRA sd_xl_base_1.0.safetensors --add-prefix /Stable-diffusion/
Info

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 :

`ovhai bucket object list <bucket_name>@<datastore_alias>`

En suivant l’exemple donné dans ce tutoriel, nous utiliserons :

`ovhai bucket object list stable_diff_checkpoints@GRA`

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 :

ovhai app pull-data <app_id>

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 :

ovhai app get <app_id>

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.

Vue d'ensemble

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 :

ovhai app run pytorch/pytorch:2.1.0-cuda12.1-cudnn8-runtime \
    --name sdxl \
    --default-http-port 3000 \
    --volume standalone:/workspace:rw \
    --probe-path /healthz \
    -- bash -c 'pip install onediffusion && /workspace/.local/bin/onediffusion start 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 :

*: 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.

Cette page vous a-t-elle aidé ?