N卡环境下以Docker方式一键部署ComfyUI
乐果 发表于 2025 年 02 月 08 日 标签:Dockerai
之前直接在N卡
物理机上跑模型难免因为各种依赖兼容的问题反复折腾,
并且当模型升级时依赖环境又得升级。
特别当跑多个不同模型时,环境的兼容性就成了“鱼与熊掌不可兼得”尴尬。
最近发现可以用Docker
方式部署,不得不说英伟达的生态还是非常棒的,也难怪成为显卡一哥。
下面把折腾笔记记录一下。
假设在debian12
服务器系统下已安装好如下基础环境:
- 安装好英伟达显卡驱动;
- 安装好
Docke
r;
安装英伟达为Docker容器工具包
检查 NVIDIA
容器工具包是否安装:
dpkg -l | grep nvidia-container-toolkit
确认 NVIDIA
容器工具包是否已正确安装
如果没有任何信息出现,则使用以下命令安装:
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
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo systemctl restart docker
注意,如果是ubuntu18.04
之类的系统,上面步骤是可以的。
但是debian12
可能会报错,可能是debian12
作为debian
最新发行版显卡一哥还没来得及更新。
不过没关系用deiban11
也是可以,如下:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey > /etc/apt/keyrings/nvidia-docker.key
curl -s -L https://nvidia.github.io/nvidia-docker/debian11/nvidia-docker.list > /etc/apt/sources.list.d/nvidia-docker.list
sed -i -e "s/^deb/deb \[signed-by=\/etc\/apt\/keyrings\/nvidia-docker.key\]/g" /etc/apt/sources.list.d/nvidia-docker.list
apt update
apt -y install nvidia-container-toolkit
systemctl restart docker
部署ComfyUI
拉取第三方ConfyUI
镜像:
docker pull dockerproxy.net/yanwk/comfyui-boot:cu124-cn
定义工作空间:
mkdir -p /data/comfyui/storage
启动镜像容器:
docker run -it --rm \
--name comfyui-cn \
--gpus all \
-p 8188:8188 \
-v "$(pwd)"/storage:/root \
-e CLI_ARGS="--fast" \
-e PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple" \
-e HF_ENDPOINT="https://hf-mirror.com" \
yanwk/comfyui-boot:cu124-cn
启动报错:
排查问题,发现是ghp.ci
失效了,我们替换只新地址ghgo.xyz
,查看地址: https://ghproxy.link
下载代码查看:
# git clone https://github.com/YanWenKun/ComfyUI-Docker
https://github.com/YanWenKun/ComfyUI-Docker/tree/main/cu124-cn/runner-scripts
ghp.ci
替换ghgo.xyz
:
# ls -l
-rw-r--r--. 1 root root 29 12月 19 17:26 comfy.settings.json.example
-rw-r--r--. 1 root root 3647 12月 19 17:37 download-models.txt
-rw-r--r--. 1 root root 5068 12月 19 17:37 download.sh
-rw-r--r--. 1 root root 1399 12月 19 17:26 entrypoint.sh
-rw-r--r--. 1 root root 1976 12月 19 17:35 minimal-start.sh
-rw-r--r--. 1 root root 66 12月 19 17:26 pre-start.sh.example
-rw-r--r--. 1 root root 904 12月 19 17:26 set-proxy.sh.example
# grep -rl1 'ghp.ci' .
./download-models.txt
./download.sh
./minimal-start.sh
# sed -i 's/ghp.ci/ghgo.xyz/g' download-models.txt
# sed -i 's/ghp.ci/ghgo.xyz/g' download.sh
# sed -i 's/ghp.ci/ghgo.xyz/g' minimal-start.sh
重新构建 Dockerfile
和镜像:
FROM yanwk/comfyui-boot:cu124-cn
RUN rm -rf /runner-scripts/
COPY runner-scripts/. /runner-scripts/
打镜像标签:
docker build -t hub.wesais.cn/comfyui-boot:cu124-cn
重新启动新镜像容器:
docker run -it --rm \
--name comfyui-cn \
--gpus all \
-p 8188:8188 \
-v /data/comfyui/storage:/root \
-e CLI_ARGS="--fast" \
-e PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple" \
-e HF_ENDPOINT="https://hf-mirror.com" \
hub.wesais.cn/comfyui-boot:cu124-cn
成功运行:
下载模型成功:
导入自定义节点成功:
如果发现有个别是失败的,需要的时候,我们可以单独下载至外设路径 storge
的 ComfyUI/custom_nodes
ComfyUI体验效果
浏览器打开效果:
提示词:
a bottle with a beautiful rainbow galaxy inside it on top of a wooden table
in the middle of a modern kitchen beside a plate of vegetables and mushrooms
and a wine glasse that contains a planet earth with a plate with
a half eaten apple pie on it.
可以下载更多的工作流模版来体验不一样的效果,comfyworkflows
ComfyUI-AuraFlow-v0.3
模型体验:
工作流:
小试牛刀:
查看最终Docker镜像信息
查看镜像详细信息:
root@xiao:/data/comfyui# docker inspect hub.wesais.cn/comfyui-boot:cu124-cn
[
{
"Id": "sha256:d33d2987df5f2e11356676e7a46b2fad2eacc27d815b9669fdceb3cd288890df",
"RepoTags": [
"hub.wesais.cn/comfyui-boot:cu124-cn"
],
"RepoDigests": [],
"Parent": "sha256:8fb8778fb150473ce7b756873efa7ec4790006213d9790a5940bf0da9a8cd748",
"Comment": "",
"Created": "2025-02-08T14:47:31.136600723Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "root",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8188/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LD_LIBRARY_PATH=:/usr/local/lib64/python3.12/site-packages/torch/lib:/usr/local/lib/python3.12/site-packages/cusparselt/lib:/usr/local/lib/python3.12/site-packages/nvidia/cuda_cupti/lib:/usr/local/lib/python3.12/site-packages/nvidia/cuda_runtime/lib:/usr/local/lib/python3.12/site-packages/nvidia/cudnn/lib:/usr/local/lib/python3.12/site-packages/nvidia/cufft/lib:/usr/local/lib/python3.12/site-packages/nvidia/cublas/lib:/usr/local/lib/python3.12/site-packages/nvidia/cuda_nvrtc/lib:/usr/local/lib/python3.12/site-packages/nvidia/curand/lib:/usr/local/lib/python3.12/site-packages/nvidia/cusolver/lib:/usr/local/lib/python3.12/site-packages/nvidia/cusparse/lib:/usr/local/lib/python3.12/site-packages/nvidia/nccl/lib:/usr/local/lib/python3.12/site-packages/nvidia/nvjitlink/lib:/usr/local/lib/python3.12/site-packages/nvidia/nvtx/lib",
"PIP_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple",
"HF_ENDPOINT=https://hf-mirror.com",
"CLI_ARGS="
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) COPY dir:9b3e3c7b3764fe750d5468a43c1996fc998934b10be5fcc61d86707e4df740cb in /runner-scripts/ "
],
"ArgsEscaped": true,
"Image": "sha256:8fb8778fb150473ce7b756873efa7ec4790006213d9790a5940bf0da9a8cd748",
"Volumes": {
"/root": {}
},
"WorkingDir": "/root",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "YAN Wenkun <code@yanwk.fun>",
"org.openbuildservice.disturl": "obs://build.opensuse.org/openSUSE:Factory/images/9964c6ceb7b36fad09fc97e1c3e7c0f8-opensuse-tumbleweed-image:docker",
"org.opencontainers.image.created": "2025-01-31T04:27:04.266916739Z",
"org.opencontainers.image.description": "Image containing a minimal environment for containers based on openSUSE Tumbleweed.",
"org.opencontainers.image.source": "https://build.opensuse.org/package/show/openSUSE:Factory/opensuse-tumbleweed-image?rev=9964c6ceb7b36fad09fc97e1c3e7c0f8",
"org.opencontainers.image.title": "openSUSE Tumbleweed Base Container",
"org.opencontainers.image.url": "https://www.opensuse.org",
"org.opencontainers.image.vendor": "openSUSE Project",
"org.opencontainers.image.version": "20250130.33.297",
"org.opensuse.base.created": "2025-01-31T04:27:04.266916739Z",
"org.opensuse.base.description": "Image containing a minimal environment for containers based on openSUSE Tumbleweed.",
"org.opensuse.base.disturl": "obs://build.opensuse.org/openSUSE:Factory/images/9964c6ceb7b36fad09fc97e1c3e7c0f8-opensuse-tumbleweed-image:docker",
"org.opensuse.base.lifecycle-url": "https://en.opensuse.org/Lifetime",
"org.opensuse.base.reference": "registry.opensuse.org/opensuse/tumbleweed:20250130.33.297",
"org.opensuse.base.source": "https://build.opensuse.org/package/show/openSUSE:Factory/opensuse-tumbleweed-image?rev=9964c6ceb7b36fad09fc97e1c3e7c0f8",
"org.opensuse.base.title": "openSUSE Tumbleweed Base Container",
"org.opensuse.base.url": "https://www.opensuse.org",
"org.opensuse.base.vendor": "openSUSE Project",
"org.opensuse.base.version": "20250130.33.297",
"org.opensuse.lifecycle-url": "https://en.opensuse.org/Lifetime",
"org.opensuse.reference": "registry.opensuse.org/opensuse/tumbleweed:20250130.33.297"
}
},
"DockerVersion": "20.10.24+dfsg1",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "root",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8188/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LD_LIBRARY_PATH=:/usr/local/lib64/python3.12/site-packages/torch/lib:/usr/local/lib/python3.12/site-packages/cusparselt/lib:/usr/local/lib/python3.12/site-packages/nvidia/cuda_cupti/lib:/usr/local/lib/python3.12/site-packages/nvidia/cuda_runtime/lib:/usr/local/lib/python3.12/site-packages/nvidia/cudnn/lib:/usr/local/lib/python3.12/site-packages/nvidia/cufft/lib:/usr/local/lib/python3.12/site-packages/nvidia/cublas/lib:/usr/local/lib/python3.12/site-packages/nvidia/cuda_nvrtc/lib:/usr/local/lib/python3.12/site-packages/nvidia/curand/lib:/usr/local/lib/python3.12/site-packages/nvidia/cusolver/lib:/usr/local/lib/python3.12/site-packages/nvidia/cusparse/lib:/usr/local/lib/python3.12/site-packages/nvidia/nccl/lib:/usr/local/lib/python3.12/site-packages/nvidia/nvjitlink/lib:/usr/local/lib/python3.12/site-packages/nvidia/nvtx/lib",
"PIP_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple",
"HF_ENDPOINT=https://hf-mirror.com",
"CLI_ARGS="
],
"Cmd": [
"bash",
"/runner-scripts/entrypoint.sh"
],
"ArgsEscaped": true,
"Image": "sha256:8fb8778fb150473ce7b756873efa7ec4790006213d9790a5940bf0da9a8cd748",
"Volumes": {
"/root": {}
},
"WorkingDir": "/root",
"Entrypoint": null,
"OnBuild": null,
"Labels": {
"maintainer": "YAN Wenkun <code@yanwk.fun>",
"org.openbuildservice.disturl": "obs://build.opensuse.org/openSUSE:Factory/images/9964c6ceb7b36fad09fc97e1c3e7c0f8-opensuse-tumbleweed-image:docker",
"org.opencontainers.image.created": "2025-01-31T04:27:04.266916739Z",
"org.opencontainers.image.description": "Image containing a minimal environment for containers based on openSUSE Tumbleweed.",
"org.opencontainers.image.source": "https://build.opensuse.org/package/show/openSUSE:Factory/opensuse-tumbleweed-image?rev=9964c6ceb7b36fad09fc97e1c3e7c0f8",
"org.opencontainers.image.title": "openSUSE Tumbleweed Base Container",
"org.opencontainers.image.url": "https://www.opensuse.org",
"org.opencontainers.image.vendor": "openSUSE Project",
"org.opencontainers.image.version": "20250130.33.297",
"org.opensuse.base.created": "2025-01-31T04:27:04.266916739Z",
"org.opensuse.base.description": "Image containing a minimal environment for containers based on openSUSE Tumbleweed.",
"org.opensuse.base.disturl": "obs://build.opensuse.org/openSUSE:Factory/images/9964c6ceb7b36fad09fc97e1c3e7c0f8-opensuse-tumbleweed-image:docker",
"org.opensuse.base.lifecycle-url": "https://en.opensuse.org/Lifetime",
"org.opensuse.base.reference": "registry.opensuse.org/opensuse/tumbleweed:20250130.33.297",
"org.opensuse.base.source": "https://build.opensuse.org/package/show/openSUSE:Factory/opensuse-tumbleweed-image?rev=9964c6ceb7b36fad09fc97e1c3e7c0f8",
"org.opensuse.base.title": "openSUSE Tumbleweed Base Container",
"org.opensuse.base.url": "https://www.opensuse.org",
"org.opensuse.base.vendor": "openSUSE Project",
"org.opensuse.base.version": "20250130.33.297",
"org.opensuse.lifecycle-url": "https://en.opensuse.org/Lifetime",
"org.opensuse.reference": "registry.opensuse.org/opensuse/tumbleweed:20250130.33.297"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 10441316631,
"VirtualSize": 10441316631,
"GraphDriver": {
"Data": {
"LowerDir": "/data/docker/overlay2/dda2f0a96fe05938cca5a68b848a9e22477ca73fb8816fbc07a58ecfaf62678e/diff:/data/docker/overlay2/dbd971745de5020e9f2cbed990768ffb879777629207cee8460d7d2f5f4be10f/diff:/data/docker/overlay2/21cec1c3a2d8f38d425610fa18533cf5484f8c7d226906e8830cd78906b7e748/diff:/data/docker/overlay2/250c72625569a0bf01bd3bc489c94bdf258341d2086ad2a0ae84a3ca0fbe6998/diff:/data/docker/overlay2/4cd6af90a0ab3b901638ef31057910619f32b8b3504bde6d9ea3e764be4f3a50/diff:/data/docker/overlay2/44f6e4702ac120d455dbdec8334d97b79d2ee97865e10f8beefa4f9c42f95759/diff:/data/docker/overlay2/88f6af2d8a8151c6e781eebe9c2fd996a92e14616dc8670c8d48d3dd0a9c7cc7/diff:/data/docker/overlay2/b518f01c2f8c3c35ec18f0b24ccaf105dce33904c81e0e522f9c3902a105ce89/diff:/data/docker/overlay2/6d5b09afa4722b08bf2e14a891aec8ab8d89df998aea0dc94c3c194e106ca895/diff:/data/docker/overlay2/00a02f579c793d809e9c66a01777ac93b50cf756910c7df1f61975c6b6bb94a7/diff:/data/docker/overlay2/d7f92f2700e7e494f379453d958c102a5baaa0cfd54033d65d12d0e5d4d4c7ff/diff:/data/docker/overlay2/a9e4c44240e1196cfe20fdbdf88647da8c497e7532e1f2c9e1156392f4488371/diff:/data/docker/overlay2/b3b03d01c4a5a5edac94643c85f1cfdd03d05e84924a65854f9f35b240342b3b/diff:/data/docker/overlay2/d97de90b88051e21d506533358da06aea9a65f1e355b0edc837bed33f1fad49d/diff:/data/docker/overlay2/da6f5960fb0df701639cc8bb962bf62feb2581c667272860d7f57ae418fee6ad/diff:/data/docker/overlay2/8b4a0a8f018d641ef8a24e7af77cf7ddca97bde16daee08514d5a41866d9a19b/diff:/data/docker/overlay2/f37ab02d0d5dc42f0999dcafad078ee305ba30378ace0377b1ba364b49e36cd6/diff:/data/docker/overlay2/803850c2f35ab5efe6b105432949e70b70a450666685cf91c057991d13ad4d6b/diff",
"MergedDir": "/data/docker/overlay2/f05ca65ef21ac2f98d55c78bd7fdab425c6bb38293a3ade6bc4ab9a631ae5a75/merged",
"UpperDir": "/data/docker/overlay2/f05ca65ef21ac2f98d55c78bd7fdab425c6bb38293a3ade6bc4ab9a631ae5a75/diff",
"WorkDir": "/data/docker/overlay2/f05ca65ef21ac2f98d55c78bd7fdab425c6bb38293a3ade6bc4ab9a631ae5a75/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:927984fa387efeda12c6d00b78e2fdcba9c2874f85c101ab97a832fafa459f67",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:561bf950945bca5744f1cd2a7ab766ff0635665613ba83a1d6ec1120305e10a7",
"sha256:5b22c2b85adcb659eec068b1c914928d9e34e43a0a60fc5699ae4e56e6799906",
"sha256:19791dde977b0c9641a0836ab180722d639045fcd28f0b27f2cb3f1765e8d0e2",
"sha256:8eadb4c19c7d599bc85995192de04ce0ea4f8a6f27878cee9a1c566a62bea9ee",
"sha256:7a4a7d6987f76b145bfb99e152ae7e4817be4ac10a0eec23fb877de885fa8071",
"sha256:bf6054889874f04de906d68c46caf2feff203cc51725210c5fbfd86916446dfd",
"sha256:44a68f91b695a6f1c70f2ec013fd7e459588969af3bf2b1592b33e974f1c69b1",
"sha256:660f65bd380d6bb88ef96d59ec57d03c373fad22538a81ade599dc22c9ba8238",
"sha256:657c41a879c7ec8eaa5578bca0ab78ea3cca1c6633d890a47abf7697728a5a7f",
"sha256:3f233c8e2978980455f7e966157fa710e84ea40c1ff82a6e4d556632aa78cf49",
"sha256:148aeba8072c5456ae2cc7037d6ba02b8e895f2b2b4e4c0c81841def3818f9b6",
"sha256:71316654805b241900db5ee00cc22fdd01aa5aa60a832b3caffd976af47aca73",
"sha256:95e12d84f6ddf1643b21a2a3ef629b1ac38142160601a6eca1e696d1fa6f3dca",
"sha256:fe587cb0fab01cd2eef738a4a71873f1a27e697e935aec19ae4555313e2d9c37",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:63248977446ffd3b732c80b5371177d0ed6f0ff06ab0250ea9ac1a3febc0fce9",
"sha256:efc93a6c691307c091cd4587c57fc47ad539e6649ae8ea692151b97b30c28ce1"
]
},
"Metadata": {
"LastTagTime": "2025-02-08T09:47:31.147905043-05:00"
}
}
]