Docker 编译
stable-diffusion-webui
是一个基于 stable-diffusion
的集成环境,包含 可用于浏览器访问的 WebUI
、API
等。
首先,我们需要编译 stable-diffusion-webui
的 docker
镜像。因为 stable-diffusion
是一个稳定扩散绘图模型,所以需要 GPU
上的支持。
其次 stable-diffusion-webui
建议操作系统为 ubuntu 20.04
。
在者,在安装过程中,会遇到一些支持问题:
- 需要
python 3.10.6
的支持,否则会在/bin/bash webui.sh
时遇到RuntimeError: Couldn't Install Torch
。相关Issuse
。 - 需要
cuda
及GPU
的支持,所以基础镜像采用nvidia/cuda
,根据物理机上的CUDA
版本来选择对应的tag
。 比如我在阿里云上选的是CUDA11.4.1/Driver470.82.01/CUDNN8.2.4
那我基础镜像就应该选择nvidia/cuda:11.4.1-base-ubuntu20.04
。 - 需要安装一下
ffmpeg libsm6 libxext6
,否则会报ImportError: libGL.so.1: cannot open shared object file: No such file or directory
。Stackoverflow 回答。 - 需要安装一下
libbz2-dev liblzma-dev
,否则会报No module named '_lzma'
。 - 需要在
webui-user.sh
中设置下export COMMANDLINE_ARGS="--skip-torch-cuda-test"
,否则不会通过GPU
检查。 - 需要使用非
root
用户运行webui.sh
,记住使用非root
用户运行前,先对项目目录授权。 - 因为
webui.sh
内集成了安装和运行,如果直接启动webui.sh
会在最后一直卡住,所以需要在运行webui.sh
加一下--exit
参数。参数含义。 - 编译
docker
镜像时,会下载大量的境外资源,所以最好在海外服务器上。
下面是编译文件示例:
FROM nvidia/cuda:11.6.0-base-ubuntu20.04 AS builder
WORKDIR /
ENV TZ=Asia/Shanghai \
DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y wget git bzip2 ca-certificates curl python3 python3-venv numactl libjemalloc-dev make automake gcc g++ subversion build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev liblzma-dev ffmpeg libsm6 libxext6 && \
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git && cd stable-diffusion-webui && echo "export COMMANDLINE_ARGS=\"--skip-torch-cuda-test\"" >> webui-user.sh && \
wget https://static.elias.ink/python/3/Python-3.10.6.tgz && tar -zvxf Python-3.10.6.tgz && cd Python-3.10.6/ && ./configure --enable-optimizations && make && make install && ln -s /usr/local/bin/python3.10 /usr/bin/python && \
useradd -m -s /bin/bash diffusion && echo "diffusion:yupoo" | chpasswd && \
chown -R diffusion /stable-diffusion-webui/
USER diffusion
WORKDIR /stable-diffusion-webui
RUN /bin/bash webui.sh --exit
CMD ["/bin/bash"]
直接运行 docker build -t ${your_image_name}:${you_image_tag}
慢慢等待编译即可。
出现 Exiting because of --exit argument
就代表安装完成,只要耐心等待片刻即可。
基础环境安装
之后,需要设置下物理机来支持镜像的运行。
首先我们需要 docker 19.03
及以上的版本。安装教程可参考官方文档。
安装之后,需要安装 NVIDIA
的 CUDA
及相关 GPU
驱动,这里我直接使用的阿里云的服务器,已经自动帮我安装好了。如果驱动安装正常,使用 nvidia-smi
可获得下面的输出。
在上述操作完成后,需要安装 nvidia-docker
来使容器可以使用 GPU
资源。
我以两个主流操作系统为例展示如何安装 nvidia-docker
。
Ubuntu 20.02 安装 nvidia-docker
工具包的包存储库添加到系统:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
安装 nvidia-docker2
。
apt-get update && apt-get install -y nvidia-docker2
Centos 7 安装 nvidia-docker
工具包的包存储库添加到系统:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
安装 nvidia-container-toolkit
以及 nvidia-docker2
。
sudo yum install -y nvidia-container-toolkit nvidia-docker2
安装后检测
安装完成后需要重启下 docker
进程,不管是 Centos
还是 Ubuntu
都执行下面的命令即可。
sudo systemctl restart docker
之后运行一个测试镜像来检测是否正常。
docker run -it --gpus all nvidia/cuda:11.4.0-base-ubuntu20.04 nvidia-smi
执行上面的命令会输出以下内容:
之后,运行 stable-diffusion-webui
镜像:
docker run -it --gpus all cocytuselias2023/stable-diffusion-webui:cuda11.4.1-ubuntu20.04 /bin/bash webui.sh --share --no-half --enable-insecure-extension-access --xformers --gradio-queue
上面这个命令是在前台运行的。
docker run --gpus all cocytuselias2023/stable-diffusion-webui:cuda11.4.1-ubuntu20.04 /bin/bash webui.sh --share --no-half --enable-insecure-extension-access --xformers --gradio-queue
上面这个命令是在后台运行的。
启动后,会下一个 3.97G
的 safetensors
文件。
下载完成后,会给一个 Public URL
,这个地址是你的服务器即使不在公网上,只要能访问互联网就可以使用。像我的是 https: //2bf2bdf1-6d8f-46c2.gradio.live
。
然后就可以愉快的玩耍了。
生成一个狗。