在 ComfyUI 单工作流中将不同模型分配到多块 GPU 加载
通过新增 Loader 节点携带 device 参数,把 checkpoint/CLIP/ControlNet/UNet/VAE 各自指向指定 GPU,规避单卡 VRAM 反复换入换出。
方案简介
ComfyUI-MultiGPU 是一个面向 ComfyUI 的实验性扩展,用于在单个 ComfyUI 工作流中使用多块 GPU。仓库自述其定位是「Rudimentary support for using multiple GPUs in a ComfyUI workflow」。
它通过新增一组带 device 参数的模型加载节点,让用户可以分别为每个模型指定要使用的 GPU,从而避免在工作流执行过程中频繁把模型在 VRAM 中换入换出。该扩展以 hacky 方式 monkey patch 了 ComfyUI 的显存管理逻辑,并非一个完备或经过充分测试的解决方案,使用需自行承担风险。
需要特别注意的是:它并未为 ComfyUI 增加真正的并行能力,工作流的各个步骤仍然按顺序执行,只是分别运行在不同的 GPU 上。任何潜在的速度提升都来自于「不必持续地从 VRAM 中加载和卸载模型」这一收益,而非并行加速。
亮点与能力
- 新增多 GPU 加载节点:扩展提供了一组与默认加载节点功能相同、但额外携带
device参数的新 Loader 节点,可逐个模型指定使用哪一块 GPU。 - 多种模型类型支持:覆盖 ComfyUI 流程中最常见的几类模型加载场景,包括 checkpoint 主模型、CLIP 文本编码器、ControlNet、Dual CLIP、UNet 与 VAE。
- 多模型并存能力:借助多块 GPU 的显存总和,可在同一工作流中同时持有多个模型,而无需在执行过程中反复卸载。
- 跨 GPU 拆分大模型:示例中演示了把 FLUX.1-dev 这类较大模型的不同子模块(UNet、文本编码器、VAE)拆分到两张 GPU 上的用法。
- 多模型混搭工作流:可以在同一个工作流中混合不同体系的模型,例如 FLUX.1-dev 与 SDXL 并存,分别加载到不同 GPU。
组成与分工
- ComfyUI:宿主平台,所有新增节点都运行在 ComfyUI 工作流之中,并复用其原有节点体系。
- ComfyUI-MultiGPU(本扩展):在
ComfyUI/custom_nodes/下以插件形式存在,通过 monkey patch 修改 ComfyUI 的显存管理逻辑,并注册一组新的 Loader 节点。 - CheckpointLoaderMultiGPU:用于加载主模型(checkpoint)的多 GPU 版本,对应默认 CheckpointLoader。
- CLIPLoaderMultiGPU / DualCLIPLoaderMultiGPU:用于加载 CLIP 文本编码器(含 DualCLIP)的多 GPU 版本。
- ControlNetLoaderMultiGPU:用于加载 ControlNet 模型的多 GPU 版本。
- UNETLoaderMultiGPU:用于单独加载 UNet(如 FLUX.1-dev 的 UNet)的多 GPU 版本。
- VAELoaderMultiGPU:用于加载 VAE 的多 GPU 版本。
- SDXL / FLUX.1-dev 等模型:示例工作流中实际承载的多模型组合,证明该扩展能在同一流程里处理多类生成模型。
- NVIDIA GPU(多块):扩展依赖的多块 GPU 物理载体,原文示例已在「2x 3090 setup」上完成验证。
前置要求
- 需要一个已安装并可正常运行的 ComfyUI 环境。
- 系统中应安装有至少两块 NVIDIA GPU(README 中给出的实测环境为 2 张 3090)。
- 需要相应模型的 checkpoint、CLIP、ControlNet、UNet、VAE 等本地文件已就位,以便新节点加载使用。
- 安装命令:将本仓库克隆到 ComfyUI 的自定义节点目录下:
Clone this repository inside `ComfyUI/custom_nodes/`.
(即在 ComfyUI/custom_nodes/ 目录中执行 git clone 拉取本仓库。)
实施步骤
1. 准备 ComfyUI 环境
确保已经有一个能正常运行的 ComfyUI 安装,并确认系统识别到多块 GPU。README 中的示例工作流均在 2x 3090 的环境下完成测试。
2. 安装扩展
进入 ComfyUI 的 custom_nodes 目录,把本仓库克隆进去:
Clone this repository inside `ComfyUI/custom_nodes/`.
3. 重启 ComfyUI 并确认新节点出现
启动(或重启)ComfyUI,使其加载 custom_nodes/ 中的扩展。扩展会注册一组新的 Loader 节点,它们的功能与默认 Loader 一致,并额外带有一个 device 参数。
4. 在工作流中使用新的多 GPU Loader 节点
用扩展提供的 CheckpointLoaderMultiGPU、CLIPLoaderMultiGPU、ControlNetLoaderMultiGPU、DualCLIPLoaderMultiGPU、UNETLoaderMultiGPU、VAELoaderMultiGPU 替换(或对应增加)默认的 Loader 节点,并在每个节点的 device 参数处填入希望使用的 GPU。
5. 选择或构造示例工作流
仓库自带三种示例工作流,可直接打开参考:
- 在两张 GPU 上分别加载两个 SDXL checkpoint;
- 把 FLUX.1-dev 拆分到两张 GPU(UNet 在 GPU 0,文本编码器和 VAE 在 GPU 1);
- 在同一个工作流中同时跑 FLUX.1-dev(GPU 0)和 SDXL(GPU 1)。
6. 运行工作流
按通常方式在 ComfyUI 中执行该工作流即可。注意流程本身仍是顺序执行的,速度提升主要来自避免反复加载/卸载模型。
使用与配置要点
日常使用时的核心要点是:在工作流中用本扩展提供的多 GPU Loader 节点替换默认 Loader 节点,并通过新增的 device 参数把不同模型分配到不同 GPU。
- 为 checkpoint 指定 GPU:使用
CheckpointLoaderMultiGPU,设置device选择目标 GPU。仓库示例工作流中,第一张 checkpoint 加载在 GPU 0,第二张加载在 GPU 1。 - 拆分 FLUX.1-dev 到两张 GPU:使用
UNETLoaderMultiGPU等节点把 UNet 放到 GPU 0,而文本编码器和 VAE 放到 GPU 1。 - FLUX.1-dev 与 SDXL 同流程混用:把 FLUX.1-dev 加载到 GPU 0,SDXL 加载到 GPU 1,便可在同一工作流中并存。
验证方式:执行工作流时观察每张 GPU 上的显存占用与模型加载情况是否符合预期;如出现异常,可附上工作流到 issue 中求助。
注意事项与常见问题
- 非并行执行:扩展不提供真正的并行加速,工作流步骤依然按顺序执行,只是分布在不同 GPU 上。任何速度提升来自避免反复换入换出模型,而非并行化。
- 属于 hacky 方案:实现方式是对 ComfyUI 显存管理做 monkey patch,并非完备或经过充分测试的解决方案,使用需自行承担风险。
- 示例环境:仓库中的工作流均在 2x 3090 上测试,其他多卡配置(型号/显存大小/驱动)可能需要自行验证。
- 故障排查:遇到问题可在仓库 issue 区提交,并尽量附上对应的工作流文件以便作者排查。
- 作者与商业联系:作者为 Alexander Dzhoganov,商业咨询邮箱为 sales@neuratech.io,官网 neuratech.io。
优缺点
- ✓ 减少模型反复加载卸载
- ✓ 可同时在多卡持有多个模型
- ✕ 非并行、流程仍串行执行
- ✕ hacky 方式 monkey patc
出处
本方案挖掘自开源项目 neuratech-ai/ComfyUI-MultiGPU,方案内容与实施命令均来自其 README 原文。
本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。