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

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

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

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:

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