将ComfyUI工作流分布到多GPU/多台机器上并行生成图像
多个ComfyUI实例经HTTP通信,主实例分发队列并取回远程生成图像,实现横向扩展
方案简介
ComfyUI_NetDist 是一个 ComfyUI 自定义节点包,用于把 ComfyUI 工作流运行在多块本地 GPU 或多台联网机器上。它解决的痛点是:单张 GPU 生成速度有限时,可以通过多实例协作来并行出图。适合拥有 2 张 GPU 的单机用户,或拥有多台带 GPU 的 PC 的用户。安装只需 requests 一个外部依赖,将仓库克隆到 custom_nodes 目录即可。项目提供简单(双 GPU/双机)和高级(多 GPU、工作流 JSON 输入)两种使用模式。
亮点与能力
- 本地远程控制:用同一套工作流控制本地与远程 ComfyUI 实例
- 简单双 GPU 模式:仅需两个节点即可工作
- 可设置本地/远程 batch size,以及节点触发时机
- 简多多机模式:串联多个 simple queue 节点扩展机器数
- 高级模式:支持每批次覆写、默认 batch size、以工作流 JSON 作为输入
- LoadImageUrl/SaveImageUrl 节点支持通过 URL 加载/上传图像
- 远程 latent 传输:以
.npy文件保存/加载 latent,跨实例传递
组成与分工
- ComfyUI:核心生图框架,需要在每台机器上运行至少一个实例
- requests 库:唯一外部 Python 依赖,用于节点间 HTTP 通信(如 SaveImageUrl 发送 POST 请求)
- Git:用于将仓库克隆到 ComfyUI 的 custom_nodes 文件夹完成安装
- FetchRemote / QueueRemote 等自定义节点:分发任务与取回远程图像
- LoadImageUrl / SaveImageUrl:以 URL 方式跨实例传输图像(base64 PNG,JSON POST)
前置要求
- 至少两个不同的 ComfyUI 实例(可以是同一台机器上的两块 GPU,也可以是两台 PC)
- Python
requests库,安装命令:
bash
pip install requests
- 将插件克隆到 custom_nodes 目录:
bash
git clone https://github.com/city96/ComfyUI_NetDist ComfyUI/custom_nodes/ComfyUI_NetDist
- 若远程实例在另一台 PC 上,需要添加
--listen启动参数并配置正确的远程 IP。
实施步骤
1. 安装依赖并克隆插件
bash
pip install requests
bash
git clone https://github.com/city96/ComfyUI_NetDist ComfyUI/custom_nodes/ComfyUI_NetDist
2. 启动多个 ComfyUI 实例
在同一台机器用不同 GPU 启动两个实例,分别指定端口和 CUDA 设备:
--port 8288 --cuda-device 1
README 建议第二个实例使用 --port 8288 --cuda-device 1。
3. 跨机器部署(可选)
若第二个实例在另一台 PC,启动参数中加 --listen,并在该机器上用 ipconfig(Windows)或 ip a(Linux)查看 IP,填入远程地址。
4. 搭建工作流
- 简单双 GPU:只需两个节点;可设置本地/远程 batch size 和触发时机(若节点未执行,可将触发设为 'always')
- FetchRemote('Fetch from remote')节点接收图像输入,该输入应是希望从第二个实例取回的最终图像,不要把它路由回自身;该节点会等待第二张图像生成完成(当前无预览/进度条)
- 高级模式:参考 NetDistAdvancedV2. 工作流,可使用工作流 JSON 作为输入,最终图像可设为 "any"
5. 远程图像/latent 传输(可选)
- SaveImageUrl 向目标 URL 发送包含图像的 JSON POST 请求,值为 base64 编码 PNG
- latent 可保存为
.npy文件,另一个实例通过文件名 URL 加载,LoadLatentNumpy 也支持 safetensor latents 和 sd_scripts 的 npz 缓存文件
使用与配置要点
- 双 GPU 模式下可分别设置 local/remote batch size
- 节点触发时机可调整:如果修改了采样器设置但没改种子导致节点没执行,把触发设为 'always'
- 多机扩展时若复用种子可能出现重复图像,建议两端种子都设为 randomized
- 远程图像服务器端注意:文件名在批次间不保证唯一(因为不在服务器本地保存),需要在服务端处理;服务器不写盘
- 高级模式工作流最终图像设为 "any" 时可不依赖 FetchRemote 节点;触发可用一张空白假图像输入
注意事项与常见问题
- 不要从同一客户端向同一远程 worker 多次排队同一工作流
- 项目自嘲目前运行不够流畅:~~Expect this to work smoothly.~~
- FetchRemote 等待第二张图生成时没有预览/进度条
- 已知边界问题:Linux 控制 Windows 时存在
os.sep不匹配,尚在 Roadmap 中待修复 - 多个独立图像输出节点的处理、静态工作流的更好编辑方式也在 Roadmap 中
- SaveImageUrl 不保证文件名跨批次唯一,需服务端自行处理
优缺点
- ✓ 两节点即可组网
- ✓ 支持跨机器扩展
- ✕ 无预览进度条
- ✕ 种子复现可能重复图
出处
本方案挖掘自开源项目 city96/ComfyUI_NetDist,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。