Interrogez-nous, nous vous répondrons !

Applications et Guides

Stable Diffusion WebUI

Les réseaux neuronaux génératifs semblent magiques. Ils répondent à des questions, créent des images et écrivent même du code dans différents langages de programmation. Le succès de ces réseaux repose sur deux éléments : des modèles pré-entraînés et des accélérateurs matériels. Il est certes possible d'utiliser les cœurs de l'unité centrale pour cette charge de travail, mais ce serait comme une course d'escargots. La génération d'une petite image peut prendre beaucoup de temps - des dizaines de minutes. Générer la même image sur un GPU prendrait des centaines de fois moins de temps.

Le premier secret réside dans le nombre de cœurs. Les cœurs de l'unité centrale sont universels et peuvent traiter des instructions complexes. Cependant, les processeurs de serveurs conventionnels ont un maximum de 64 cœurs. Même dans les systèmes multiprocesseurs, le nombre de cœurs dépasse rarement 256. Les cœurs des GPU sont plus simples, ce qui permet d'en placer beaucoup plus sur la puce. Par exemple, une NVIDIA® RTX™ 4090 possède 16 384 cœurs.

Le deuxième secret réside dans le fait que la charge de travail peut être divisée en plusieurs tâches simples, qui peuvent être exécutées en parallèle sur des cœurs GPU dédiés. Cette astuce permet d'accélérer considérablement le traitement des données. Aujourd'hui, nous allons voir comment cela fonctionne et déployer un réseau neuronal génératif Stable Diffusion Web UI sur l'infrastructure LeaderGPU. Prenons l"exemple d'un serveur équipé d'une NVIDIA® RTX™ 4090 qui possède 16 384 cœurs de GPU. Comme système d'exploitation, nous avons sélectionné la version LTS actuelle Ubuntu 22.04 et choisi l'option "Installer les pilotes NVIDIA® et CUDA® 11.8".

Préparation du système

Stable Diffusion WebUI system prepare

Avant de commencer, prenons en compte la mémoire. Stable Diffusion est un gros système qui peut occuper jusqu'à 13G sur votre disque dur. Le disque virtuel standard dans une installation LeaderGPU est de 100G. Le système d'exploitation occupe 25G. Si nous déployons Stable Diffusion sans étendre la partition home, nous allons épuiser toute la mémoire libre et rencontrer une erreur "No space left on device". C'est une bonne idée d'étendre notre répertoire personnel.

Étendre le répertoire personnel

Tout d'abord, nous devons vérifier tous les disques disponibles.

sudo fdisk -l
Disk /dev/sda: 447.13 GiB, 480103981056 bytes, 937703088 sectors
Disk model: INTEL SSDSC2KB48
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Disk /dev/sdb: 50 GiB, 53687091200 bytes, 104857600 sectors
Disk model: VIRTUAL-DISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 9D4C1F0C-D4A7-406E-AECB-BF57E4726437

Ensuite, nous devons créer une nouvelle partition Linux sur notre disque SSD physique, /dev/sda :

sudo fdisk /dev/sda

Appuyez sur les touches suivantes, une par une : g → n → Enter → Enter → Enter → w. Il en résultera une nouvelle partition /dev/sda1 sans système de fichiers. Maintenant, créez un système de fichiers ext4 sur cette partition :

sudo mkfs.ext4 /dev/sda1

Lorsque le processus est terminé, nous passons à l'étape suivante.

Attention ! Veuillez procéder à l'opération suivante avec le plus grand soin. Toute erreur commise lors de la modification du fichier fstab peut empêcher votre serveur de démarrer normalement et peut nécessiter une réinitialisation complète du système d'exploitation.

sudo blkid
/dev/sdb2: UUID="6b17e542-0934-4dba-99ca-a00bd260c247" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="70030755-75d8-4339-a4e0-26a97f1d1c5d"
/dev/loop1: TYPE="squashfs"
/dev/sdb1: PARTUUID="63ff1714-bd29-4062-be04-21af32423c0a"
/dev/loop4: TYPE="squashfs"
/dev/loop0: TYPE="squashfs"
/dev/sda1: UUID="fb2ba455-2b8d-4da0-8719-ce327d0026bc" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="6e0108df-b000-5848-8328-b187daf37a4f"
/dev/loop5: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"

Copiez UUID (fb2ba455-2b8d-4da0-8719-ce327d0026bc dans l'exemple) de la partition /dev/sda1. Ensuite, nous allons demander au système de monter automatiquement ce lecteur par son UUID au moment du démarrage :

sudo nano /etc/fstab

Saisissez cette ligne avant /swap.img... string :

/dev/disk/by-uuid/ /home/usergpu ext4 defaults defaults

Exemple :

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
# / was on /dev/sdb2 during curtin installation
/dev/disk/by-uuid/6b17e542-0934-4dba-99ca-a00bd260c247 / ext4 defaults,_netdev 0 1
/dev/disk/by-uuid/fb2ba455-2b8d-4da0-8719-ce327d0026bc /home/usergpu ext4 defaults defaults
/swap.img       none    swap    sw      0       0

Quittez avec le raccourci clavier Ctrl + X et confirmez l'enregistrement du fichier en appuyant sur Enter. Les nouveaux paramètres seront appliqués au prochain démarrage du système. Redémarrons le serveur :

sudo shutdown -r now

Après le redémarrage, nous pouvons vérifier tous les répertoires montés à l'aide de la commande suivante :

df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           6.3G  1.7M  6.3G   1% /run
/dev/sdb2        49G   23G   24G  50% /
tmpfs            32G     0   32G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sda1       440G   28K  417G   1% /home/usergpu
tmpfs           6.3G  4.0K  6.3G   1% /run/user/1000

Superbe ! Mais maintenant, nous n'avons plus le droit d'écrire quelque chose dans notre répertoire personnel parce qu'il a été modifié par le fichier de configuration fstab. Il est temps de récupérer la propriété du répertoire :

sudo chown -R usergpu /home/usergpu

Bon travail ! Passons à l'étape suivante.

Installer les paquets de base

Mettez à jour le cache logiciel à partir des dépôts officiels d'Ubuntu et mettez à niveau certains paquets :

sudo apt update && sudo apt -y upgrade

Le système a informé qu'un nouveau noyau a été installé et qu'il sera opérationnel après le redémarrage du système. Sélectionnez deux fois OK.

Ensuite, nous devons résoudre les dépendances, qui nécessitent Stable Diffusion. Le premier paquet ajoute la fonctionnalité d'environnement virtuel Python :

sudo apt install python3-venv

Le deuxième paquet ajoute une implémentation de la fonction malloc() du langage de programmation C, personnalisée par Google. Elle évite l'erreur “Cannot locate TCMalloc” et améliore l'utilisation de la mémoire du processeur.

sudo apt install -y --no-install-recommends google-perftools

Enfin, redémarrez le serveur :

sudo shutdown -r now

Diffusion stable automatique 1111 : script d'installation

Stable Diffusion WebUI install script

La façon la plus simple d'installer Stable Diffusion avec WebUI est d'utiliser le script écrit par l'utilisateur GitHub AUTOMATIC1111. Ce script télécharge et installe ces deux parties tout en résolvant toutes les dépendances nécessaires.

Téléchargeons le script :

wget https://raw.githubusercontent.com/AUTOMATIC1111/stable-diffusion-webui/master/webui.sh

Ensuite, donnons-lui l'accès aux données de modification et exécutons-le comme un programme :

chmod a+x webui.sh

Exécuter le script téléchargé :

./webui.sh 

Ce processus peut prendre quelques minutes. Tout est prêt pour créer des images parfaites avec Stable Diffusion.

Résolution des problèmes

Si vous rencontrez l'erreur "Torch is not able to use GPU", vous pouvez la corriger en réinstallant via apt :

sudo apt -y install nvidia-driver-535

Vous devez redémarrer le système d'exploitation pour activer le pilote :

sudo shutdown -r now

Générer

Stable Diffusion WebUI run script

Le script d'installation ./webui.sh a une autre fonction. Il sert simultanément la partie serveur de Stable Diffusion et WebUI. Cependant, si vous l'utilisez sans arguments, le serveur sera disponible en tant que démon local à l'adresse http://127.0.0.1:7860. Ce problème peut être résolu de deux manières : la redirection de port à travers un tunnel SSH ou l'autorisation de connexions à partir d'IP externes.

La seconde méthode est plus simple : il suffit d'ajouter l'option --listen pour se connecter à l'interface web à l'adresse http://[YOUR_LEADERGPU_SERVER_IP_ADDRESS]:7860. Cependant, cette méthode n'est pas du tout sûre, car tous les utilisateurs d'Internet y auront accès. Pour éviter toute utilisation non autorisée, ajoutez l'option --gradio-auth à côté du nom d'utilisateur et du mot de passe, séparés par deux points :

./webui.sh --listen --gradio-auth user:password

Le script télécharge les modèles de base et les dépendances nécessaires pour la première fois :

Stable Diffusion WebUI Gradio

Vous pouvez apprécier le résultat. Il vous suffit de saisir quelques invites, de les séparer par des virgules et de cliquer sur le bouton Générer. Après quelques secondes, une image générée par le réseau neuronal s'affiche.

Conclusion

Nous sommes passés d'un serveur LeaderGPU vide avec seulement un système d'exploitation préinstallé à une instance prête à l'emploi avec Stable Diffusion et une interface WebUI. La prochaine fois, nous en apprendrons plus sur l'optimisation des performances logicielles et sur la manière d'améliorer correctement votre instance Stable Diffusion avec de nouvelles versions de pilotes et de paquets.

Voir aussi :



Mis à jour: 28.03.2025

Publié: 25.11.2024