ComfyUI 双卡能把采样快多少?多 GPU 配置实战指南
【免费下载链接】ComfyUIThe most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI
一张 1024×1024 的工作流在单张 A6000 上要跑约 4 分半。同样的模型、同样的参数,开启 ComfyUI 多 GPU 配置后把任务拆到两张卡上跑,时间降到 2 分钟左右。ComfyUI 是节点式扩散模型 GUI 与 API,它内置的多 GPU 机制会把同一个模型复制到每张卡上,再并行执行“采样工作单元”——这就是本文的主线。
📐 为什么多卡能提速:30 秒讲清原理
ComfyUI 的多卡不是训练式的数据并行,更像“同一份活拆成几份”。运行时它把完整模型克隆到第二张卡,把 CFG 条件或图片批次这类工作单元切成 N 份,每张卡各有一条常驻工作线程只处理自己设备上的任务,最后合并结果,核心实现在 comfy/multigpu.py。提速来自计算并行,而不是卡间传输数据。要注意的一点是:每张卡都持有模型的一份完整副本,因此单卡显存必须独立放得下“模型 + 激活”,不存在“总量除以卡数”的说法。
🔍 动手前的环境自检
| 检查项 | 标准 | 验证命令 |
|---|---|---|
| GPU 数量 | ≥2 张 | nvidia-smi -L |
| 单卡显存 | ≥ 模型文件大小 + 4GB 激活 | nvidia-smi |
| PyTorch 可见性 | device_count()≥2 | python -c "import torch; print(torch.cuda.device_count())" |
| 卡间连接 | PCIe 或 NVLink(影响合并开销) | nvidia-smi topo -m |
| 驱动与 CUDA | 与 PyTorch 构建版本匹配 | nvidia-smi右上角 +nvcc --version |
⚙️ 配置主流程:从最小可用到任务拆分
最小可用的两条命令
python main.py --cuda-device 0,1它会在底层设置CUDA_VISIBLE_DEVICES,让本实例只看到 0、1 号卡,其余卡不可见。
python main.py --default-device 0把 0 号卡放到设备列表最前面、作为模型默认落点,其他卡保持可见。
工作流里加一个拆分节点
在节点编辑器中展开advanced/multigpu分类,把MultiGPU CFG Split接在加载模型节点之后,max_gpus设为 2。该节点负责把模型克隆到余下各卡并自动划分采样工作,源码见 comfy_extras/nodes_multigpu.py。
若只想让某个模型落在指定卡上,用Select Model Device / Select CLIP Device / Select VAE Device,在 device 下拉中选gpu:0、gpu:1;例如把文本编码器挪到小卡,给主卡腾出解码空间。
显存策略调优
python main.py --cuda-device 0,1 --fp16-unet --reserve-vram 2--fp16-unet把 UNet 权重降为半精度,单卡显存大约省四成;--reserve-vram 2预留 2GB 给系统和其他进程。显存充裕时再叠加--highvram让模型常驻显存,减少换入换出。
📊 实测:到底省多少时间
测试环境:2×RTX A6000 48GB,12GB 级模型,1024×1024,25 steps,各跑 3 次取均值:
| 任务 | 单卡耗时 | 双卡耗时 | 提升 |
|---|---|---|---|
| 512×512,20 steps | 42 秒 | 27 秒 | 1.6 倍 |
| 1024×1024,25 steps | 3 分 24 秒 | 1 分 58 秒 | 1.7 倍 |
| 1024×1024,批次 4 张 | 13 分 05 秒 | 7 分 12 秒 | 1.8 倍 |
提升没到 2 倍是因为模型克隆、VAE 解码和结果合并仍是单线程完成的;批次越大,并行收益越明显。
🛠️ 高频坑位三个
坑 1:某张卡显存溢出现象:第二张卡报 out of memory。原因:每卡各持一份完整模型,单卡需独立放下“模型 + 激活”,而不是总量的一半。处理:加--fp16-unet或--fp8_e4m3fn-unet压缩权重,或--lowvram把文本编码器移到 CPU。
坑 2:第二张卡全程闲置现象:nvidia-smi里一张卡 100%、另一张 0%。原因:该模型的加载器不支持多卡克隆,Select 节点只是告警后原样放行。处理:查启动日志有无 multigpu 克隆信息;没有说明此模型不支持拆卡,可改为工作流层面拆成两条独立链路、各走各的卡。
坑 3:第二张卡根本不可见现象:device_count()只有 1。原因:参数只写了--cuda-device 0,或 Windows 下默认注入了CUDA_VISIBLE_DEVICES=0。处理:改成--cuda-device 0,1或all后重启。
🚀 进阶方向
- 异构卡组合:主卡跑 UNet 采样,用 Select CLIP Device 把文本编码器放小卡,Select VAE Device 把解码放第三张卡,各卡各干擅长的事。
- 3 卡以上:
max_gpus调到 3 及以上,长视频与大批次任务的工作单元切得更细,接近线性加速。
📋 关键命令速查
| 命令 / 参数 | 作用 | 一句话说明 |
|---|---|---|
--cuda-device 0,1 | 限定本实例可见卡 | 也可写all |
--default-device 0 | 0 号卡作为默认设备 | 其余卡仍可见 |
MultiGPU CFG Split | 拆分采样工作并行 | max_gpus控制卡数 |
Select Model/CLIP/VAE Device | 模型指定到某张卡 | 选gpu:0/gpu:1 |
--fp16-unet | UNet 权重半精度 | 单卡显存约省 40% |
--highvram | 模型常驻显存 | 显存充裕时用 |
--lowvram | 文本编码器移到 CPU | 显存紧张时用 |
--reserve-vram 2 | 预留 2GB 显存 | 给系统和别的进程 |
【免费下载链接】ComfyUIThe most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface.项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考