Stable Diffusion XL unter Windows lokal installieren

  • Seit ein paar Tagen gibt es das neue Bilder AI Stable Diffusion XL (SDXL) Version 1.0. Den Bildgenerator als Version 0.9 gibt es schon etwas länger, konnte aber nicht lokal genutzt werden, die neue 1.0 nun schon. Unterschied zur bisherigen Version Stable Diffusion 1.5 ist, dass das neue AI-Bildgenerator Stable Diffusion XL eine verbesserte Wiedergabe von Farben hat, mehr auf feine Details achtet und Bilder im Format 1024x1024 Pixel erstellen kann und nicht nur 512x512 wie bisher. Dabei kann das Format auch geändert werden und muss nicht 1zu1 sein. Es funktionieren also auch 4:3 oder 16:9, solange das finale Bild dann in Summe nicht mehr als 1.048.576 Pixel hat.

    Prinzipiell ist Stable Diffusion XL auf eine Grafikkarte (GPU) von Nvidia ausgelegt, kann aber auch per AMD oder eben per CPU laufen. Per CPU ist aber wirklich fürchterlich langsam. Bei den AMD GPUs muss man etwas testen und ausprobieren. Angeblich geht es mit dedizierten als auch internen GPUs, ab 2 GB VRAM. Es scheint aber wohl deutliche Unterschiede von System zu System zu geben, auch wenn die gleiche AMD-GPU eingebaut ist. Bei mir scheint das Netzteil die Schwachstelle zu sein und ich muss meine RX580 drosseln, sonst schaltet das einfach ab, wenn die zu lange auf Volllast ist.

    Zur lokalen Installation von Stable Diffusion XL braucht man allerdings einige Softwarepakete.

    Anleitung

    1. Python installieren

    Offiziell benötigt wird die Python-Version 3.10.6, die es hier zum Download gibt:

    https://www.python.org/downloads/release/python-3106/

    Dort nach unten scrollen und den Windows-Installer entsprechend 32- oder 64-Bit auswählen. Die reine Nvidia-Version von Stable Diffusion XL startete hier zumindest auch mit der 3.11.x, wobei die nicht empfohlen wird. Der Installer für die AMD-Version scheitert an der neuen Python Version und bricht den Startvorgang mit einem Fehler ab - der will zwingend die 3.10.6 haben.

    Bei der Installation darauf achten, dass der Punkt "Python zu PATH hinzufügen" ausgewählt wird. Ist er per Default nicht. Ohne den kann Python aber von der Kommandozeile nicht starten, da Windows dann den Programmaufruf "python" nicht kennt. Hat man es vergessen, so wie ich am Anfang auch, dann den Installer noch mal starten und "ändern" wählen. Nur den Haken setzen und abschließen.

    2. Git installieren

    Um final die Stable Diffusion XL Pakete zu laden, verwendet man am einfachsten Git.

    Git für Windows gibt es das hier:

    https://git-scm.com/download/win

    3. Web-UI von Stable Diffusion XL

    Damit man nicht alles auf der Console machen muss, sondern einen schöne Weboberfläche hat, braucht es die Web-UI. Hier unterscheidet es sich auch, ob man eine GPU von Nvidia oder eine von AMD hat.

    Für Nvidia ist die Quelle:

    https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

    Für AMD ist es:

    https://github.com/lshqqytiger/st…ui-directml.git

    Clonen kann man es dann wie folgt.

    1. Zuerst die Kommandozeile von Git öffnen. Zu finden unter "Start" bei den Programmen als "Git CMD". Schaut aus wie das Windows-CMD.

    2. Ins Benutzerverzeichnis wechseln mit "cd C:\Users\X", wobei das X der eigene Benutzername ist.

    3. Nun den Clone abrufen per:

    Nvidia:

    git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

    AMD:

    git clone https://github.com/lshqqytiger/st…ui-directml.git

    Je nachdem, welche Version man hat, erstellt der dann im Benutzerverzeichnis einen neuen Ordner "stable-diffusion-webui" oder "stable-diffusion-webui-directml"

    4. AI-Models laden

    Hier gibt es zwei und beide sollten geladen werden.

    Die "stable-diffusion-xl-base-1.0" unter:

    https://huggingface.co/stabilityai/st…1.0.safetensors

    und die "stable-diffusion-xl-refiner-1.0" unter:

    https://huggingface.co/stabilityai/st…1.0.safetensors

    Das kann dauern, sind über 10 GB. Wenn sie geladen sind, dann in den entsprechenden "stable-diffusion-webui"-Ordner im Benutzerverzeichnis schieben.

    Model verschieben:

    Im zuvor angelegten "stable-diffusion-webui" gibt es den Ordner "models". Darin befindet sich ein weiterer Ordner mit dem Namen "stable-diffusion". Dieser enthält eine Textdatei als Anleitung. Hier hin müssen die beiden heruntergeladenen Modelle kopiert / verschoben werden.

    5. Web-UI Setup

    Im Hauptverzeichnis der "stable-diffusion-webui" befindet sich die Datei "webui-user.bat".

    Von dieser Datei am besten eine Kopie erstellen als "webui-eigene-settings.bat". Die Kopie ist nicht nötig, aber sinnvoll, denn die offizielle "webui-user.bat" wird bei einem automatischen Update der Web-UI durch Git überschrieben und die eigene Konfiguration wäre verloren.

    Die Datei nun zum Bearbeiten öffnen per Rechtsklick -> Bearbeiten. Es sollte sich der Windows Editor öffnen.

    Darin gibt es bereits eine Zeile mit "set COMMANDLINE_ARGS=". Für AMD diese ändern in:

    set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --precision full --no-half --opt-split-attention --opt-sub-quad-attention --sub-quad-q-chunk-size 512 --sub-quad-kv-chunk-size 512 --sub-quad-chunk-threshold 80 --disable-nan-check --use-cpu interrogate gfpgan codeformer --upcast-sampling --api --listen --autolaunch

    Das "--autolaunch" am Ende des Command sorgt dafür, dass die Weboberfläche selbst startet. Kann man auch weglassen, dann muss man die Oberfläche per https://127.0.0.1:7860 allerdings manuell aufrufen.

    Hier ist auch der Punkt, an dem man etwas spielen muss. Gerade der erste "--lowvram" ist da wichtig. Gibt auch noch "--medvram". Eigentlich ist das "low" für System mit weniger als 6 GB VRAM gedacht. Ich hier habe 8 GB, aber mit "med" stürzt mein System teilweise willkürlich ab. Bedeutet, das Bild wird einfach dunkel oder der Rechner geht komplett aus. Also testen, was geht oder bei Google mal nach "stable diffusion seine GPU" suchen. Gibt da eigentlich fast alles.

    Die "webui-eigene-settings.bat" speichern.

    6. Stable Diffusion starten

    Dazu einfach die "webui-eigene-settings.bat" nun doppelt anklicken. Das dauert eine Weile, es werden etliche Daten nachgeladen. Wenn er fertig ist, öffnet sich durch den zuvor hinterlegten "--autolaunch" ein Browserfenster.

    Kann sein, dass da ein paar Fehlermeldungen kommen, wie bei mir im Bild. Wenn da aber ein "Running on localhost" kommt, scheint es zu gehen. Es müsste sich dann auch der Tab im Browser öffnen.

    Oben bei "Stable Diffusion Checkpoint" nun das Model auswählen. Ich habe den Refiner, ist der bessere von beiden.

    Und nun kann gespielt werden :)

    Die Ergebnisse sind eigentlich ganz gut, so wie das hier:

    Das war allerdings auch mit 512x512 Pixel. Bei Versuchen mit größeren Bildern stürze mein System leider auch ab. Ok, ich spiele damit nun auch erst einen Tag :)

    Im Consolenfenster wird auch der Fortschritt und die Geschwindigkeit der Generierung angezeigt. In diesem Fall fürchterlich langsam, ist aber beim ersten Bild nach dem Start immer so hier. Da rödelt der wie bekloppt auf der Festplatte rum. Erst später geht der dann von der HDD auf die GPU über, keine Ahnung warum.


    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Habe es auch mal zum laufen gebracht. Mit hängen und würgen mein erstes Bild:

    Ich musste das Starterscript etwas anpassen:

    Code
    set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --precision full --no-half --opt-split-attention --opt-sub-quad-attention --sub-quad-q-chunk-size 512 --sub-quad-kv-chunk-size 512 --sub-quad-chunk-threshold 80 --disable-nan-check --use-cpu interrogate gfpgan codeformer --upcast-sampling --api --listen --autolaunch --xformers --opt-sdp-no-mem-attention --enable-insecure-extension-access

    xformers, damit er die nvidia Graphikarte benutzt.

    Irgendwie scheint aber noch der Wurm drin zu sein. Er braucht jede Menge RAM!!!

    Ich habe 24GB RAM und er lagert trotzdem noch aus. VRAM meine ich habe ich 6GB.

    Auch scheint es sehr lange zu dauern und ich kann den refiner nicht nutzen.

    Aber geil. Das erste Bild was funktioniert hat.

    Danke Syno

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Ok. Mit dem Firefox klappt es. Er ist da nicht so Speicherhungrig. Der Refiner läuft nun auch.

    Er braucht etwa 4 Sekunden pro Iteration. Ich habe nun etwas zum spielen.

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • ok. guckt mal unten links. da scheint ne Signatur drin zu sein..

    Das kann passieren :)
    Der sucht sich ja erstmal ganz, ganz viele zu Deinem Prompt passende Bilder raus und morpht die dann gerne zusammen.
    Und wenn da eines dabei war, das ne passende linke untere Ecke hatte... und da zufällig eine Signatur drin war. Tja.

    Es ist mir auch schon öfter passiert, das ich zwar gute Bilder rausbekam, die dann aber ein krakeliges Stockphoto-Wasserzeichen drin hatten.

    Wer zuerst "Datenschutz" sagt, hat verloren.

  • Ähm ja Alex, ich fragte Dich, welche Grafikkarte Du hast. Als Antwort kam nur VRAM mit "ich glaube", anstelle im Taskmanager einfach reinzusehen und VRAM und Graka-Typ einfach zu nennen. Das wären dann Daten, mit denen man vielleicht auch was anfangen kann.

    Diese ARGs da oben sind primär für AMD. xformers ist aber NVIDIA, das passt also nicht unbedingt zusammen bzw. wird da was limitiert, das eventuell nicht sein müsste. Im Zweifel ganz klein anfangen mit der NVIDIA-Web-UI, --lowvram und --xformers.

    Wobei der Zusammenhang da anders ist. Er nutzt die offizielle Graka. Wenn also zwei da sind, dann die, die Win auch nutzt. Das hat mit --xformers nichts zu tun. Das ist nur ein weiteres Modul, das es aber nur gibt, wenn man NVIDIA nutzt. Kannste auch bei AMD machen, dann kommt aber die Fehlermeldung, dass CUDA nicht vorhanden ist, denn genau das wird bei NVIDIA benutzt.

    Bei VRAM von 6-8 GB kann man auch --medvram antesten. Das sollte eigentlich genau für den Bereich sein. Bei mehr als 8 GB ohne VRAM-Beschränkung.

    Bei mir geht es aber nun komischerweise nicht mehr, keine Ahnung warum. Bei mir geht der Rechner nun immer aus, wenn er bei 100% und eigentlich fertig ist. Dabei ist hier weder RAM noch VRAM komplett benutzt. AMD Grafik ist auch komplett gedrosselt, also kann es das Netzteil eigentlich auch nicht mehr wirklich sein. Anfangs war es das, das weiß ich. 300 Watt waren einfach zu wenig, wenn das Grundsystem schon 160 W braucht und die Grafik unter Volllast auch noch 200 W möchte. Aktuell gedrosselt geht die aber maximal hoch auf 85 Watt....

    Hm, hab das nun noch weiter gedrosselt und es ging wieder, aber noch langsamer. 15 Sek pro Iteration, war schon mal bei 8, andere mit der gleiche RX580 kommen auf 1,1.

    Der nutzt bei mir mit dem "refiner" ca. 7,4 GB VRAM von den vorhandenen 8 GB. CPU anfangs ca. 30% über 1-2 Minuten. RAM waren 12 GB frei, von denen nutzte er 10 GB. Wobei von den 7.4 GB ja schon alleine beim Start dann 6,3 GB belegt sind, also ohne Generierung. Das ist quasi das Modell selbst, das da eingelesen wird. Wenn ich dem sage, der soll das Modell auf der Platte lassen, dann braucht er während der Generierung an die 2,5 GB VRAM.

    Bei NVIDIA ist aber wohl die VRAM-Effizienz besser. Dieses CUDA und xformers nutzen da wohl eine Pipe, bei der der effektiver genutzt wird. Bei mir ist es eher so, dass da 60% frei sind oder eben fast nichts. Wirklich was dazwischen kennt er nicht.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Das kann passieren :)
    Der sucht sich ja erstmal ganz, ganz viele zu Deinem Prompt passende Bilder raus und morpht die dann gerne zusammen.
    Und wenn da eines dabei war, das ne passende linke untere Ecke hatte... und da zufällig eine Signatur drin war. Tja.

    Es ist mir auch schon öfter passiert, das ich zwar gute Bilder rausbekam, die dann aber ein krakeliges Stockphoto-Wasserzeichen drin hatten.

    Und auch verhindern, zumindest ansatzweise per negativem Prompt. Denn damit kann man ja sagen, was man nicht haben möchte. Da gibt es z.B. die Schlagwarte "signatur" und "watermark", allerdings hier und da anders verwendet. Die Frage also eher, wie genau Stable Diffusion das haben möchte, in welchem Format, einfach so als Komma-getrennte Liste, in () oder in {}. Manche schreiben es auch in <> und bei wieder anderen selbiges in einfacher und doppelter Ausführung, so nach der Art, mehr Klammern machen es wichtiger.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Ahh Ok. Stimmt, du kannst Signaturen und anderes ausschliessen. Eventuell war das im Promt auch so, das etwas dazu beigetragen hat, das er eine fiktive Signatur eingefügt hatte.

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • Willst Du nicht endlich mal sagen, was Du für eine Grafikkarte hast? Oder wenigstens, dass das ein Geheimnis ist? Das Nachfragen ständig nervt und Bilder zu Posten ohne Prompt sind nutzlos, noch mehr aber Commands ohne Hardware dazu. Der Sinn ist ja, das zum Laufen zu bekommen und eben auch, wie man was machen kann. Dazu braucht es aber Daten und nicht einfach hier: Ein Bild. Denn dann ist das wie alle anderen Galerien auch, dass man zwar das Ergebnis sieht, aber nicht den Weg dahin.

    Achso, in den Optionen gibt es den Seed. Für Tests sollte der am besten auf einem bestimmten Wert stehen, egal welchen. Wenn der aber bei gleichem Prompt immer gleich ist, dann kommt das gleiche Ergebnis (sollte). Dann kann man also testen, was eine Veränderung an Einstellungen bringt oder eben marginale Prompt-Änderungen. Dieser Default-Seed von -1 heiß so nichts anderes, als "mache jedes mal willkürlich was".

    Hatte z.B. den Prompt mit dem Ponyhof versucht, Seed war -1. Da kam bei identischem Prompt einmal ein Pferd mit Hund, Frau daneben. Dann waren es zwei Pferde, aber keine Frau. Beim dritten mal war da ein Pferd, ein Hund am Boden liegend und die Frau saß auf dem Pferd.

    Und der CFG-Scale: Das ist die Vorgabe, wie weit die AI vom Prompt nach eigenem Ermessen abweichen darf. Default ist ja 7. Wenn man da den Wert ändert, wäre das auch sinnvoll zu wissen, denn ohne das kommt man nie auf das gleiche oder annähernd gleiche (Abhängig vom Seed) Ergebnis.

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • ok. Syno hat mal wie immer Recht. Iteration ist nun in unter 2 Sekunden durch. Damit das nicht nur bei Whatsapp steht, das ist das neue Starterscript:

    Code
    @echo off
    
    set PYTHON=
    set GIT=
    set VENV_DIR=
    set COMMANDLINE_ARGS=--lowvram --autolaunch --xformers
    
    call webui.bat

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!

  • das ist er mal als native.

    Aktuell teste ich das ein wenig, da noch so einiges optimiert. Es kommen mehr Fragen auf... und erstmal bin ich raus für heute. Das sind soviele Kleinigkeiten, aber ich raffs leider noch nicht.

    Übrigens klappt bei mir auch über 1024*1024. Auch das Upscaling funktioniert und da gibt es auch noch soviel zu lernen, denn das kann durch mehrere Filter durch.

    Je mehr ich damit Experimentiere, desto mehr Fragen kommen auf. Ich frage mal Syno nach einem Transcript ( gekürzt ).

    wenn etwas möglich erscheint mach ich das, wenn das nicht klappt gehts ans unmögliche und ansonsten das undenkbare.

    - nun stolz rauchfrei - Ich denke also Bing ich!

    Support 24h Bereitschaft 0173 6107465 - NUR Für Kunden von SEO NW!