ComfyUI 性能与显存¶
一、这页讲什么¶
同一台机器,出图能不能跑完,多数时候差在显存。这一页给出一个固定的处理顺序:先确认显存被谁占着,再降参数,再换模型,最后才动启动参数。
读完能做到:判断一次失败是显存不够还是别的错;按代价从低到高依次尝试;说明每个启动参数改变了什么。
二、开始之前¶
| 项 | 内容 |
|---|---|
| 版本与日期 | ComfyUI 2026-10 最新版;2026-10-21 核实 |
| 预计耗时 | 20 分钟 |
| 前置 | 02-第一次出图与界面完成,出过图 |
| 风险级别 | 低:只改启动参数与出图设置 |
三、动手做¶
1. 先量,再看报错¶
$ nvidia-smi --query-gpu=memory.used,memory.total --format=csv
memory.used [MiB], memory.total [MiB]
23100 MiB, 24564 MiB
出图失败时,先复制控制台里那段报错。CUDA out of memory 是显存不够;Error occurred when executing 后面跟别的名字,是节点或模型的问题,不要按显存调。
看到这个就算成:能说出失败那一刻显存用了多少、是谁占着。数字接近总容量才是显存问题。
2. 降分辨率与批大小¶
在空 latent 节点上调:宽高各减一半,面积就是四分之一,显存与耗时都跟着降。批量出图先把 batch 调回 1。
看到这个就算成:同样的工作流,降一半分辨率后能跑完,且结果构图不变。
3. 换更省显存的模型¶
同类模型有 fp8、量化版、蒸馏版。整包模型体积小一半,显存占用也明显下降。换模型要同时确认工作流里加载器与采样器参数适配。
看到这个就算成:换小模型后能跑完,nvidia-smi 峰值比之前低一截。
4. 调启动参数¶
| 参数 | 改变什么 | 什么时候用 |
|---|---|---|
--reserve-vram <GB> |
给系统和别的程序留出显存 | 机器上还跑着别的服务 |
--lowvram |
把文本编码器放到 CPU;开启动态显存调度时无效 | 老版本、显存很紧 |
--novram |
比 lowvram 更激进,必要时才用 | 出图能跑、但极慢可接受 |
--disable-smart-memory |
更积极地把模型挪回内存,不留在显存 | 显存被缓存占着不放 |
--highvram |
模型常驻显存,速度优先 | 独占机器、显存充裕 |
--cuda-device 0,1 |
指定可见的卡 | 多卡机器只想用其中一张 |
便携版改 run_nvidia_gpu.bat 里的启动行。
看到这个就算成:改一个参数、重启、再跑同一张图,能说出哪一项指标变了。
5. 释放显存¶
出图结束后显存不一定会立刻降回来,模型缓存还在。释放的方式:换一个工作流跑一次空任务,或直接重启服务。别指望 nvidia-smi 里立刻归零。
看到这个就算成:重启服务后 nvidia-smi 的已用显存明显回落。
6. 共享机器上的约定¶
先确认显存是不是别人的:nvidia-smi --query-compute-apps=pid,used_memory --format=csv 看到陌生 PID 就不是自己的问题。长时间占满整卡的任务先在群里报备。
看到这个就算成:遇到「莫名其妙跑不动」时,第一反应是查占用者而不是调参数。
四、做完怎么确认¶
- 同一张图能稳定跑完,不再 OOM。
- 能说出这次调的是显存、分辨率还是模型,以及各自的代价。
nvidia-smi显示的占用与自己的工作流对得上。- 知道释放显存要重启服务或换任务,而不是等数字自己掉。
五、卡住了怎么排查¶
| 症状 | 多半是 | 先验证 | 处理 |
|---|---|---|---|
| 采样到一半 OOM | 分辨率或批大小超出;或别人同时占了显存 | $ nvidia-smi --query-compute-apps=pid,used_memory --format=csv |
降分辨率、批大小;确认没有别的进程 |
| 第一次跑很慢,后面变快 | 模型首次加载进显存 | 看两次的耗时与显存曲线 | 正常现象,预热即可 |
| 系统内存被吃满、开始换页 | 用了 --novram,模型被推到内存 |
$ free -h |
加内存或改回 lowvram;别在低内存机器上用 novram |
| 多卡机器只用了一张 | 默认只用第一张,或参数限制 | $ nvidia-smi -L、启动参数 |
--cuda-device 指定;推理任务单卡通常够用 |
| 显存占了不释放 | 缓存策略保留模型;或有别人的进程 | 重启服务后再看 | 重启;或加 --disable-smart-memory |
| 改了参数没效果 | 参数加在了错的 bat 文件,或没重启 | 看启动日志里带没带这个参数 | 改对 bat;重启服务 |
六、为什么这样能成¶
显存里放三样东西。 模型权重、中间激活、latent。降分辨率同时压低后两样,换小模型压低第一样,代价从小到大正好是这个顺序。
动态显存调度决定参数是否生效。 新版本默认开启动态调度,按需把模型搬进搬出,--lowvram 这类老办法因此不再起作用;真正还能调的是预留量与缓存策略。
缓存换速度。 模型留在显存里,下一次加载不用重新读盘,这就是 --disable-smart-memory 能省显存却变慢的原因。
七、边界与替代¶
- 不做训练与微调:显存优化在训练侧是另一套方法(梯度检查点、ZeRO),不在本页。
- 不追跑分:本页目标是跑得完、跑得稳,不是把速度压到极限。
- 驱动与 CUDA 问题另看:GPU 与 CUDA 环境 处理版本对不上的报错。
- 共享卡不是私有卡:默认假设别人也在用,先查再调。
八、官方资料¶
- 启动参数全表:https://docs.comfy.org/development/comfyui-server/startup-flags
- 系统要求:https://docs.comfy.org/installation/system_requirements
- 排查手册:https://docs.comfy.org/troubleshooting
- 官方教程(含显存相关说明):https://docs.comfy.org/tutorials/basic/text-to-image
核实日期:2026-10-21。