Skip to content

Latest commit

 

History

History
338 lines (264 loc) · 11.4 KB

README.zh.adoc

File metadata and controls

338 lines (264 loc) · 11.4 KB

用于 ComfyUI 的 Docker 镜像

GitHub Workflow Status GitHub Workflow Status

布局

ComfyUI 是一个使用节点工作流的 Stable Diffusion 图形界面。
本仓库所构建的 Docker 镜像 包含其依赖项,及下载/启动脚本。

工作流程

  1. 初次启动时,启动脚本会下载 ComfyUI、ComfyUI-Manager 以及一些常用的功能性模型。

  2. 整个 ComfyUI 会保存在本地 (./storage/ComfyUI) 。

  3. 如果你已经有了现成的 ComfyUI 包,放在上述目录,并新建一个空白文件 (./storage/.download-complete),启动脚本会跳过下载。

  4. 使用 ComfyUI-Manager 即可更新组件、安装模型(在 ComfyUI 页面中找到“Manager”)。

运行前提

  • NVIDIA 显卡, ≥6GB 显存

  • 安装好最新的 NVIDIA 显卡驱动

    • 游戏驱动或 Studio 驱动均可。

    • 只需要在宿主系统中安装驱动即可,容器中不需要再安装驱动。

  • 安装好 Docker

    • Linux 用户可能需要安装 NVIDIA Container Toolkit (使得容器可以访问宿主机的 GPU)。

    • Windows 用户建议使用 Docker Desktop 并在安装时启用 WSL2,并 限制内存用量

    • 下载过程可能需要科学上网,在 Docker 设置中可以找到代理设置。

运行方法 - NVIDIA 显卡

方法 A 使用 docker compose
git clone https://github.com/YanWenKun/ComfyUI-Docker.git

cd ComfyUI-Docker

docker compose up --detach

# 更新镜像(仅在 Python 组件版本过期时需要)
git pull
docker compose pull
docker compose up --detach --remove-orphans
docker image prune
方法 B 使用 docker run
mkdir -p storage

docker run -it \
  --name comfyui \
  --gpus all \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="" \
  yanwk/comfyui-boot:latest

# 更新镜像(仅在 Python 组件版本过期时需要)
docker rm comfyui
docker pull yanwk/comfyui-boot:latest
# 接下来再运行一遍上述 'docker run' 即可

启动完成后,访问 http://localhost:8188/

运行方法 - AMD 显卡(尚在实验)

Note
推荐 AMD 用户使用 Win11 + ZLUDA 方式运行,安装 AMD HIP SDK 并使用常见整合包运行即可(不要开启 xFormers),初次运行会花 15 分钟左右来编译代码,之后就和 CUDA 体验差不多了。不推荐缺乏经验的用户折腾 Linux 下的 ROCm。
Note
WSL2 + AMD/Intel GPU 可以考虑: 在 WSL2 环境下通过 DirectML 运行 ComfyUI
Note
Linux 宿主机需要安装 Radeon software for Linux with ROCm 以让 Docker 支持 GPU,各发行版可能安装方式不同。
方法 C 使用 docker compose
git clone https://github.com/YanWenKun/ComfyUI-Docker.git

cd ComfyUI-Docker

docker compose -f docker-compose-rocm.yml up --detach

# 更新镜像(仅在 Python 组件版本过期时需要)
git pull
docker compose -f docker-compose-rocm.yml pull
docker compose -f docker-compose-rocm.yml up --detach --remove-orphans
docker image prune
方法 D 使用 docker run(root 身份)
mkdir -p storage

docker run -it --rm \
  --name comfyui-root \
  --device=/dev/kfd --device=/dev/dri \
  --group-add=video --ipc=host --cap-add=SYS_PTRACE \
  --security-opt seccomp=unconfined \
  --security-opt label=disable \
  -p 8188:8188 \
  --env CLI_ARGS="--use-pytorch-cross-attention" \
  --user root --workdir /root \
  -v "$(pwd)"/storage:/root \
  yanwk/comfyui-boot:rocm \
  /bin/bash /home/scripts/root-wrapper.sh

启动完成后,访问 http://localhost:8188/

Q & A

Q: 显存只有 4G 怎么办?
A: 在启动参数 CLI_ARGS 中添加 --lowvram

Q: 用了 --lowvram 还是显存不够
A: 参数换成 --novram (直接用 CPU 内存)。

Q: 能不能直接用 CPU 来跑?
A: 在启动参数 CLI_ARGS 中添加 --cpu ,会很慢。

Q: 我不想用 xFormers,如何使用 PyTorch 原生交叉注意力机制?
A: 在启动参数 CLI_ARGS 中添加 --use-pytorch-cross-attention 。在 WSL2 上可能速度/显存占用表现更佳,但在 Linux 宿主机上会明显更慢。

更多 CLI_ARGS 参考 ComfyUI

一些方便 Debug 的命令

构建镜像,打印所有日志(不折叠)
docker build . --progress=plain -f Dockerfile -t yanwk/comfyui-boot:latest
运行一个一次性容器
docker run -it --rm \
  --gpus all -p 8188:8188 \
  --volume "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="" \
  yanwk/comfyui-boot:latest
用 root 身份运行 bash
docker run -it --rm \
  --gpus all -p 8188:8188 \
  --volume "$(pwd)"/storage:/home/runner \
  --env CLI_ARGS="" \
  --user root \
  yanwk/comfyui-boot:latest /bin/bash

使用 Podman 运行

Podman 默认是 root-less 的,不需要 sudo,这也给挂载目录 带来了限制
Podman 默认挂载文件为 root 身份,而想要在容器内挂载为非 root 用户,Podman 提供的 选项 则会对主机上的文件执行 chown,变成和容器内一样的 uid 和 gid,给文件管理带来混乱。

这里推荐两种不同的方式绕过:

1. 像 Docker 一样 "root-ful"

展开细节

简单直接的方式,用 sudo 来运行 Podman 就是 rootful 了,使用体验基本和 Docker 一样,就是记得后续操作也要用 "sudo"。
此外镜像文件也是下载到 root 用户名下。如果已经用当前 Linux 用户下载了镜像,可以本地复制:
sudo podman image scp username@localhost::docker.io/yanwk/comfyui-boot:latest

mkdir -p storage

sudo podman run -it --rm \
  --name comfyui-rootful \
  --device nvidia.com/gpu=all \
  --security-opt label=disable \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/home/runner \
  -e CLI_ARGS="" \
  docker.io/yanwk/comfyui-boot

2. 在容器内改为 root 运行

展开细节

保持 rootless 风格,不需要 sudo。容器内文件挂载为 root,程序也以 root 执行。而在宿主机一侧看来,文件还是本来的用户所有权。

mkdir -p storage

podman run -it --rm \
  --name comfyui-rootless \
  --device nvidia.com/gpu=all \
  --security-opt label=disable \
  -p 8188:8188 \
  -v "$(pwd)"/storage:/root \
  --user root \
  --workdir /root \
  -e CLI_ARGS="" \
  docker.io/yanwk/comfyui-boot:latest \
  /bin/bash /home/scripts/root-wrapper.sh

清理缓存文件

如果在升级时遇到奇怪问题,可以尝试清理缓存文件。平时不需要清理,避免反复下载一些文件(尤其一些节点用 huggingface_hub 下载模型,会存在 .cache 中)。

docker exec -it --workdir /home/runner  comfyui \
  rm -rf .cache/ .config/ .local/ .nv/ bin/ include/ lib/ lib64 pyvenv.cfg

docker restart comfyui

一些自定义节点

以下命令会安装一些常用节点,也许能帮你节省点时间

镜像里已经安装好了绝大部分依赖项,不需要手动安装。
(除了 imageio-ffmpeg, 该包使用 FFmpeg4,而镜像里安装了 FFmpeg6 或更新版本)

cd ComfyUI/custom_nodes/

gcs='git clone --depth=1 --no-tags --recurse-submodules --shallow-submodules'

$gcs https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation.git
$gcs https://github.com/bash-j/mikey_nodes.git
$gcs https://github.com/chrisgoringe/cg-use-everywhere.git
$gcs https://github.com/11cafe/comfyui-workspace-manager.git
$gcs https://github.com/crystian/ComfyUI-Crystools.git
$gcs https://github.com/cubiq/ComfyUI_essentials.git
$gcs https://github.com/cubiq/ComfyUI_InstantID.git
$gcs https://github.com/cubiq/ComfyUI_IPAdapter_plus.git
$gcs https://github.com/Fannovel16/comfyui_controlnet_aux.git
$gcs https://github.com/Fannovel16/ComfyUI-Frame-Interpolation.git
$gcs https://github.com/FizzleDorf/ComfyUI_FizzNodes.git
$gcs https://github.com/florestefano1975/comfyui-portrait-master.git
$gcs https://github.com/Gourieff/comfyui-reactor-node.git
$gcs https://github.com/huchenlei/ComfyUI-layerdiffuse.git
$gcs https://github.com/jags111/efficiency-nodes-comfyui.git
$gcs https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet.git
$gcs https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git
$gcs https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git
$gcs https://github.com/ltdrdata/ComfyUI-Impact-Pack.git
$gcs https://github.com/ltdrdata/ComfyUI-Inspire-Pack.git
$gcs https://github.com/mcmonkeyprojects/sd-dynamic-thresholding.git
$gcs https://github.com/pythongosssss/ComfyUI-Custom-Scripts.git
$gcs https://github.com/pythongosssss/ComfyUI-WD14-Tagger.git
$gcs https://github.com/rgthree/rgthree-comfy.git
$gcs https://github.com/shiimizu/ComfyUI_smZNodes.git
$gcs https://github.com/SLAPaper/ComfyUI-Image-Selector.git
$gcs https://github.com/twri/sdxl_prompt_styler.git

此外,本镜像并未提供 WAS Node Suite 所需依赖项,因为其部分 版本固定, 而且已不再活跃开发。
但是通过 ComfyUI-Manager 正常安装不受影响,本镜像的脚本只安装 ComfyUI-Manager 这一个自定义节点。在全新部署的情况下,使用 ComfyUI-Manager 安装 WAS NS 不会有版本冲突。
如果不同节点间出现冲突,尝试在 custom_nodes 下删除对应节点,并删除 .local (或 local)目录,然后在 ComfyUI-Manager 中更新/尝试修复/重新安装对应节点。

预启动脚本

如果需要在 ComfyUI 启动前执行脚本,可以创建这个文件:

./storage/scripts/pre-start.sh

如果你需要单独设置代理,可以创建这个文件,它会在 pre-startdownload 之前运行:

./storage/scripts/set-proxy.sh
参考文本:
export HTTP_PROXY=http://host.docker.internal:1081
export HTTPS_PROXY=$HTTP_PROXY
export http_proxy=$HTTP_PROXY
export https_proxy=$HTTP_PROXY
export NO_PROXY="localhost,*.local,*.internal,[::1],fd00::/7,
10.0.0.0/8,127.0.0.0/8,169.254.0.0/16,172.16.0.0/12,192.168.0.0/16,
10.*,127.*,169.254.*,172.16.*,172.17.*,172.18.*,172.19.*,172.20.*,
172.21.*,172.22.*,172.23.*,172.24.*,172.25.*,172.26.*,172.27.*,
172.28.*,172.29.*,172.30.*,172.31.*,172.32.*,192.168.*,
*.cn,ghproxy.com,*.ghproxy.com,ghproxy.org,*.ghproxy.org,
gh-proxy.com,*.gh-proxy.com,ghproxy.net,*.ghproxy.net"
export no_proxy=$NO_PROXY
echo "[INFO] Proxy set to $HTTP_PROXY"

声明

代码使用 木兰公共许可证, 第2版 。 中英双语哦!