109 lines
3.4 KiB
Markdown
109 lines
3.4 KiB
Markdown
|
# 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
|
||
|
```
|
||
|
|