docker部署stable-diffusion-webui

介绍

stable-diffusion无疑是现在最热门的AI绘画模型了,stable-diffusion-webui提供了一个简单的通过web图形化调用的方法,但可惜没有提供对应的docker镜像,这里就尝试构建一个,方便之后的使用和分享。

搭建

环境是一台ubuntu22.04服务器,配一张3070显卡。
docker安装以及显卡驱动的安装就省略吧。
从安装NVIDIA Container Toolkit开始。
按照nvidia的指南

设置软件包存储库和 GPG 密钥:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
      && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
            sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
            sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

apt安装

sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

测试

sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi

能看到nvidia-smi就算成功了
nvidia-smi

搭建docker镜像

基础镜像就选择 nvidia/cuda:11.3.1-devel-ubuntu20.04
然后坑就来了

cuda版本

因为webUI默认使用的torch是pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113,所以这里要选择对应的11.3版本的cuda。

用户要求非root

WebUI脚本里去限制了root用户启动,这里在dockerFile里创建非root用户来启动

groupadd -r admin && useradd -r -g admin -m admin \
    && mkdir /workdir && chown admin:admin /workdir

别忘了赋予相应的权限。

网络代理

很多库和git仓库都要去下载,要设置好对应的代理,如果想打包时就使用代理,可以在~/.docker/config.json中配置

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://192.168.31.5:7890",
     "httpsProxy": "http://192.168.31.5:7890",
     "noProxy": "127.0.0.0/8,localhost"
   }
 }
}

python版本

虽然要求是3.10,但实测3.8也是可以的,但再低3.6好像就不行了。

GPU配置

docker-compose.yml中配置

deploy:
  resources:
    reservations:
      devices:
        - capabilities: [gpu]

dockerfile中使用Python-venv

方便起见,shell选用bash

SHELL ["/bin/bash", "-c"]

这里Dockerfile中的每一行 RUN 都是一个不同的过程。如果分开写,比如

RUN source venv/bin/activate
RUN pip install opencv-python-headless

是没有效果的。
一定要连在一起

RUN source venv/bin/activate && pip install opencv-python-headless

Dockerfile

FROM nvidia/cuda:11.3.1-devel-ubuntu20.04
SHELL ["/bin/bash", "-c"]
RUN apt-get update \
    && apt-get install git wget python3 python3-venv python3-pip -y \
    && groupadd -r admin && useradd -r -g admin -m admin \
    && mkdir /workdir && chown admin:admin /workdir
USER admin

WORKDIR /workdir
RUN git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
COPY model.ckpt /workdir/stable-diffusion-webui/models/Stable-diffusion/

WORKDIR /workdir/stable-diffusion-webui
ENV PYTHONUNBUFFERED=1
RUN ./webui.sh --skip-torch-cuda-test --exit
RUN source venv/bin/activate && pip install opencv-python-headless

CMD ./webui.sh --listen
  • 这里的model.ckpt可以去huggingface下载,选择合适的stable-diffusion模型即可。
  • RUN ./webui.sh --skip-torch-cuda-test --exit这里是把第一的初始化(安装依赖、下载仓库)也放到镜像中了
  • 默认只监听127.0.0.1,添加–listen以监听0.0.0.0,默认端口是7860,这里也通过nginx反代出去了。

nginx反代

docker-compose

version: "2.3"
services:
  app:
    image: stable-diffusion-webui-docker:0.1
    container_name: stable-diffusion-webui
    runtime: nvidia
    environment:
      - HTTP_PROXY=http://clash:7890
      - HTTPS_PROXY=http://clash:7890
      - no_proxy=localhost,127.0.0.1,::1
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
networks:
  default:
    external: true
    name: nginxproxynet

这里也可以选择配置volume,方便之后的替换模型

volumes:
  - ./Stable-diffusion:/workdir/stable-diffusion-webui/models/Stable-diffusion

测试

最后随便在网上找点提示词试一试,模型权重就用runwayml/stable-diffusion-v1-5

"portrait photo of a old man crying, Tattles, sitting on bed, guages in ears, looking away, serious eyes, 50mm portrait photography, hard rim lighting photography–beta –ar 2:3 –beta –upbeta"

"temple in ruines, forest, stairs, columns, cinematic, detailed, atmospheric, epic, concept art, Matte painting, background, mist, photo-realistic, concept art, volumetric light, cinematic epic + rule of thirds octane render, 8k, corona render, movie concept art, octane render, cinematic, trending on artstation, movie concept art, cinematic composition , ultra-detailed, realistic , hyper-realistic , volumetric lighting, 8k –ar 2:3 –test –uplight"

再整个二刺螈的模型权重试试waifu-diffusion-v1-3

"(best quality),(highly detailed),(masterpiece),(ultra-detailed),(absurdres),(((artbook))),((8k_wallpaper)),((an extremely delicate and beautiful)),((detailed light)),((ultra-detailed)),(anime face),((extremely_detailed_eyes_and_face)),((gorgeous)),((beautiful detailed eyes)),illustration,medium breast,(solo),((bishoujo)),St. Louis_(azur lane),cosplay,(blue hair),(((Side single ponytail hair))),(claret eyes)"


docker部署stable-diffusion-webui
https://www.kuanmi.top/2022/11/09/stable-diffusion-webui-docker/
作者
KuanMi
发布于
2022年11月9日
许可协议