在 Docker 中部署 StableDiffusion UI 工程
English | [中文]
- Docker
- NVIDIA CUDA
- WSL: 在 Windows 上需要这个
- 注意: 在 WSL 中运行 Docker 会导致磁盘 I/O 性能严重下降
- Git
- Intel Core i7-8700K
- NVIDIA GeForce RTX 4070 SUPER
- 32GB DDR4 3200MHz
# 在 Windows 上要干的事儿
#git config --global core.autocrlf false
# 输出目录, 所有输出的内容都会在这个文件夹里面
mkdir data
构建一个 tinyproxy 镜像
因为使用 Docker 就是希望隔离 UI 项目, 避免其直接访问到互联网, 或被其污染主机环境
# 如果是在 Windows 中运行, 需要先在 Git Bash 中执行以下以下语句
#dos2unix tinyproxy.conf
docker build -t tinyproxy:latest -f v1.tinyproxy.Dockerfile .
测试 tinyproxy 代理服务器是否正常工作
如果需要上游代理的, 将 tinyproxy.conf 的最后一行, 取消注释, 并替换成你自己的代理地址即可; 不需要上游代理的, 可以将下面的 duckduckgo.com 替换成其他网站
#docker exec -it tinyproxy bash
unset http_proxy
docker rm -f tinyproxy
docker run -d -p 8119:8118 --name tinyproxy -v "$(pwd)/tinyproxy.conf:/etc/tinyproxy/tinyproxy.conf" tinyproxy:latest
curl -v duckduckgo.com
export http_proxy=http://127.0.0.1:8119
curl -v duckduckgo.com
docker rm -f tinyproxy
这是一个很好用、很出名的 SD UI 工程
# 模型目录
mkdir -p models/checkpoints
# `LoRA` 目录
mkdir -p models/loras
# `embeddings` / `Textual Inversion` 目录
mkdir -p models/embeddings
# `VAE` 目录
mkdir -p models/vae
mkdir -p models/vae_approx
# `OpenAI` `CLIP` 项目
mkdir -p openai
# 构建镜像
docker build -t 1111webui:v1 -f v1.1111webui.Dockerfile .
# 拉取分词+图文模型
git clone--depth 1 https://huggingface.co/openai/clip-vit-large-patch14 openai/clip-vit-large-patch14
# 推荐使用的 ControlNET 模型
git clone--depth 1 https://huggingface.co/lllyasviel/ControlNet-v1-1 models/controlnet/ControlNet-v1-1
# FaceID IP-Adapter 模型
git clone--depth 1 https://huggingface.co/h94/IP-Adapter-FaceID models/controlnet/IP-Adapter-FaceID
docker compose -f compose.1111webui.yaml up -d
这是一个基于图形化节点编程的 SD UI 工程
# 构建镜像
docker build -t comfyui:v1 -f v1.comfyui.Dockerfile .
# 启动容器
docker compose -f compose.comfyui.yaml up -d
这不是一个 SD 的工程, 但是可以用来跑大语言模型, 正好 SDUI 的基础设施可以直接搭建构建这个镜像.
支持的模型:
# `Ollama` 的模型和配置文件夹
mkdir ollama
docker compose -f compose.ollama.yaml up -d
一分钟声音克隆
# `GPT-SoVITS` 的模型和配置文件夹
mkdir gpt-sovits
git clone --depth 1 https://huggingface.co/lj1995/GPT-SoVITS ./gpt-sovits/SoVITS_weights
docker compose -f compose.gpt-sovits.yaml up -d
docker build -t easyocr:v1 -f v1.easyocr.Dockerfile .
docker compose -f compose.easyocr.yaml up -d
- 如何在构建镜像过程中使用上游代理服务?
- 参考构建 tinyproxy 的过程, 在构建镜像时, 传入
--build-arg
参数即可 -
export http_proxy=http://proxy.lan:1080 docker build \ --build-arg "http_proxy=$http_proxy" --build-arg "https_proxy=$http_proxy"--build-arg no_proxy=localhost,127.0.0.1 \ --progress=plain \ -t image:tag -f Dockerfile .
- 参考构建 tinyproxy 的过程, 在构建镜像时, 传入
- 英伟达 CUDA 驱动安装失败
- 可能因为我的显卡比较老了, 安装 CUDA 的时候提示 nsight compute 什么什么的安装失败了. 所以在安装 CUDA 的时候, 选择自定义安装, 然后取消勾选 nsight compute, 先把 CUDA 其他模块安装完成. 然后再去英伟达官网下载 nsight compute 相关的安装包, 一顿安装, 就可以了.
- 因为我也不确定有没有 nsight compute 会不会对 pytorch 有影响, 反正现在能正常跑起来了.
- 出现类似问题的小伙伴也可以通过在
安装错误的结果页面
找到对应出错的模块, 按照上面的思路进行就好了.
- 如何备份 Docker 容器? (因为更改配置之后重启 compose 会丢失原有容器内容)
-
# 备份 `AUTOMATIC1111/stable-diffusion-webui` docker commit 1111webui-app-1 1111webui:v1
-
- 如何备份 Docker 镜像?
-
# 导出 `AUTOMATIC1111/stable-diffusion-webui` 为 `1111webui.v1.tar` docker image save 1111webui:v1 -o 1111webui.v1.tar # 然后将 `1111webui.v1.tar` 放到安全的地方
-
- SD: Stable Diffusion
- UI: User interface
-
其他更多爱心人士...