6 Möglichkeiten, CUDA-Speichermangel in Stable Diffusion zu beheben

author - Markus Wagner
Markus Wagner  Aktualisiert am

Der CUDA-Speicherfehler "Nicht genügend Speicher" in Stable Diffusion tritt auf, wenn Sie versuchen, ein KI-Bild mit höherer Auflösung auf einer Grafikkarte mit geringem VRAM zu erzeugen. Um das Problem zu vermeiden, haben wir sechs praktikable Lösungen für verschiedene Szenarien getestet und gefunden.

Die effizienteste und einfachste Methode ist: Methode 1 – dabei werden KI-Bilder mit einer niedrigeren Auflösung generiert und später in einem speziellen KI-Bild-Upscaler hochskaliert.

Dies kann bei stabiler Diffusion in verschiedenen Szenarien passieren:

  • Verwenden von txt2img mit einer Auflösung von 768/1024 oder höher
  • Aktivieren von highres.fix mit 2X oder höher
  • Verwenden von Img2img mit einer Auflösung von 768/1024 oder höher
  • Trainieren von Checkpoint-Modellen

Was ist CUDA?

CUDA®, kurz für Compute Unified Device Architecture, ist ein von NVIDIA entwickeltes Framework und Programmiermodell für paralleles Rechnen. Kurz gesagt: Es nutzt die Fähigkeiten von GPUs, um Probleme durch die Beschleunigung großer Berechnungen blitzschnell zu lösen.

Ein Speicherfehler tritt auf, wenn das Projekt zu komplex für den GPU-Speicher ist. Die Generierung von Bildern mit höherer Auflösung in Stable Diffusion ist rechenintensiv und kann auf Computern mit geringem VRAM zu CUDA-Speicherfehlern führen. Um den Fehler zu umgehen, befolgen Sie die folgenden Methoden.

1. Stellen Sie eine niedrigere Auflösung ein und skalieren Sie später hoch

Highres.fix lässt sich nicht einmal für X2 verwenden? Img2img schlägt über 768 x 512 fehl? Keine Sorge, der schnellste Weg, das CUDA-Speicherproblem zu beheben, besteht darin, die Auflösung (Breite und Höhe) in Stable Diffusion zu verringern und einen dedizierten AI Image Upscaler zu verwenden, um die Auflösung nach der Generierung um das Zwei-, Vier-, Acht- und noch mehrfache zu erhöhen.

Viele Leute bezweifeln vielleicht, dass, wenn sie Stable Diffusion verwenden, um Bilder nur mit niedriger Auflösung wie 512 x 512 oder 768 x 768 zu erzeugen, genügend Pixel für einen eigenständigen AI Image Upscaler vorhanden sind, um das Bild auf 4K/8K zu verbessern und dabei die Details zu erhalten.

Die Antwort lautet "Ja" mit Aiarty Image Enhancer, wie in den Screenshots unten gezeigt.

Aiarty Image Enhancer Hochskalierung Stabile Diffusion AI Art

Das KI-generierte Mädchen links hat eine stabile Diffusionsausgabe von 768 x 512 Pixeln, und rechts ist das KI-Bild zu sehen, das durch Aiarty Image Enhancer viermal (3072 x 2048) hochskaliert wurde. Der Unterschied ist verblüffend, wenn wir einen bestimmten Teil zur genaueren Betrachtung heranzoomen. Sehen Sie sich unten die Details der Wimpern und Augenbrauen an.

Aiarty Image Enhancer Hochwertige stabile Diffusionsaugen Vergleichen

Aiarty Image Enhancer ist ein eigenständiges Tool zur Bildverbesserung und -aufwertung, das auf drei KI-Modellen basiert. Die Modelle haben aus 6,78 Millionen trainierten Bildern gelernt und sind für KI-Kunst, Fotos und Webbilder optimiert.

Das Beste daran ist, dass Aiarty Image Enhancer beim Hochskalieren realistische und natürliche neue Details erzeugen kann.

Es ist für Nvidia/AMD/Intel/CPU optimiert und läuft mit wenig VRAM. Selbst mit nur 4 GB VRAM können Sie Bilder mit Aiarty Image Enhancer hochskalieren, ohne dass CUDA-Speicherfehler auftreten. Aiarty Image Enhancer ist die optimale Ergänzung für Stable Diffusion und ermöglicht das Hochskalieren auf hohe Auflösungen im Batch-Betrieb mit höherer Geschwindigkeit und besserer Qualität.

Hochwertige KI-Kunst mit Detailzoom
Hochwertige KI-Kunst mit Detail-Zoom-Vergleich

Laden Sie Aiarty Image Enhancer als besten Upscaler für stabile Diffusion bei geringem VRAM herunter.

2. Stellen Sie die maximale Split-Größe auf einen kleineren Wert ein

Diese Methode funktioniert in Situationen, in denen die Fragmentierung des VRAM zu einem CUDA-Speicherfehler führt. Wir können die max_split_size_mb von PYTORCH_CUDA_ALLOC_CONF auf einen kleineren Wert setzen.

Schritt 1. Gehen Sie zum Ordner "Stable Diffusion WebUI".

Schritt 2. Bearbeiten Sie webui-user.bat in einem beliebigen Texteditor.

Stable Diffusion WebUI User Bat Edit

Sie können beispielsweise mit der rechten Maustaste darauf klicken und es im Editor oder einem anderen Texteditor bearbeiten.

Wenn die Erweiterung .bat nicht angezeigt wird, haben Sie Ihr System wahrscheinlich so eingestellt, dass die Dateierweiterung ausgeblendet wird. Suchen Sie einfach nach einer WebUI-Benutzerdatei, die eine Windows-Batchdatei ist.

Sie können den Datei-Explorer so einstellen, dass die Dateierweiterung auf der Registerkarte "Ansicht" angezeigt wird.

Schritt 3. Stellen Sie die maximale Split-Größe entsprechend Ihrer Situation ein.

Stabile Diffusion WebUI Benutzer Bat Max Split Größe

Kopieren Sie den folgenden Inhalt und fügen Sie ihn unter @echo off ein, wie im Screenshot gezeigt.

setze PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:32

Hinweis: Lesen Sie die Fehlermeldung und ändern Sie 32 in einen Wert, der für Ihre Hardware geeignet ist.

CUDA Out of Memory

Beachten Sie beispielsweise bei der oben angezeigten Fehlermeldung: Reserviert - Zugewiesen = 17,62 GiB - 11,39 GiB = 6,23 GiB > 6,18 GiB, während Frei = 3,43 GiB, was der Meldung "Reservierter Speicher ist >> Zugewiesener Speicher" entspricht. Es ist ausreichend Speicher verfügbar, aber aufgrund der Fragmentierung kann dieser nicht zugewiesen werden.

Laut der Pytorch-Dokumentation zur Speicherverwaltung: "max_split_size_mb verhindert, dass der native Allocator Blöcke aufteilt, die größer als diese Größe (in MB) sind. Dies kann die Fragmentierung verringern und möglicherweise dazu führen, dass einige grenzwertige Arbeitslasten abgeschlossen werden können, ohne dass der Speicher ausgeht."

Daher können wir einen niedrigeren Wert als 6,18 GiB (in MB) festlegen. 6*1024=6114.

setze PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:6114

Sie können auch einen Schwellenwert für die Speicherbereinigung hinzufügen, wie unten gezeigt:

PYTORCH_CUDA_ALLOC_CONF=Garbage_Collection_Schwellenwert:0.9,max_split_size_mb:512

Hinweis: Setzen Sie 512 auf einen Wert, der für Ihre spezifische Hardware funktioniert.

Wenn Ihre Stable Diffusion-WebUI abstürzt, können Sie versuchen, den Parameter garbage_collection_threshold zu reduzieren. Es wird jedoch empfohlen, ihn nicht niedriger als 0,6 einzustellen.

3. Stellen Sie die Verwendung eines niedrigeren VRAM ein

Sie können die Datei webui-user.bat öffnen und den Parameter --medvram oder --lowvram nach COMMANDLINE_ARGS hinzufügen, um die VRAM-Nutzung zu reduzieren.

Dadurch kann die Stable Diffusion WebUI weniger VRAM verwenden und verringert somit die Wahrscheinlichkeit von CUDA-Speicherfehlern.

Hinweis: Unter Linux fügen Sie es der Datei webui-user.sh hinzu.

Stable Diffusion Troubleshoot Low VRAM Video Cards

Ausführliche Informationen finden Sie im Wiki zur Fehlerbehebung bei Grafikkarten mit geringem VRAM, das vom Autor von Stable Diffusion Automatic1111 WebUI verfasst wurde.

4. Verwenden Sie die VRAM Estimator-Erweiterung

Alternativ können Sie die Erweiterung VRAM-ESTIMATOR verwenden. Sie können sie direkt über das Erweiterungsfenster in der WebUI installieren.

SD WebUI VRAM Estimator Benchmark

Schritt 1. Installieren Sie die VRAM Estimator-Erweiterung.

https://github.com/space-nuko/a1111-stable-diffusion-webui-vram-estimator

Schritt 2. Führen Sie den Benchmark aus.

Nach der Installation wird in Ihrer SD-WebUI ein VRAM Estimator-Panel (VRAM Estimation) angezeigt. Sie müssen zuerst den Benchmark ausführen.

Abhängig von der Größe Ihres VRAM kann dieser Vorgang einige Minuten bis mehrere Stunden dauern.

Wenn Ihr VRAM größer als 16 GB ist, wird empfohlen, die maximale Bildgröße auf 2048 zu erhöhen und auch die maximale Stapelanzahl auf 16 zu erhöhen. Dies hilft dabei, die tatsächlichen Leistungsgrenzen Ihrer GPU zu bestimmen.

Hinweise:

Sie müssen dies nur einmal tun, aber wenn Sie Ihre GPU ändern, PyTorch aktualisieren oder es ein größeres Update für WebUI gibt, z. B. einen neuen Beschleuniger, führen Sie es am besten erneut aus.

Nachdem der Benchmark abgeschlossen ist, schätzt dieses Plug-In bei jeder Parameteränderung die VRAM-Nutzung für jede Aufgabe und markiert sie praktischerweise mit unterschiedlichen Farben. So können Sie in 99 % der Fälle einen VRAM-Überlauf vermeiden.

SD WebUI VRAM Estimator

Das Plug-In funktioniert mit allen Hardwarekonfigurationen und Sie können es sogar auf einem Mac verwenden.

5. SD-WebUI-Speicherfreigabe

Manchmal stellen wir möglicherweise immer noch fest, dass der VRAM kontinuierlich belegt ist. Dies liegt hauptsächlich am Garbage Collection-Mechanismus von Python, der einen inhärenten Fehler darstellt.

SB Unload Checkpoint to Free VRAM

Bisher bestand die einzige Lösung darin, die SD-WebUI oder sogar das System neu zu starten. Jetzt können Sie VRAM manuell freigeben, indem Sie in den Einstellungen die Option "SD-Checkpoint entladen, um VRAM freizugeben" verwenden.

Wenn Sie den Parameter in den vorherigen Methoden konfiguriert haben, müssen Sie VRAM wahrscheinlich nicht manuell freigeben.

Tipps:

Alternativ können Sie auch das SD WebUI-Speicherfreigabetool verwenden.

https://github.com/Haoming02/sd-webui-memory-release

Diese Erweiterung für Automatic1111 Webui kann den Speicher für jede Generation freigeben.

6. Verwenden Sie Google Colab für die Bereitstellung

Wenn Sie den CUDA-Speicherfehler "Nicht genügend Speicher" immer noch nicht beheben können, können Sie alternativ die Verwendung von Google Colab in Betracht ziehen.

Google Colab ist eine cloudbasierte Notebook-Umgebung, die Nutzern GPU-Ressourcen bietet. Sie können Stable Diffusion auf Google Colab ausführen, um Probleme mit niedrigem VRAM zu vermeiden.

Einpacken

Von den sechs Methoden ist Methode 1 die einfachste. Sie erfordert keine besonderen Kenntnisse und kann Ihnen dank klarer KI-Bilder stundenlange Arbeit ersparen.

Bei Methode 4 und 5 müssen Sie in Stable Diffusion keine Systemdateien ändern. Methode 2 und 3 funktionieren, wenn Sie experimentieren und den passenden Wert für Ihren Computer finden.

Methode 6 ist eine alternative Möglichkeit, Stable Diffusion online statt lokal zu verwenden und so die Vorteile des Cloud Computing von Google zu nutzen.

Das könnte Ihnen auch gefallen

Markus Wagner ist ein erfahrener Content Creator mit über zehn Jahren in der Multimedia-Branche. Er spezialisiert sich auf fundierte Produktbewertungen und praxisnahe Anleitungen, insbesondere im Bereich KI-gestützter Bildbearbeitung. Dank seines tiefen Verständnisses für Technologietrends und soziale Plattformen erstellt er zielgerichtete, ansprechende Inhalte. Sein Stil ist präzise und zugleich lebendig, was ihm eine breite Leserschaft eingebracht hat.

Home > Der Blog > 6 Möglichkeiten, CUDA-Speichermangel in Stable Diffusion zu beheben