在上一片文章 stable diffusion webui docker 离线部署 中,我们完成了部署过程第一条命令执行流程的分析,离线部署的时候,可以在联网机器上运行命令,运行的效果是,在 project/data 目录下建立相关目录,下载 Stable Diffusion 运行所需要的模型文件、配置文件。
下面我们来看第二条命令运行后,发生了什么。
docker compose --profile [ui] up --build
# where [ui] is one of: auto | auto-cpu | comfy | comfy-cpu
以 docker compose --profile auto up --build 为例,
- 读取配置文件(profiles)
auto, --build构建auto服务的 Docker 镜像sd-auto:78,即使镜像已经存在, Docker 也会重新构建。- 启动
auto配置文件对应的服务,即auto服务。对于auto服务,继承自base_service,映射的端口是${WEBUI_PORT:-7860}:7860,挂载的卷是./data:/data和./output:/output,使用nvidia设备的第一个 GPU ,设置环境变量CLI_ARGS,服务设置为privileged模式。
接着,我们来看 auto 服务需要的镜像 sd-auto:78 如何构建,观察 ./services/AUTOMATIC1111 目录下的 Dockerfile 文件内容,使其能够在不连接互联网的情况下工作,需要将所有外部资源提前下载并存储在某个位置(例如一个本地存储库或离线镜像),然后在构建 Docker 镜像时从这些位置复制资源。
预先下载资源
第一步,下载 apt 包,
在 Dockerfile 同级目录下创建一个目录来存放下载的包,
cd stable-diffusion-webui-docker-master/services/AUTOMATIC1111
mkdir -p local_resources/apt-packages
启动一个 Ubuntu 容器 并挂载该目录,
docker run -it --name apt-downloader -v "$(pwd)/local_resources/apt-packages:/apt-packages" pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime bash
创建一个包含所需包的文件,
cd /apt-packages/
echo -e "fonts-dejavu-core\nrsync\ngit\njq\nmoreutils\naria2\nffmpeg\nlibglfw3-dev\nlibgles2-mesa-dev\npkg-config\nlibcairo2\nlibcairo2-dev\nbuild-essential\nlibgoogle-perftools-dev" > /apt-packages/apt-packages.txt
下载这些包及其依赖项,
apt-get update
while read package; do
apt-get download $package
apt-cache depends $package | awk '/Depends/ {print $2}' | grep -v '<' | xargs -I {} bash -c 'apt-get download {} || true'
done < /apt-packages/apt-packages.txt
# 解码文件名中的 URL 编码
for file in /apt-packages/*; do \
mv "$file" "$(echo $file | sed 's/%3a/:/g')"; \
done
第二步,下载 pip 包,
在 Dockerfile 同级目录下创建一个目录来存放下载的包,
cd stable-diffusion-webui-docker-master/services/AUTOMATIC1111
mkdir -p local_resources/pip-packages
启动一个 Ubuntu 容器 并挂载该目录,
docker run -it --name pip-downloader -v "$(pwd)/local_resources/pip-packages:/pip-packages" pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime bash
创建一个包含所需包的文件,
cd /pip-packages/
echo -e "pyngrok==5.1.0\nxformers==0.0.26.post1\ngit+https://github.com/TencentARC/GFPGAN.git@8d2447a2d918f8eba5a4a01463fd48e45126a379\ngit+https://github.com/openai/CLIP.git@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1\ngit+https://github.com/mlfoundations/open_clip.git@v2.20.0" > pip-packages.txt
# 补充 https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 中 v1.9.4 版本中 requirements_versions.txt 中的包
vi pip-packages.txt
setuptools==69.5.1 # temp fix for compatibility with some old packages
GitPython==3.1.32
Pillow==9.5.0
accelerate==0.21.0
blendmodes==2022
clean-fid==0.1.35
diskcache==5.6.3
einops==0.4.1
facexlib==0.3.0
fastapi==0.94.0
gradio==3.41.2
httpcore==0.15
inflection==0.5.1
jsonmerge==1.8.0
kornia==0.6.7
lark==1.1.2
numpy==1.26.2
omegaconf==2.2.3
open-clip-torch==2.20.0
piexif==1.1.3
psutil==5.9.5
pytorch_lightning==1.9.4
resize-right==0.0.2
safetensors==0.4.2
scikit-image==0.21.0
spandrel==0.1.6
tomesd==0.1.3
torch
torchdiffeq==0.2.3
torchsde==0.2.6
transformers==4.30.2
httpx==0.24.1
pillow-avif-plugin==1.4.3
下载这些包及其依赖项,
apt-get update
apt-get install git
pip download -r /pip-packages/pip-packages.txt -d /pip-packages
# pip wheel --wheel-dir /local_resources/pip-packages -r pip-packages.txt
第三步,下载 git 仓库
在可以联网的机器,克隆 git 仓库,
mkdir -p local_resources/git-repos
cd local_resources/git-repos
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui-assets.git
git clone https://github.com/Stability-AI/stablediffusion.git
git clone https://github.com/salesforce/BLIP.git
git clone https://github.com/crowsonkb/k-diffusion.git
git clone https://github.com/pharmapsychotic/clip-interrogator.git
git clone https://github.com/Stability-AI/generative-models.git
git clone https://github.com/TencentARC/GFPGAN.git
git clone https://github.com/openai/CLIP.git
git clone https://github.com/mlfoundations/open_clip.git
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
把预先准备好的资源 local_resources/apt-packages 、 local_resources/pip-packages 、 local_resources/git-repos 转移到无法联网的机器上对应目录。
关于 ./services/AUTOMATIC1111 目录下的 Dockerfile 文件内容修改,下篇文章继续分析。
微信公众号「padluo」,分享数据科学家的自我修养,既然遇见,不如一起成长。关注【老罗说AI】公众号,后台回复【文章】,获得整理好的【老罗说AI】文章全集。

4190

被折叠的 条评论
为什么被折叠?



