跳转至

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 就不是自己的问题。长时间占满整卡的任务先在群里报备。

看到这个就算成:遇到「莫名其妙跑不动」时,第一反应是查占用者而不是调参数。

四、做完怎么确认

  1. 同一张图能稳定跑完,不再 OOM。
  2. 能说出这次调的是显存、分辨率还是模型,以及各自的代价。
  3. nvidia-smi 显示的占用与自己的工作流对得上。
  4. 知道释放显存要重启服务或换任务,而不是等数字自己掉。

五、卡住了怎么排查

症状 多半是 先验证 处理
采样到一半 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 环境 处理版本对不上的报错。
  • 共享卡不是私有卡:默认假设别人也在用,先查再调。

八、官方资料

核实日期:2026-10-21。