Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Stable Diffusion Automatic1111 auf Oracle Cloud Infrastructure-GPUs bereitstellen
In der sich ständig weiterentwickelnden Landschaft von künstlicher Intelligenz (KI) und maschinellem Lernen (ML) verschieben Forscher und Ingenieure ständig die Grenzen dessen, was möglich ist. Eine bemerkenswerte Entwicklung, die in den letzten Jahren an Dynamik gewonnen hat, ist das Modell der stabilen Diffusion. Diese hochmoderne Technologie bietet erhebliche Vorteile, verspricht eine Vielzahl von Anwendungsfällen und sieht weiterhin spannende Entwicklungen. In diesem Tutorial werden wir in die Welt der Stable Diffusion AI/ML-Modelle eintauchen, ihre Vorteile untersuchen, ihre Anwendungsfälle untersuchen und die neuesten Entwicklungen in diesem faszinierenden Bereich diskutieren.
Einführung
Stable Diffusion: Stable Diffusion ist ein relativ neuer und innovativer Ansatz in der Welt von KI und ML. Es ist ein probabilistisches generatives Modell, das aufgrund seiner Fähigkeit, hochwertige Datenproben zu generieren, und seiner Robustheit gegenüber verschiedenen Trainingsbedingungen an Bedeutung gewonnen hat. Das stabile Diffusionsmodell, das oft auf dem Diffusionsprozess basiert, ermöglicht eine kontrollierte Datengenerierung und -manipulation. Hier ein kurzer Überblick über die wichtigsten Komponenten:
Diffusionsprozess: Die Kernidee des stabilen Diffusionsmodells ist der Diffusionsprozess, der die Entwicklung einer Datenverteilung im Zeitverlauf modelliert. Dabei wird iterativ ein Rauschprozess auf die Daten angewendet, bis er zur gewünschten Verteilung konvergiert.
Denoising Autoencoder: Innerhalb des Diffusionsprozesses wird ein denoisierender Autoencoder verwendet, um die ursprünglichen Daten aus den lauten Samples wiederherzustellen. Dieser Prozess hilft dem Modell, sinnvolle Features der Daten zu lernen und zu erfassen.
Zielsetzung
Automatic1111 Stable Diffusion ist ein bahnbrechendes Tool im Bereich KI-generierter Bilder. Diese innovative WebUI bietet eine benutzerfreundliche Plattform, mit der die Landschaft der Erstellung von KI-generierten Bildern neu gestaltet wird. Damit können Benutzer ihre KI-Modelle für die Bildgenerierung nahtlos bedienen und überwachen. Wir stellen Automatic1111 und die zugehörigen Voraussetzungen bereit, um Ihr bevorzugtes stabiles Diffusionsmodell in Oracle Linux 8 abzuleiten.
Voraussetzungen
-
Oracle Cloud Infrastructure-(OCI-)Mandant mit GPU-Limits von A10. Mindestens 1 A10 ist erforderlich.
-
Ein vorhandenes virtuelles OCI-Cloud-Netzwerk (VCN) mit mindestens einem öffentlichen Subnetz und Limits für öffentliche IP.
-
Ein stabiler Diffusionsmodell-Checkpoint von Ihrem bevorzugten Huggingface-Ersteller. Beschränken Sie das Modell auf v1-5 und v2-1. Stable Diffusion XL ist schwer auf einer einzelnen A10-GPU zu laden. Informationen hierzu finden Sie unter Stable Diffusion Model - Hugging Face.
Aufgabe 1: GPU-Compute-Instanz auf OCI bereitstellen
-
Starten Sie eine Compute-Instanz auf OCI mit einem vorhandenen VCN mit öffentlichem Subnetz. Weitere Informationen finden Sie unter Compute-Instanz starten.
-
Wählen Sie eine einzelne A10-GPU-Instanz aus verfügbaren GPU.A10-Ausprägungen aus.
VM.GPU.A10.1
-
Ändern Sie beim Starten einer Compute-Instanz die Ausprägung in eine der oben genannten Ausprägungen. Um die VM GPU.A10 zu starten, klicken Sie auf Spezialität und vorherige Generation, und wählen Sie die Ausprägungen VM.GPU.A10.1 aus.
-
Wenn für Ihren Mandanten kein Servicelimit für GPU.A10 festgelegt ist, befinden sich diese Ausprägungen nicht in der Ausprägungsliste.
-
Um Ihre Mandantenlimits in der OCI-Konsole zu prüfen, legen Sie die Region fest, in der Sie eine GPU.A10-Compute-Instanz bereitstellen möchten, öffnen Sie das Navigationsmenü, und klicken Sie auf Governance und Administration.
-
Wählen Sie unter Mandantenverwaltung die Option Limiten, Quota und Nutzung aus.
-
Setzen Sie den Service auf "Compute", wählen Sie eine der Availability-Domains im Feld "Geltungsbereich" aus, und geben Sie GPU.A10 in das Ressourcenfeld ein.
-
Wählen Sie GPUs für A10-basierte VMs und BM-Instanzen aus.
-
-
Die Compute-Limits gelten pro Availability-Domain. Prüfen Sie, ob das Limit in einer der Availability-Domains der Region festgelegt ist. Wenn das Servicelimit für alle Availability-Domains auf 0 gesetzt ist, können Sie auf den Link "Erhöhung eines Servicelimits anfordern" klicken und eine Anforderung zur Erhöhung des Limits für diese Ressource weiterleiten.
Hinweis: Um auf Limits, Quota und Nutzung zugreifen zu können, müssen Sie Mitglied der Mandantenadministratorengruppe sein, oder Ihrer Gruppe muss eine Policy zum Lesen von LimitsAndUsageViewers zugewiesen sein.
- Weitere Informationen finden Sie unter Servicelimits.
-
Derzeit unterstützen OCI GPU.A10-Compute-Ausprägungen Oracle Linux, Ubuntu und Rocky Linux. Windows wird nur von VM-Ausprägungen unterstützt.
Hinweis: Rocky Linux wird von NVIDIA nicht offiziell unterstützt.
-
Verwenden Sie beim Provisioning einer Compute-Instanz auf OCI ein Oracle Linux 8-Standard-BS-Image oder ein Oracle Linux 8-GPU-fähiges Image. Wenn Sie das Standard-BS-Image für Oracle Linux verwenden, muss der NVIDIA vGPU-Treiber installiert sein. Für unser Tutorial verwenden wir das Oracle Linux 8-GPU-Image.
-
Blenden Sie den Abschnitt "Boot-Volume" ein, um das Boot-Volume auf mindestens 250 GB zu erhöhen und die VPU auf eine höhere Performance zu erhöhen, um einen anständigen Lese-/Schreibzugriff für eine bessere Inferenzierung zu erhalten.
-
Starten Sie die Instanz mit den oben genannten Parametern.
Aufgabe 2: Voraussetzungen für Automatic1111 installieren
-
Da NVIDIA-Treiber im Oracle Linux-GPU-Build-Image enthalten sind, können wir einfach ihre Präsenz und Funktionalität prüfen, indem wir den Befehl NVIDIA-smi ausführen. Dadurch wird sichergestellt, dass alles ordnungsgemäß eingerichtet ist und die GPU-Treiber wie erwartet funktionieren.
-
Erzeugen Sie FileSystem OCI-Instanzen mit dem Systemspeicher 46.6GB. Da wir unser Boot-Volume auf 300 GB erhöht haben, können wir unser Dateisystem mit dem integrierten OCI-Befehl von OCI Util erweitern.
Um das Dateisystem auf Ihrer OCI-Instanz zu erweitern, nachdem Sie das Boot-Volume auf 300 GB erhöht haben, können Sie den integrierten OCI-(Oracle Cloud Infrastructure-)Befehl verwenden. So können Sie es tun:
-
Aktuelle Datenträgerauslastung prüfen: Bevor Sie die Größe des Dateisystems ändern, sollten Sie die aktuelle Datenträgerauslastung prüfen, um sicherzustellen, dass sie der erhöhten Boot-Volume-Größe entspricht. Sie können den Befehl
df
zu diesem Zweck verwenden:df -h
Stellen Sie sicher, dass der verfügbare Speicherplatz mit der neuen Boot-Volume-Größe (300 GB) übereinstimmt.
-
Größe des Dateisystems ändern: Mit dem OCI-Utilitybefehl können Sie die Größe des Dateisystems ändern, um den erhöhten Speicher zu nutzen. Der genaue Befehl kann je nach verwendetem Betriebssystem und Dateisystem variieren. Folgendes wird für Oracle Linux 8 verwendet.
sudo /usr/libexec/oci-growfs
Geben Sie 'j' ein, wenn Sie aufgefordert werden, zu bestätigen, dass Sie die Partition erweitern.
-
Dateisystemerweiterung prüfen: Nachdem Sie den Befehl "Größe ändern" ausgeführt haben, prüfen Sie die Datenträgernutzung erneut, um zu bestätigen, dass das Dateisystem erfolgreich erweitert wurde:
df -h
Es sollte nun die erhöhte Dateisystemgröße wiedergeben.
Wenn Sie diese Schritte ausführen, sollten Sie Ihr Dateisystem auf Ihrer OCI-Instanz erweitern können, um den zusätzlichen Speicherplatz zu nutzen, der durch das erhöhte Boot-Volume bereitgestellt wird.
-
-
Installieren Sie Python 3.10.6 in 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
-
Jetzt, da wir Python3.10.6 installiert haben, lassen Sie uns Git installieren, um Git-Repositorys zu klonen.
sudo dnf install git
-
Klonen Sie Automatic1111.
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
Sie sollten das Repo stabil-diffusion-webui in Ihrem geklonten Verzeichnis haben.
-
Laden Sie Ihr bevorzugtes stabiles Diffusionsmodell in das Verzeichnis
stable-diffusion-webui/models/Stable-Diffusion
herunter.- Für unseren Anwendungsfall habe ich hier v1-5-pruned.ckpt von stable-diffusion-v1-5 heruntergeladen.
-
Aktualisieren Sie Firewallregeln, um Port 7860-Traffic zuzulassen.
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.
Aufgabe 3: AUTOMATIC1111 ausführen
-
Mit der erfolgreichen Installation von Python 3.10.6, der Software AUTOMATIC1111 und den grundlegenden heruntergeladenen stabilen Diffusionsmodellen können wir mit der Ausführung von AUTOMATIC1111 fortfahren. Bevor wir jedoch fortfahren, sollten wir unsere Konfiguration optimieren, um die Geschwindigkeit und Gesamtqualität der Stable Diffusion-Bildgenerierung zu optimieren.
-
Bearbeiten Sie die Datei
webui-user.sh
, und nehmen Sie die folgenden Anpassungen vor. Sie finden diese Datei im Verzeichnisstable-diffusion-webui
. Dieses Skript ist für die Konfiguration der Argumente für AUTOMATIC1111 verantwortlich und ist entscheidend für das Verständnis und die Aktualisierung der verfügbaren Parameter.-
Ändern Sie den Parameter wie folgt: Fügen Sie
listen
hinzu, um ihn als Server auf Port 7860 auszuführen, aktivieren Sie den Erweiterungszugriff für die Installation bevorzugter Stable Diffusion-Erweiterungen, und stellen Sie die Genauigkeit auf "Vollständig" ein.# 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"
-
Der folgende Parameter stellt sicher, dass Python3.10 verwendet wird.
# python3 executable python_cmd="python3.10"
-
Der folgende Parameter installiert die neueste PyTorch2 anstelle der Standard-PyTorch. Dies hat sich bei Inferenzierung und Bilditeration als besser erwiesen.
# 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"
-
-
Nachdem Sie sichergestellt haben, dass keine Syntaxfehler vorliegen, führen Sie das Skript webui.sh aus (nicht zu verwechseln mit webui-user.sh, der zuvor bearbeiteten Datei).
bash webui.sh
Das Ergebnis dieses Prozesses sollte die Installation aller erforderlichen Packages für AUTOMATIC1111 umfassen, einschließlich der neuesten PyTorch2. Außerdem werden die wesentlichen Modelle geladen und der Inferenzserver auf Port 7860 gestartet. Bei Bedarf können Sie den Port anpassen, indem Sie die Datei webui-user.sh ändern.
-
Nachdem Sie ein erfolgreiches Deployment mit dem Server bestätigt haben, der auf Port 7860 ausgeführt wird, wie oben gezeigt, greifen wir auf die Stable Diffusion-Anwendung zu. Öffnen Sie Ihren Webbrowser, und geben Sie die folgende Adresse ein:
http://<PublicIP>:7860
. Ersetzen Sie"<PublicIP>"
durch die öffentliche IP-Adresse der Instanz.
Danach sollte die Anwendung geladen und wie unten dargestellt angezeigt werden. Sie finden die gewünschten Modelle bequem in der oberen rechten Ecke, wie hervorgehoben.
Aufgabe 4: AUTOMATIC1111 über service manager systemctl bereitstellen
-
Erstellen Sie eine Datei
stable-diffusion.service
im Pfad/etc/systemd/system
, und geben Sie Folgendes in die Dateistable-diffusion.service
ein.[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
-
Ändern Sie das Arbeitsverzeichnis in das erforderliche Verzeichnis.
-
Führen Sie die folgenden Befehle aus, um den Service neu zu laden und zu aktivieren/starten.
sudo systemctl daemon-reload sudo systemctl enable stable-diffusion.service sudo systemctl start stable-diffusion.service
-
Führen Sie den folgenden Befehl aus, um den Status des Service zu prüfen.
sudo systemctl start stable-diffusion.service
Wichtige Informationen und Verbesserungen
- Stabile Diffusionsmodelle gibt es in einer Reihe von Größen und Versionen, darunter v1.1, v1.2, v1.3, v1.4, v1.5, v2.0, v2.1 und vSDXL. Diese Versionen werden in aufsteigender Reihenfolge ihrer Fähigkeiten und ihrer Möglichkeiten aufgelistet. Beispiel: Alle v1-Modelle können native 512x512-Images generieren. v2 kann 768x768-Images nativ generieren, ohne dass eine vollständige Genauigkeit erforderlich ist. Die Dateigrößen für v1-Modelle liegen in der Regel innerhalb des Bereichs von 6-8 GB pro Checkpoint-Modell, während v2-Modelle in der Regel Dateigrößen um 5.5GB pro Checkpoint-Modell aufweisen.
Modell wird geladen
-
Das Multi-Gigabyte-Modell wird zu Beginn der Ausführung auf Ihr GPU-VRAM geladen, während die zahlreichen CUDA-Kerne es Hunderte Mal pro Sekunde sorgfältig verarbeiten. Die beteiligten Datenübertragungsraten arbeiten an den absoluten Grenzen, die durch die Gesetze der Physik definiert sind. Innerhalb der Grafikkarte sind Faktoren wie die Zeit, die ein elektrisches Signal benötigt, um den Chip mit der Lichtgeschwindigkeit zu durchqueren, nicht zu unterschätzen.
-
Die GPU verarbeitet eine Gruppe von Berechnungen und signalisiert dann der CPU, mehr Daten für die Verarbeitung bereitzustellen. Anschließend wartet er, während die CPU auf den Systemspeicher zugreift, um einen weiteren Datenstapel abzurufen, und sendet ihn über PCI-E an die GPU. Sobald die GPU die Daten hat, verarbeitet sie diese und signalisiert die CPU erneut und tritt in eine andere Wartephase ein.
-
Aus diesem Grund spielt VRAM eine zentrale Rolle bei KI-Aufgaben. Wenn Sie zu Beginn des Betriebs alle notwendigen Daten und Anweisungen auf die Grafikkarte vorladen können, sie mit ihren glühenden internen Geschwindigkeiten verarbeiten und die Ergebnisse einfach am Ende sammeln können, können Sie Wartezeiten erheblich reduzieren und verschwendete Ressourcen minimieren.
-
In unserem Anwendungsfall verwenden wir VM.GPU.A10.1, das über eine NVIDIA A10-GPU mit 24 GB RAM verfügt. Eine einzelne NVIDIA A10-GPU ist für einen reibungslosen Betrieb von v1.5 mehr als ausreichend. Mit zunehmender Komplexität der Eingabeaufforderung verlängert sich die Erzeugungszeit, und die Iterationsgeschwindigkeit nimmt ab. Es gibt beschnittene Versionen von v2 Stable Diffusion-Modellen, die Vorgänge schneller und reibungsloser ausführen können als ihre ursprünglichen v2-Pendants, hauptsächlich aufgrund ihres geringeren Speicherplatzbedarfs. Obwohl alle Versionen von Stable Diffusion-Modellen in einer einzigen NVIDIA A10 24 GB GPU untergebracht werden können, hängt das Tempo der Iteration und Bildgenerierungszeit von verschiedenen Faktoren ab, darunter das spezifische Modell, seine Größe, Prompt-Komplexität, Samplingschritte, Bilddimensionen, hochauflösende Anpassungen, Batchgröße und mehr.
-
Im folgenden Tutorial wird erläutert, wie Sie das Modell partitionieren, auf mehrere GPUs verteilen und Stable Diffusion mit mehreren GPUs innerhalb eines Rechners ausführen. Wir werden auch die Feinabstimmung eines bestehenden Stable Diffusion Basismodells untersuchen.
Verwandte Links
Danksagungen
Autor - Abhiram Ampabathina (Senior Cloud Architect)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Deploy Stable Diffusion Automatic1111 on Oracle Cloud Infrastructure GPUs
F87725-01
October 2023
Copyright © 2023, Oracle and/or its affiliates.