HelperSheets/docker/StableDiffusion.md

109 lines
3.4 KiB
Markdown
Raw Permalink Normal View History

2024-08-26 18:09:02 +02:00
# Stable Diffusion mit der UI von Automatic1111
Das ist die Dockerfile:
```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:
```shell
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:
```shell
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.
```shell
$ nano /boot/config/docker.cfg
DOCKER_OPTS="--insecure-registry YOUR_REGISTRY_IP:YOUR_REGISTRY_PORT"
$ /etc/rc.d/rc.docker restart
```