Generowanie Obrazów AI z Stable Diffusion na Dockerze: Praktyczny Przewodnik

  • Adrian Kowalski
  • 2024-12-28
  • 0

Postanowiłem podzielić się swoim doświadczeniem z instalacją Stable Diffusion na Dockerze. Poniżej znajdziesz szczegółowy opis krok po kroku, jak to zrobiłem, jakie są wymagania sprzętowe oraz jak korzystać z tego narzędzia. Uwzględniłem również informacje o LoRA, przykłady modeli dostępnych na Hugging Face oraz różnice w pracy na CPU i GPU.

Wymagania sprzętowe

Aby uruchomić Stable Diffusion, upewniłem się, że mój komputer spełnia następujące wymagania:

  • CPU: Nowoczesny procesor wielordzeniowy (np. Intel Core i5/AMD Ryzen 5 lub lepszy).
  • GPU: Karta graficzna wspierająca CUDA. Minimalne wymagania:
    • Model GPU: NVIDIA GTX 1660, RTX 2060 lub lepsza.
    • VRAM: Minimum 6 GB (8 GB lub więcej dla bardziej wymagających modeli).
    • CUDA Toolkit: Wersja 11.3 lub nowsza.
  • RAM: Co najmniej 16 GB RAM.
  • Dysk: 20 GB wolnego miejsca na dane i modele AI.
  • System operacyjny: Windows 10/11, macOS lub Linux z obsługą Dockera.

Moje testy wydajnościowe

  1. Laptop 1: Intel Core i7 8. generacji, 20 GB RAM, NVIDIA MX250 2 GB VRAM.
    • GPU: Generowanie obrazów trwało bardzo długo, a rozsądne wyniki osiągałem tylko dla rozdzielczości 512×512 px przy zastosowaniu opcji --lowvram.
    • CPU: Generowanie obrazów w rozdzielczości 512×512 px trwało około 2-3 minut.
  2. Laptop 2: Intel Core i5 11. generacji, 16 GB RAM, NVIDIA RTX 3050 4 GB VRAM.
    • GPU: Generowanie obrazów w rozdzielczości 1024×1024 px zajmowało tylko 10-15 sekund.

Instalacja CUDA Toolkit

Instalacja tego pakietu, była wymagana w przypadku mojej pierwszej konfiguracji z MX250. Dla drugiej z RTX 3050 wystarczyły zwykłe sterowniki karty grafiznej.

  1. Pobranie CUDA Toolkit:
  2. Instalacja sterowników NVIDIA:
    • Upewnij się, że zainstalowane sterowniki wspierają CUDA (w wersji zgodnej z twoją kartą graficzną).
  3. Weryfikacja instalacji:
    • W terminalu sprawdziłem wersję CUDA: nvcc --version

Różnice w pracy na CPU i GPU

  • GPU: Przyspiesza generowanie obrazów dzięki równoległemu przetwarzaniu danych. Stabilność i szybkość zależą od ilości VRAM i mocy karty.
  • CPU: Można używać na komputerach bez GPU lub ze słabymi kartami. Wymaga jednak więcej czasu na przetwarzanie.
  • Profile uruchamiania:
    • auto-cpu: Wymusza użycie procesora.
    • auto: Domyślnie używa GPU, jeśli jest dostępny.

Przetestowałem oba tryby. GPU (RTX 3050) generowało obrazy w około 10-15 sekund dla rozdzielczości obrazu 1024×1024 px, podczas gdy CPU zajmowało nawet 2-3 minut na jeden obraz dla rozdzielczości 512×512 px (w przypadku MX250).

Krok 1: Instalacja Docker Desktop

  1. Pobranie Dockera: Zaczynamy od strony Docker Desktop. Pobieramy wersję dla swojego systemu operacyjnego.
  2. Instalacja:
    • Uruchomiłem instalator i postępowałem zgodnie z instrukcjami.
  3. Uruchomienie Dockera: Po instalacji sprawdziłem, czy Docker działa, wpisując w terminalu: docker --version

Krok 2: Klonowanie repozytorium Stable Diffusion WebUI Docker

  1. Instalacja Git: Najpierw zainstalowałem Git, pobierając go z git-scm.com.
  2. Klonowanie repozytorium: W terminalu wpisałem: git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git

Krok 3: Uruchomienie Dockera

  1. Uruchomiłem kontenery: W terminalu wpisałem: docker compose --profile auto-cpu up -d To polecenie uruchomiło Stable Diffusion w tle.
    • Można uruchamiać projekt dla różnych profili. Są one widoczne w pliku compose i wpływają na to, który komponent – cpu lub gpu – będzie odpowiedzialny za generowanie obrazów.
  2. Sprawdziłem status: Użyłem: docker ps Upewniłem się, że kontenery działają.
  3. Dostęp do WebUI: Otworzyłem przeglądarkę i przeszedłem pod adres http://localhost:7860.

Krok 4: Konfiguracja Stable Diffusion

  1. Pobranie modeli: Stable Diffusion wymaga modeli, które pobrałem z Hugging Face, np.:
  2. Modele umieściłem w folderze models/Stable-diffusion.

Wydaje mi się, że przedstawiana tu wersja wspiera tylko modele do wersji 2. Wynika to z opisu projektu na GitHubie oraz moich testów. Nie udało mi się uruchomić modeli w wersji 3.

Ze względu na moje konfiguracje testowe korzystałem z modeli o mniejszych rozmiarach – około 5 GB. Nie testowałem Stable Diffusion na większych modelach.

Rozwiązywanie problemu z typing-extensions

Jeśli przy uruchamianiu pojawia się błąd z typing-extensions https://github.com/AbdBarho/stable-diffusion-webui-docker/issues/742:

ImportError: cannot import name 'TypeIs' from 'typing_extensions' (/opt/conda/lib/python3.10/site-packages/typing_extensions.py)

Należy edytować plik services/AUTOMATIC1111/Dockerfile i dodać poniższą linię na końcu sekcji WORKDIR /:

WORKDIR /
RUN --mount=type=cache,target=/root/.cache/pip \
  git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git && \
  cd stable-diffusion-webui && \
  git reset --hard v1.9.4 && \
  pip install -r requirements_versions.txt && \
  pip install --upgrade typing-extensions

Po zapisaniu zmian należy ponownie zbudować kontenery:

docker compose --profile auto-cpu build --no-cache

Korzystanie z WebUI

Interfejs WebUI okazał się prosty i intuicyjny. O to kilka informacji o nim:

  1. Wprowadzanie promptów: W polu tekstowym wpisuję opis obrazu, np.: A futuristic cityscape at night, neon lights, cyberpunk style.
    • Ważne jest także wprowadzanie negatywnych promptów (negative prompts), oprócz tych opisujących obraz. Negatywne prompty pozwalają wykluczyć z generowanego obrazu elementy, które są niepożądane. Na przykład, jeśli chcesz uniknąć rozmytych detali, możesz wpisać w negatywnych promptach „blurred, low resolution”. Dzięki temu modele AI mogą lepiej skoncentrować się na dokładniejszym odwzorowaniu tego, co chcesz zobaczyć
  2. Dostosowanie parametrów:
    • Steps: Liczba kroków generowania. Ustawiamy zwykle na 50-100 dla wysokiej jakości obrazów. Osobiście korzystałem z 20.
    • CFG Scale: Określa balans między dokładnością promptu a kreatywnością. Najczęściej używam wartości 7-10. Można również korzystać z mniejszych wartości. Z informacji jakie udało mi się znaleźć jest to polecane.
    • Seed: Wpisuję wartość, aby wyniki były powtarzalne.
  3. Wykorzystanie LoRA: Dzięki technologii LoRA mogłem dostosować model do specyficznych stylów lub tematów, np. stylów anime czy realistycznych portretów.
  4. Eksperymentowanie z modelami:
    • Przełączanie modeli: W WebUI można zmieniać modele bez restartowania aplikacji.
  5. Zapis obrazów: Po wygenerowaniu mogę pobrać obraz lub znaleźć go w folderze wynikowym.

Wyniki

Poniżej znajdują się wyniki moich kilku pierwszych promtptów. Obrazy nie są szczytem możliwości tego modelu. Podczas generowania treści oprócz podstawowego prompta ważne jest dodanie również tego negatywnego.

Podsumowanie

Postawienie Stable Diffusion na Dockerze było prostsze, niż myślałem. Dzięki WebUI mogłem generować obrazy w różnych stylach, dostosowywać modele za pomocą LoRA i korzystać z szerokiej gamy dostępnych zasobów. Eksperymentowanie z różnymi ustawieniami oraz modelami daje mnóstwo możliwości i satysfakcji. Jeśli masz pytania lub chcesz spróbować samodzielnie, polecam! To naprawdę satysfakcjonujące doświadczenie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *