Sie fragen - wir antworten!

Apps & Leitfäden

Stable Diffusion WebUI

Generative neuronale Netze scheinen magisch zu sein. Sie beantworten Fragen, erstellen Bilder und schreiben sogar Code in verschiedenen Programmiersprachen. Der Erfolg dieser Netze beruht auf zwei Komponenten: vortrainierte Modelle und Hardwarebeschleuniger. Sicherlich ist es möglich, CPU-Kerne für dieses Arbeitspensum zu verwenden, aber das wäre wie ein Schneckenrennen. Die Erstellung eines kleinen Bildes kann sehr viel Zeit in Anspruch nehmen - mehrere Dutzend Minuten. Die Generierung desselben Bildes auf einem Grafikprozessor würde Hunderte Male weniger Zeit in Anspruch nehmen.

Das erste Geheimnis liegt in der Anzahl der Kerne. CPU-Kerne sind universell einsetzbar und können komplexe Befehle verarbeiten. Herkömmliche Serverprozessoren haben jedoch höchstens 64 Kerne. Selbst in Multiprozessorsystemen übersteigt die Anzahl der Kerne selten 256. GPU-Kerne sind einfacher, aber dafür passen viel mehr davon auf den Chip. Eine NVIDIA® RTX™ 4090 hat zum Beispiel 16.384 Kerne.

Das zweite Geheimnis ist, dass die Arbeitslast in viele einfache Aufgaben aufgeteilt werden kann, die in parallelen Threads auf dedizierten GPU-Kernen ausgeführt werden können. Dieser Trick beschleunigt die Datenverarbeitung erheblich. Heute werden wir sehen, wie es funktioniert und ein generatives neuronales Netzwerk Stable Diffusion Web UI auf der LeaderGPU-Infrastruktur einsetzen. Nehmen wir zum Beispiel einen Server mit einer NVIDIA® RTX™ 4090, die 16.384 GPU-Kerne hat. Als Betriebssystem haben wir das aktuelle LTS-Release Ubuntu 22.04 ausgewählt und die Option "Nvidia-Treiber und CUDA® 11.8 installieren" gewählt.

System vorbereiten

Stable Diffusion WebUI system prepare

Bevor wir beginnen, sollten wir den Speicher berücksichtigen. Stable Diffusion ist ein großes System, das bis zu 13G auf Ihrer Festplatte belegen kann. Die virtuelle Standardfestplatte in einer LeaderGPU-Installation ist 100 GB groß. Das Betriebssystem beansprucht 25 GB. Wenn wir Stable Diffusion einsetzen, ohne die Home-Partition zu erweitern, wird der gesamte freie Speicher aufgebraucht sein und die Fehlermeldung "No space left on device" erscheinen. Es ist eine gute Idee, unser Home-Verzeichnis zu erweitern.

Erweitern des Home-Verzeichnisses

Zunächst müssen wir alle verfügbaren Festplatten überprüfen.

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

Dann müssen wir eine neue Linux-Partition auf unserem physischen SSD-Laufwerk, /dev/sda, erstellen:

sudo fdisk /dev/sda

Drücken Sie die folgenden Tasten, eine nach der anderen: g → n → Enter → Enter → Enter → w. Das Ergebnis ist eine neue Partition /dev/sda1 ohne Dateisystem. Erstellen Sie nun ein ext4-Dateisystem auf dieser Partition:

sudo mkfs.ext4 /dev/sda1

Wenn der Vorgang abgeschlossen ist, gehen wir zum nächsten Schritt über.

Achtung! Bitte führen Sie den folgenden Vorgang mit großer Vorsicht durch. Jeder Fehler, der beim Ändern der fstab-Datei gemacht wird, kann dazu führen, dass Ihr Server nicht mehr normal booten kann und ein komplettes Zurücksetzen des Betriebssystems erforderlich sein kann.

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"

Kopieren Sie UUID (im Beispiel fb2ba455-2b8d-4da0-8719-ce327d0026bc) der Partition /dev/sda1. Als Nächstes werden wir das System anweisen, dieses Laufwerk beim Booten automatisch über seine UUID einzubinden:

sudo nano /etc/fstab

Geben Sie diese Zeile vor /swap.img... string ein:

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

Beispiel:

# /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

Beenden Sie das Programm mit dem Tastaturkürzel Ctrl + X und bestätigen Sie das Speichern der Datei mit Enter. Die neuen Einstellungen werden beim nächsten Systemstart übernommen. Lassen Sie uns den Server neu starten:

sudo shutdown -r now

Nach dem Neustart können wir alle eingehängten Verzeichnisse mit dem folgenden Befehl überprüfen:

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

Superb! Aber jetzt haben wir keinen Zugriff mehr auf unser Home-Verzeichnis, weil es durch die Konfigurationsdatei fstab geändert wurde. Es ist an der Zeit, den Besitz des Verzeichnisses zurückzugewinnen:

sudo chown -R usergpu /home/usergpu

Gut gemacht! Gehen wir zum nächsten Schritt über.

Grundlegende Pakete installieren

Aktualisieren Sie den Software-Cache aus den offiziellen Ubuntu-Repositories und aktualisieren Sie einige Pakete:

sudo apt update && sudo apt -y upgrade

Das System hat mitgeteilt, dass ein neuer Kernel installiert wurde und nach dem Neustart des Systems betriebsbereit sein wird. Wählen Sie zweimal OK.

Als Nächstes müssen wir die Abhängigkeiten auflösen, für die Stable Diffusion erforderlich ist. Das erste Paket fügt die Funktionalität der virtuellen Python-Umgebung hinzu:

sudo apt install python3-venv

Das zweite Paket fügt eine Implementierung der Funktion malloc() der Programmiersprache C hinzu, die von Google angepasst wurde. Sie verhindert “Cannot locate TCMalloc” Fehler und verbessert die CPU-Speicherauslastung.

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

Starten Sie schließlich den Server neu:

sudo shutdown -r now

Stabile Diffusion automatisch 1111: Skript installieren

Stable Diffusion WebUI install script

Der einfachste Weg, Stable Diffusion mit WebUI zu installieren, ist die Verwendung des vorgefertigten Skripts, das vom GitHub-Benutzer AUTOMATIC1111 geschrieben wurde. Dieses Skript lädt diese beiden Teile herunter und richtet sie ein, während es alle notwendigen Abhängigkeiten auflöst.

Lassen Sie uns das Skript herunterladen:

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

Geben Sie ihm dann Zugriff auf die Änderungsdaten und führen Sie es als Programm aus:

chmod a+x webui.sh

Führen Sie das heruntergeladene Skript aus:

./webui.sh 

Dieser Vorgang kann ein paar Minuten dauern. Alles ist bereit, um perfekte Bilder mit Stable Diffusion zu erstellen.

Fehlersuche

Wenn Sie die Fehlermeldung "Torch is not able to use GPU" erhalten, können Sie das Problem durch eine Neuinstallation via apt beheben:

sudo apt -y install nvidia-driver-535

Sie müssen das Betriebssystem neu starten, um den Treiber zu aktivieren:

sudo shutdown -r now

Erzeugen Sie

Stable Diffusion WebUI run script

Das Installationsskript ./webui.sh hat eine weitere Funktion. Es bedient gleichzeitig den Serverteil von Stable Diffusion und WebUI. Wenn Sie es jedoch ohne Argumente verwenden, ist der Server als lokaler Daemon unter http://127.0.0.1:7860 verfügbar. Dies kann auf zwei Arten gelöst werden: Portweiterleitung durch einen SSH-Tunnel oder Zulassen von Verbindungen von externen IPs.

Der zweite Weg ist einfacher: Fügen Sie einfach die Option --listen hinzu, und Sie können sich mit der Weboberfläche unter http://[YOUR_LEADERGPU_SERVER_IP_ADDRESS]:7860 verbinden. Dies ist jedoch völlig unsicher, da jeder Internetnutzer Zugang hat. Um eine unbefugte Nutzung zu verhindern, fügen Sie die Option --gradio-auth zusammen mit dem Benutzernamen und dem Passwort ein, getrennt durch einen Doppelpunkt:

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

Dies fügt Ihrer WebUI-Instanz eine Anmeldeseite hinzu, und das Skript lädt zum ersten Mal die Grundmodelle und die erforderlichen Abhängigkeiten herunter:

Stable Diffusion WebUI Gradio

Sie können das Ergebnis genießen. Geben Sie einfach einige Eingabeaufforderungen ein, trennen Sie sie durch Kommata und klicken Sie auf die Schaltfläche Generieren. Nach ein paar Sekunden wird ein vom neuronalen Netz generiertes Bild angezeigt.

Fazit

Wir haben den ganzen Weg von einem leeren LeaderGPU-Server mit einem vorinstallierten Betriebssystem bis zu einer fertigen Instanz mit Stable Diffusion und einer WebUI-Schnittstelle zurückgelegt. Nächstes Mal werden wir mehr über Software-Performance-Tuning erfahren und wie Sie Ihre Stable Diffusion-Instanz mit neuen Versionen von Treibern und Paketen erweitern können.

Siehe auch:



Aktualisiert: 28.03.2025

Veröffentlicht: 25.11.2024