Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Déployer Stable Diffusion Automatic1111 sur des GPU Oracle Cloud Infrastructure
Dans le paysage en constante évolution de l'intelligence artificielle (IA) et du machine learning (ML), les chercheurs et les ingénieurs repoussent constamment les limites de ce qui est possible. Un développement remarquable qui a pris de l'ampleur ces dernières années est le modèle de diffusion stable. Cette technologie de pointe offre des avantages significatifs, promet un large éventail de cas d'utilisation et continue de voir des développements passionnants. Dans ce tutoriel, nous explorerons le monde des modèles d'IA/ML de diffusion stable, explorerons leurs avantages, explorerons leurs cas d'utilisation et discuterons des derniers développements dans ce domaine fascinant.
Introduction
Diffusion stable : la diffusion stable est une approche relativement nouvelle et innovante dans le monde de l'IA et du machine learning. C'est un modèle génératif probabiliste qui a gagné en importance en raison de sa capacité à générer des échantillons de données de haute qualité et de sa robustesse à diverses conditions d'entraînement. Le modèle de diffusion stable, souvent basé sur le processus de diffusion, permet la génération et la manipulation de données contrôlées. Voici un bref aperçu de ses composants clés :
Processus de diffusion : l'idée principale du modèle de diffusion stable est le processus de diffusion, qui modélise l'évolution d'une distribution de données au fil du temps. Il s'agit d'appliquer de manière itérative un processus de bruit aux données jusqu'à ce qu'elles convergent vers la distribution souhaitée.
Auto-encodeur de bruit : au cours du processus de diffusion, un auto-encodeur de bruit est utilisé pour récupérer les données d'origine à partir des échantillons bruyants. Ce processus permet au modèle d'apprendre et de capturer des fonctionnalités significatives des données.
Objectif
Automatic1111 La diffusion stable est un outil révolutionnaire dans le domaine de l'imagerie générée par l'IA. Ce WebUI innovant offre une plate-forme conviviale, remodelant le paysage de la création d'images générées par l'IA. Avec elle, les utilisateurs peuvent opérer et superviser de manière transparente leurs modèles d'IA dédiés à la génération d'images. Nous allons déployer Automatic1111 et ses prérequis pour inférer votre modèle de diffusion stable préféré dans Oracle Linux 8.
Prérequis
-
Location Oracle Cloud Infrastructure (OCI) avec limites de GPU A10. Au moins 1 A10 est nécessaire.
-
Réseau cloud virtuel (VCN) OCI existant avec au moins un sous-réseau public et des limites pour l'adresse IP publique.
-
Un point de contrôle de modèle de diffusion stable de votre créateur Huggingface préféré. Limitez le modèle à v1-5 et v2-1. Stable Diffusion XL est difficile à charger sur un seul GPU A10. Reportez-vous à la section Stable Diffusion Model - Hugging Face.
Tâche 1 : provisionner une instance de calcul GPU sur OCI
-
Lancez une instance de calcul sur OCI avec un VCN existant avec un sous-réseau public. Pour plus d'informations, reportez-vous à Lancement d'une instance Compute.
-
Choisissez une instance de GPU A10 unique parmi les formes GPU.A10 disponibles.
VM.GPU.A10.1
-
Lors du lancement d'une instance de calcul, remplacez la forme par l'une des formes ci-dessus. Pour lancer la machine virtuelle GPU.A10, cliquez sur Spécialité et génération précédente, puis sélectionnez les formes VM.GPU.A10.1.
-
Si aucune limite de service n'est définie pour votre location pour GPU.A10, ces formes ne figurent pas dans la liste des formes.
-
Pour vérifier les limites de location dans la console OCI, définissez la région dans laquelle vous allez provisionner une instance de calcul GPU.A10, ouvrez le menu de navigation et cliquez sur Gouvernance et administration.
-
Sous Gestion des locations, sélectionnez Limites, quotas et utilisation.
-
Définissez le service sur Compute, sélectionnez l'un des domaines de disponibilité dans le champ de portée et saisissez GPU.A10 dans le champ de ressource.
-
Sélectionnez GPU pour la machine virtuelle basée sur A10 et les instances BM.
-
-
Les limites de Compute sont applicables par domaine de disponibilité. Vérifiez si la limite est définie dans l'un des domaines de disponibilité de la région. Si la limite de service est définie sur 0 pour tous les domaines de disponibilité, vous pouvez cliquer sur le lien "Demander une augmentation de limite de service" et soumettre une demande d'augmentation de limite pour cette ressource.
Remarque : pour accéder aux limites, aux quotas et à l'utilisation, vous devez être membre du groupe d'administrateurs de location ou une stratégie doit être affectée à votre groupe pour lire LimitsAndUsageViewers.
- Pour plus d'informations, reportez-vous à Limites de service.
-
Actuellement, les formes de calcul OCI GPU.A10 prennent en charge Oracle Linux, Ubuntu et Rocky Linux. Windows n'est pris en charge que par les formes de machine virtuelle.
Remarque : Rocky Linux n'est pas officiellement pris en charge par NVIDIA.
-
Lors du provisionnement d'une instance de calcul sur OCI, utilisez une image de système d'exploitation Oracle Linux 8 standard ou une image compatible GPU Oracle Linux 8. Si vous utilisez une image de système d'exploitation Oracle Linux standard, sachez que le pilote NVIDIA vGPU doit être installé. Pour notre tutoriel, nous allons avec l'image GPU Oracle Linux 8.
-
Développez la section Boot Volume pour augmenter le volume d'initialisation à au moins 250 Go et augmentez le nombre de VPU à des performances plus élevées afin d'obtenir une lecture/écriture correcte pour une meilleure inférence.
-
Lancez l'instance avec les paramètres ci-dessus.
Tâche 2 : prérequis d'installation pour Automatic1111
-
Les pilotes NVIDIA étant inclus dans l'image de build de GPU Oracle Linux, nous pouvons simplement vérifier leur présence et leurs fonctionnalités en exécutant la commande nvidia-smi. Cela garantit que tout est correctement configuré et que les pilotes GPU fonctionnent comme prévu.
-
Augmenter la mémoire système des instances OCI FileSystem est fourni avec la valeur par défaut 46.6GB. Puisque nous avons augmenté notre volume d'initialisation à 300 Go, augmentons notre système de fichiers avec une commande OCI intégrée à partir d'OCI Util.
Pour développer le système de fichiers sur votre instance OCI après avoir augmenté le volume d'initialisation à 300 Go, vous pouvez utiliser la commande OCI (Oracle Cloud Infrastructure) intégrée. Voici comment procéder :
-
Vérifiez l'utilisation actuelle du disque : avant de redimensionner le système de fichiers, il est recommandé de vérifier l'utilisation actuelle du disque pour vous assurer qu'elle reflète l'augmentation de la taille du volume d'initialisation. Vous pouvez utiliser la commande
df
à cette fin :df -h
Vérifiez que l'espace disponible correspond à votre nouvelle taille de volume d'initialisation (300 Go).
-
Redimensionner le système de fichiers : utilisez la commande de l'utilitaire OCI pour redimensionner le système de fichiers afin d'utiliser l'espace de stockage augmenté. La commande exacte peut varier en fonction du système d'exploitation et du système de fichiers que vous utilisez. Les informations ci-dessous sont utilisées pour Oracle Linux 8.
sudo /usr/libexec/oci-growfs
Entrez "y" lorsque vous êtes invité à confirmer l'extension de la partition.
-
Vérification de l'extension du système de fichiers : après avoir exécuté la commande resize, vérifiez à nouveau l'utilisation du disque pour confirmer que le système de fichiers a été correctement développé :
df -h
Elle doit maintenant refléter l'augmentation de la taille du système de fichiers.
En suivant ces étapes, vous devriez être en mesure d'étendre votre système de fichiers sur votre instance OCI pour utiliser l'espace de stockage supplémentaire fourni par le volume d'initialisation augmenté.
-
-
Installez Python 3.10.6 dans Oracle Linux 8.
sudo dnf update -y sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make -y wget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tar.xz tar -xf Python-3.10.6.tar.xz cd Python-3.10.6/ ./configure --enable-optimizations make -j 2 nproc sudo make altinstall python3.10 -V
-
Maintenant que Python3.10.6 est installé, installons git pour cloner les référentiels Git.
sudo dnf install git
-
Clonez Automatic1111.
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Vous devez avoir le repo stable-diffusion-webui dans votre répertoire cloné.
-
Téléchargez votre modèle de diffusion stable préféré dans le répertoire
stable-diffusion-webui/models/Stable-Diffusion
.- Pour notre cas d'emploi, j'ai téléchargé v1-5-pruned.ckpt à partir de stable-diffusion-v1-5.
-
Mettez à jour les règles de pare-feu pour autoriser le trafic de l'appareil 7860.
sudo firewall-cmd --list-all # To check existing added ports sudo firewall-cmd --zone=public --permanent --add-port 7860/tcp sudo firewall-cmd --reload sudo firewall-cmd --list-all # Confirm that port has been added.
Tâche 3 : exécutez AUTOMATIC1111.
-
Avec l'installation réussie de Python 3.10.6, le logiciel AUTOMATIC1111 et les modèles de diffusion stables essentiels téléchargés, nous sommes prêts à aller de l'avant avec l'exécution de AUTOMATIC1111. Cependant, avant de continuer, affinons notre configuration pour optimiser la vitesse et la qualité globale de la génération d'images Stable Diffusion.
-
Modifiez le fichier
webui-user.sh
et effectuez les ajustements suivants. Ce fichier se trouve dans le répertoirestable-diffusion-webui
. Ce script est responsable de la configuration des arguments pour AUTOMATIC1111 et est essentiel pour comprendre et mettre à jour les paramètres disponibles.-
Modifiez le paramètre comme suit : ajoutez
listen
pour l'exécuter en tant que serveur sur le port 7860, activez l'accès par extension pour installer les extensions Stable Diffusion préférées et définissez la précision sur Full.# Commandline arguments for webui.py, for example: export COMMANDLINE_ARGS="--medvram --opt-split-attention" export COMMANDLINE_ARGS="--listen --enable-insecure-extension-access --precision full --no-half-vae --no-half --theme light"
-
Le paramètre ci-dessous pour vous assurer que Python3.10 est utilisé.
# python3 executable python_cmd="python3.10"
-
Le paramètre ci-dessous installe la dernière version de PyTorch2 au lieu de la version par défaut PyTorch. Cela s'est avéré être meilleur en inférence et en itération d'image.
# install command for torch export TORCH_COMMAND="pip install clean-fid numba numpy torch==2.0.1+cu118 torchvision --force-reinstall --extra-index-url https://download.pytorch.org/whl/cu118"
-
-
Après vous être assuré qu'il n'y a pas d'erreurs de syntaxe, exécutons le script webui.sh (à ne pas confondre avec webui-user.sh, le fichier précédemment modifié).
bash webui.sh
Le résultat de ce processus doit inclure l'installation de tous les packages requis pour AUTOMATIC1111, y compris la dernière version de PyTorch2. Il chargera également les modèles essentiels et lancera le serveur d'inférence sur le port 7860. Si nécessaire, vous pouvez personnaliser le port en modifiant le fichier webui-user.sh.
-
Après avoir confirmé la réussite du déploiement avec le serveur exécuté sur le port 7860 comme illustré ci-dessus, allons accéder à l'application Stable Diffusion. Ouvrez votre navigateur Web et entrez l'adresse suivante :
http://<PublicIP>:7860
, en remplaçant"<PublicIP>"
par l'adresse IP publique de l'instance.
Une fois cette opération effectuée, l'application doit se charger et s'afficher comme illustré ci-dessous. Vous trouverez les modèles souhaités idéalement situés dans le coin supérieur droit, comme mis en évidence.
Tâche 4 : déployer AUTOMATIC1111 via le gestionnaire de services systemctl
-
Créez un fichier
stable-diffusion.service
dans le chemin/etc/systemd/system
Et entrez ci-dessous dans le fichierstable-diffusion.service
.[Unit] Description=systemd service start stable-diffusion [Service] WorkingDirectory=/home/opc/stable-diffusion-webui ExecStart=bash webui.sh User=opc [Install] WantedBy=multi-user.target
-
Assurez-vous de remplacer votre répertoire de travail par le répertoire nécessaire.
-
Exécutez les commandes ci-dessous pour recharger et activer/démarrer le service.
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
Exécutez la commande ci-dessous pour vérifier le statut du service.
sudo systemctl start stable-diffusion.service
Choses à savoir et améliorations
- Les modèles de diffusion stable sont disponibles dans une gamme de tailles et de versions, y compris v1.1, v1.2, v1.3, v1.4, v1.5, v2.0, v2.1 et vSDXL. Ces versions sont répertoriées par ordre croissant de leurs capacités et de ce qu'elles peuvent accomplir. Par exemple, tous les modèles v1 sont capables de générer des images 512x512 natives. v2 peut générer des images 768x768 de façon native sans nécessiter une précision totale. Les tailles de fichier des modèles v1 sont généralement comprises entre 6 et 8 Go par modèle de point de reprise, tandis que les modèles v2 ont tendance à avoir des tailles de fichier d'environ 5.5GB par modèle de point de reprise.
Chargement du modèle
-
Le modèle à plusieurs gigaoctets est chargé sur votre GPU VRAM au début de l'exécution, tandis que les nombreux coeurs CUDA le traitent méticuleusement des centaines de fois par seconde. Les taux de transfert de données en jeu fonctionnent aux limites absolues définies par les lois de la physique. Au sein de la carte graphique, des facteurs tels que le temps nécessaire à un signal électrique pour traverser la puce à la vitesse de la lumière ne sont pas à sous-estimer.
-
Le GPU traite un ensemble de calculs, puis signale au CPU de fournir plus de données pour le traitement. Par la suite, il attend que le CPU accède à la mémoire du système pour récupérer un autre lot de données et l'envoie au GPU via PCI-E. Une fois que le GPU a les données, il les traite, puis signale à nouveau le CPU, entrant dans une autre phase d'attente.
-
C'est pourquoi la VRAM joue un rôle central dans les tâches d'IA. Si vous pouvez précharger toutes les données et instructions nécessaires sur la carte graphique au début de l'opération, en lui permettant de les traiter à ses vitesses internes flamboyantes et de simplement collecter les résultats à la fin, vous pouvez réduire considérablement les temps d'attente et minimiser les ressources gaspillées.
-
Dans notre cas d'utilisation, nous utilisons VM.GPU.A10.1, qui dispose d'un GPU NVIDIA A10 avec 24 Go de RAM. Un seul GPU NVIDIA A10 est plus que suffisant pour le bon fonctionnement de v1.5. Cependant, à mesure que la complexité de l'invite augmente, le temps de génération s'allonge et la vitesse d'itération diminue. Il existe des versions élaguées des modèles v2 Stable Diffusion qui peuvent exécuter les opérations plus rapidement et en douceur que leurs homologues v2 de taille originale, principalement en raison de leurs exigences d'espace réduites. Bien que toutes les versions des modèles de diffusion stable puissent être prises en charge au sein d'un seul GPU NVIDIA A10 24 Go, le rythme d'itération et le temps de génération d'image dépendent de divers facteurs, notamment le modèle spécifique, sa taille, la complexité de l'invite, les étapes d'échantillonnage, les dimensions de l'image, les ajustements à haute résolution, la taille du lot, etc.
-
Dans le prochain tutoriel, nous explorerons comment partitionner le modèle, le distribuer sur plusieurs GPU et exécuter la diffusion stable à l'aide de plusieurs GPU au sein d'une seule machine. Nous explorerons également le réglage fin d'un modèle de base de diffusion stable existant.
Liens connexes
Accusés de réception
Auteur - Abhiram Ampabathina (architecte cloud senior)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.