HelperSheets/docker/StableDiffusion.md
2024-08-26 18:09:02 +02:00

3.4 KiB

Stable Diffusion mit der UI von Automatic1111

Das ist die Dockerfile:

# PART 1: GPU support einrichten!

# Wir nutzen ein Image von NVIDIA
FROM nvidia/cuda:12.2.0-runtime-ubuntu20.04
ENV DEBIAN_FRONTEND noninteractive
# Lege für später Variablen für einen non-root User fest (mit fester UID zur besseren Zuweisung)
ENV NB_USER="gpuuser"
ENV UID=999

# Install essential packages
RUN apt-get update && apt-get install -y \
    python3.8 \
    python3-pip \
    python3.8-dev \
    python3.8-distutils \
    gcc \
    g++ \
    curl \
    wget \
    sudo \
    git \
 && rm -rf /var/lib/apt/lists/*

# Installiere hier PyTorch mit GPU support (Versionen können angepasst werden)
RUN python3.8 -m pip install --upgrade pip \
    torch==2.0.1\
    torchvision==0.15.2

# Erstellen eines non-root Users
RUN useradd -l -m -s /bin/bash -u $UID $NB_USER

# Arbeitsverzeichnis festlegen
WORKDIR /app

# PART 2: Stable Diffusion WebUI von Automatic1111 installieren

RUN echo "Etc/UTC" > /etc/timezone

RUN sudo apt-get update
RUN sudo apt-get install -y python3.8-venv
RUN sudo apt-get install -y libgl1-mesa-glx
RUN sudo apt-get update -y
RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install libglib2.0-0

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

RUN pip install -r /app/stable-diffusion-webui/requirements.txt

RUN chown -R gpuuser:gpuuser /app/stable-diffusion-webui

# und zum non-root User wechseln
 USER ${NB_USER}

RUN chmod +x /app/stable-diffusion-webui/webui.sh

# Starte die Konsole wenn wir den container starten
 CMD ["/bin/bash", "-c", "cd /app/stable-diffusion-webui && bash webui.sh --listen"]

Wir nutzen das Image folgendermaßen:

docker run --gpus all -p 7860:7860  -v /pfad/auf/host:/pfad/im/container -it sdgpu

So nutze ich in Summe 5 volumens um verschiedene Dateien von außen bearbeiten zu können. (Getestet unter Windows.)

-v C:\Users\User\Desktop\temp2\sdtest\outputs\:/app/stable-diffusion-webui/outputs/ 
-v C:\Users\User\Desktop\temp2\sdtest\models\:/app/stable-diffusion-webui/models/ 
-v C:\Users\User\Desktop\temp2\sdtest\embeddings\:/app/stable-diffusion-webui/embeddings/ 
-v C:\Users\User\Desktop\temp2\sdtest\extensions\:/app/stable-diffusion-webui/extensions/  
-v C:\Users\User\Desktop\temp2\sdtest\log\:/app/stable-diffusion-webui/log/

Der Pfad auf dem Host muss natürlich angepasst werden.

So ist z.B. ein Beispielstart:

docker run --gpus all -p 7860:7860 -v C:\Users\User\Desktop\temp2\sdtest\outputs\:/app/stable-diffusion-webui/outputs/ -v C:\Users\User\Desktop\temp2\sdtest\models\:/app/stable-diffusion-webui/models/ -v C:\Users\User\Desktop\temp2\sdtest\embeddings\:/app/stable-diffusion-webui/embeddings/ -v C:\Users\User\Desktop\temp2\sdtest\extensions\:/app/stable-diffusion-webui/extensions/ -v C:\Users\User\Desktop\temp2\sdtest\log\:/app/stable-diffusion-webui/log/ -it sdtesting

Es wurde alles getestet unter:

  • Windows 10 x86
  • Desktop Docker v4.18.0
  • Nvidia Driver 537.13
  • Cuda Version 12.2
  • Grafikkarte: NVIDIA GeForce GTX 1080 Ti

Notiz für Unraid nutzer:

Damit man eigene Images von seinem Privaten repository auf seinem Server nutzen kann, sollte man seine Registry entweder mit einem Zertifikat versehen oder man fügt seine Registry zu den insecure-registries hinzu.

$ nano /boot/config/docker.cfg

DOCKER_OPTS="--insecure-registry YOUR_REGISTRY_IP:YOUR_REGISTRY_PORT"

$ /etc/rc.d/rc.docker restart