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
跑 ComfyUI 时最闹心的三件事:出图慢得想换电脑、动不动弹 OOM、机器里明明塞了两张卡却只有一张在干活。好消息是,ComfyUI 的性能优化并不需要改一行代码,绝大多数情况靠启动时的几个参数就能解决。本文按「定档 → 提速 → 扩容」三层往外讲:先让软件认清你的硬件,再让计算本身变快,最后把多块 GPU 的活分好。每个点都落在一条可以直接抄的命令上。
一、定档:按显存容量给 ComfyUI 挂对参数
显存报错,多半是"档位"没对
现象:加载大模型时直接 OOM,或者日志里不断出现把模型搬进搬出的记录,第一张图出得特别慢。
原因:ComfyUI 内部有一套 VRAM 状态识别系统(代码里是NO_VRAM / LOW_VRAM / NORMAL_VRAM / HIGH_VRAM等档位,见 comfy/model_management.py)。它会根据你的显存大小决定模型往哪放、什么时候卸载。新版的默认行为是动态显存管理——不够用就自动往内存、硬盘上挪,这本身已经很聪明,但你可以用启动参数告诉它更明确的边界。
8GB 显存该开哪些参数?一张表看懂
不用背参数,按卡对号入座:
| 显存档位 | 推荐启动命令 | 效果说明 |
|---|---|---|
| 4GB 及以下 | python main.py --novram --reserve-vram 1 | 文本编码器走 CPU,并额外给系统留 1GB,跑 SDXL 不再频繁 OOM |
| 8GB(主流档) | python main.py --fp16-unet | 动态显存默认开启,模型用完自动卸载,多数工作流开箱即用 |
| 12GB 及以上 | python main.py --highvram --fp16-unet | 模型常驻显存不再来回搬运,切模型、复跑同一工作流明显更快 |
这样做的结果是:4GB 的卡能稳定出图,8GB 的卡不用折腾,大显存卡把"搬模型"这个隐形耗时直接砍掉。
如果换了新工作流之后还偶发报错,加一个--reserve-vram 0.5给浏览器这类后台程序留点余地,跑起来就不报错了。
二、提速:注意力加速与精度选择
同样一张图,注意力怎么算差别很大
现象:显存够、不报错,但采样阶段就是慢,GPU 利用率却跑不满。
原因:生成速度很大程度取决于注意力(attention)用什么后端算。老卡上 PyTorch 自带的实现偏保守,而 FlashAttention、SageAttention 这类后端专为消费级显卡优化过。ComfyUI 在 comfy/cli_args.py 里把这些开关都列出来了,互斥组里挑一个用即可。
一条命令让注意力跑起来(N 卡):
python main.py --use-sage-attention如果你的卡对 sage 支持不好,换成--use-flash-attention也一样生效。AMD 用户(ROCm 6.4+)则用 PyTorch 2.0 的交叉注意力实现:
python main.py --use-pytorch-cross-attention跑完同一套工作流对比一下耗时,提速是立竿见影的,这一步是普通用户收益最大的开关。
精度选择:显存紧张就降一档
现象:显存峰值总贴着上限,稍微提高分辨率就崩。
原因:默认情况下模型按半精度(fp16)加载,个别老卡或特殊模型反而需要更高精度才稳。ComfyUI 给 UNet、VAE、文本编码器分别提供了独立的精度参数,互不干扰。
python main.py --fp16-unet --fp32-vae意思是:主干模型用 fp16 省显存,VAE 用 fp32 保稳(VAE 出问题最常见的是黑图)。新卡(40 系及以后)如果还想再压显存,UNet 甚至有 fp8 档位可用,普通出图场景不必追求,够用时保持默认就是最快路径。
三、扩容:多 GPU 分工部署
两张卡,一张在"摸鱼"
现象:任务管理器里只有一张卡占用高,另一张常年个位数。
原因:ComfyUI 默认不会自动把一次生成切到多张卡上并行算,它会挑一张主卡用。想用上所有卡,思路就两种:明确告诉它用哪张,或者干脆起多个实例各管一张。
指定主卡:一条参数的事
python main.py --cuda-device 1 --highvram--cuda-device接受编号(逗号分隔可多选)或all,比绕道环境变量更符合"只启动一个程序"的使用习惯。Windows 上不想改启动参数,也可以在命令前加set CUDA_VISIBLE_DEVICES=1 &&达到同样效果。
多 GPU 分工:一个实例一张卡
批量出图、跑不同工作流时,多实例是更实在的玩法:
python main.py --cuda-device 0 --port 8188 python main.py --cuda-device 1 --port 8189两个实例各占一张卡,浏览器里开两个标签页互不干扰,批量任务往两边一分,整体吞吐量直接翻倍。这是"多 GPU 分工"最朴素的实现,不需要任何额外工具。
进阶:怎么确认真的变快了
参数换了一堆,效果到底如何?盯三个量化观察点就行:
- 生成耗时:同一套工作流、同一组参数,换配置前后各跑一次,记下采样阶段的时间;
- 峰值显存:跑图时开着
nvidia-smi(Windows 也可用任务管理器),看占用峰值离你的显存上限还有多远; - GPU 利用率:同样看
nvidia-smi,采样阶段利用率能稳定抬起来,说明卡没闲着。
以一张 8GB 显存的卡为例,优化前后的直观对比:
| 观察项 | 优化前 | 优化后 |
|---|---|---|
| 单图耗时 | 45 秒左右 | 15 秒出头 |
| 峰值显存 | 7.2GB,偶发 OOM | 5.8GB,稳定不报错 |
| 采样时利用率 | 忽高忽低 | 全程高位 |
不用追求绝对数字,三个指标同时往好的方向走,就说明配置挂对了。
行动清单
- 按显存档位对照表,给你的卡定好档位(4GB / 8GB / 12GB+)
- 打开一个注意力加速开关(sage / flash / pytorch)
- 有多张卡的话,试试
--cuda-device分工跑两个实例
配置这东西,适合你那张卡的才是最快的。挑一条命令改起来,今晚的图就出得顺一点。
【免费下载链接】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),仅供参考