显存不够最常见的两种反应都不划算:一种是直接放弃,另一种是到处抄「神秘加速参数」。正确的顺序是三步:先测量,再改精度与参数,最后改出图策略(降分辨率、分块解码、两步放大)。这篇把每一步拆成可执行的命令和参数名;所有「可跑」判断都标了是经验起点,请用第一节的方法在你自己的机器上复核,我在这里不编造跑分数字。
一、先学会测量:三个数字决定一切
1.1 单次耗时(改动前后对比的基准)
跑完一次任务后,ComfyUI 控制台会打印一行形如:
Prompt executed in 12.34 seconds
注意两点:第一次运行包含模型加载,明显偏慢,要用同一工作流连跑两次、取第二次的数值;显存不足时程序会在显存与内存之间反复换页,这个数字会成倍上涨,所以耗时也是判断「有没有触发低显存路径」的间接指标。
1.2 显存峰值(判断会不会 OOM 的关键)
开一个命令行窗口,运行下面这条,让 memory.used 每秒刷新一次,再切回 ComfyUI 出图,盯着数值的最高点:
nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu --format=csv -l 1
按 Ctrl + C 停止刷新。也可以用 nvidia-smi dmon -s u -d 1,或者最简单的:任务管理器 → 性能 → GPU → 「专用 GPU 内存」曲线。判断标准:
- 峰值稳定在总显存 80% 以内:安全,可以尝试提分辨率或批量。
- 峰值贴着 95% 且耗时忽高忽低:随时会 OOM,先降一档再谈速度。
- 还不够直观就再看控制台:显存紧张时日志会打印模型的加载/卸载方式,出现「未能完整放入显存、部分在内存里运行」之类的提示,就说明已经到了需要调参的区间。
1.3 记录表:一次只改一个变量
固定模型、提示词、种子、步数,只改一个参数,每项跑 3 次取中位数,填进下面这张表。这是后面所有判断的依据:
| 组合 | 分辨率 / 批量 | 启动参数或精度 | 耗时(3 次中位数) | 显存峰值 | 是否报错 |
|---|---|---|---|---|---|
| 基准组 | 1024×1024 / 1 | 默认 | |||
| 对照组 A | 1024×1024 / 1 | 加 --fp8_e4m3fn-unet |
|||
| 对照组 B | 768×768 / 1 | 默认 |
二、启动参数:什么时候用哪一个
以下参数名与官方说明一致;官方明确写了一句关键前提:在启用动态显存管理的情况下,--lowvram 不产生效果,所以不要把它当万能开关,先测再加。
| 参数 | 官方作用 | 什么时候用 |
|---|---|---|
--lowvram |
显存不足时把文本编码器等放到 CPU 上处理(动态显存开启时无效果) | 8G 以下、跑 SDXL 或大模型时先试这一档 |
--novram |
在 lowvram 仍不够时的最低显存模式 | 4~6G 显存、或 8G 跑大模型勉强不报错但极慢时 |
--cpu |
全部用 CPU 运算(极慢) | 只作为「核显机器验证流程可用性」的兜底,不适合日常出图 |
--highvram |
用过的模型保持在显存里,不卸载回内存 | 24G 级别、频繁切换同一模型时减少重复加载 |
--gpu-only |
全部放在显卡上(含文本编码器) | 显存充足、追求最快速度时 |
--reserve-vram 2 |
为系统和其他软件保留指定 GB 显存 | 一边出图一边开浏览器/直播软件,防止系统被挤爆 |
--disable-smart-memory |
更激进地把模型卸载到内存,而不是留在显存 | 出现「显存碎片导致的随机 OOM」时优先试 |
--cache-none |
不缓存节点结果,每次重新执行(更省内存/显存,更慢) | 改一个参数要重跑整条链、显存又紧的时候 |
--cache-lru 10 |
按 LRU 缓存最近 N 个节点结果 | 反复微调提示词、想省重复计算的时间 |
--preview-method none |
关闭采样过程中的预览 | 低显存机器省一点开销;默认就是 none |
--async-offload |
异步权重换出(NVIDIA 上默认启用) | 一般不用手动加;老版本显卡上出现换页卡顿时可显式开启或指定流数量 |
--disable-mmap / --mmap-torch-files |
关闭/启用内存映射加载模型 | 内存吃紧、加载模型时系统卡死时调整 |
写参数的两种方式——便携版用记事本编辑启动脚本,源码安装直接跟在命令后面:
# 便携版:编辑 run_nvidia_gpu.bat,把参数加在最后
.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build --lowvram --reserve-vram 1
# 源码 + venv 安装
python main.py --lowvram --reserve-vram 1
三、精度选项:先默认,再 fp8,最后才动 VAE
| 参数 | 官方作用 | 使用建议 |
|---|---|---|
--fp16-unet |
扩散模型以 fp16 运行 | 大部分 N 卡默认即接近此档,显存吃紧时可以显式指定 |
--bf16-unet |
扩散模型以 bf16 运行 | 较新架构(RTX 30 系及更新更稳妥)优先试,数值更稳 |
--fp8_e4m3fn-unet |
UNet 权重以 fp8(e4m3fn)存储 | 显存不够时的主力降档手段,代价是细节轻微损失,务必用记录表对比 |
--fp8_e5m2-unet |
UNet 权重以 fp8(e5m2)存储 | 另一种 fp8 存储格式,效果因模型而异,两个都试 |
--force-fp16 |
全局强制 fp16(同时等于开启 fp16-unet) | 老卡(图灵及更早)上的常见提速档 |
--fp32-vae / --bf16-vae |
VAE 用 fp32 / bf16 精度运行 | 解码阶段报 OOM 但不想降分辨率时的折衷 |
--fp16-vae |
VAE 以 fp16 运行,官方标注可能导致纯黑图 | 只用在你确认过效果的机器上;一旦出现黑图,先把这个参数去掉 |
--cpu-vae |
VAE 放在 CPU 上运算 | 最后手段:解码阶段 OOM、又不接受画质下降时,用时间换显存 |
--fp8_e4m3fn-text-enc / --fp8_e5m2-text-enc |
文本编码器以 fp8 存储 | Flux 这类带大文本编码器的模型,显存大户往往是它而不是 UNet |
决策顺序建议:默认 → 降分辨率或批量 → 换 bf16/fp16 → UNet 上 fp8 → 文本编码器上 fp8 → cpu-vae。VAE 相关参数放在最后,因为它们直接影响出图正确性(黑图、颜色偏移),排查成本最高。
四、注意力实现:SDP 是默认,xformers 已经不是必需品
--use-pytorch-cross-attention:使用 PyTorch 2.0 的交叉注意力实现。新版 ComfyUI 的依赖清单里已经不含 xformers,默认走的就是 PyTorch 原生注意力,多数情况下你不需要装任何额外加速库。--disable-xformers:显式关闭 xformers。如果装过 xformers 又怀疑它导致报错或画质问题,用这个参数对照一次即可。--use-flash-attention/--use-sage-attention:需要另行安装对应库,且有显卡架构与版本要求;装上后是提速还是拖慢,取决于模型、分辨率与版本,必须实测。- 「No module named xformers」这类报错基本来自老插件,不是 ComfyUI 核心;按报错速查表处理,不要为了一个插件把整个环境折腾坏。
五、分块解码(tiled VAE)与两步出图
显存主要爆在三个时刻:加载权重、采样时的注意力计算、VAE 解码。最后一个是高分辨率玩家最容易忽略的。对策有两种:
- 用 VAE Decode (Tiled) 节点替换普通 VAE Decode。它是官方核心节点(显示名
VAE Decode (Tiled)),参数:tile_size默认 512、overlap默认 64,视频 VAE 另有temporal_size/temporal_overlap。tile_size 越小越省显存但越慢,出现接缝时把 overlap 调大。补充一句:当普通 VAE Decode 因显存不足失败时,新版 ComfyUI 会自动改用分块实现重试——所以如果你在日志里看到自动重试,说明已经到了该换节点的边缘。 - 改出图策略:低分辨率出图 + 放大。先用 512(SD1.5)或 1024(SDXL / Flux)把构图定下来,再用放大模型或二次采样放大。这条路线在 8G~12G 显卡上比重试一次性出大图的时间成本低得多。
六、按显存档位的经验起点表
先看这条声明:下表是「起点」而非保证值,用于帮你少试几次错。含义约定:可跑 = 该档基础分辨率、批量 1、常规 20~30 步,能稳定出图;需调参 = 加上表中列出的参数后可用;需分块 = 还要配合 tiled 解码或显著降分辨率。所有格子都请用第一节的测量表复核。
| 显存档 | 常见对应卡(举例) | SD1.5 系 | SDXL 系 | Flux 类(大模型) | 建议先加的参数 |
|---|---|---|---|---|---|
| 8 GB | RTX 3060 Ti / 4060 / 3070 | 512×768 可跑,批量 2 需测 | 需调参(lowvram,必要时 fp8) | 需分块 + fp8,分辨率降到 768 级 | --lowvram、UNet fp8、--reserve-vram 1 |
| 12 GB | RTX 3060 12G / 4070 | 768×1024 或批量 2 可跑 | 1024×1024 可跑 | 需调参(fp8 + 文本编码器 fp8) | UNet fp8、文本编码器 fp8 |
| 16 GB | RTX 4060 Ti 16G / 4080 16G | 批量 2~4 可跑 | 1024 批量 1~2 可跑 | 1024 可跑(fp8 更稳) | 默认即可,OOM 加 --reserve-vram 1 |
| 24 GB | RTX 3090 / 4090 | 批量 4 级可跑 | 批量 2~4 可跑 | 1024 批量 1~2 可跑 | 默认;多开软件时加 --reserve-vram 2 |
如果连基准组都跑不起来,检查顺序是:分辨率是否超出模型训练范围 → 是否叠了多个 LoRA / 插件节点 → 是否同时开了游戏或浏览器占用显存 → 再考虑降精度。排查细节见报错速查表的「CUDA out of memory」条目。
七、采样器与步数:用你自己的表说话
网上「某采样器快 30%」的说法几乎一定过期——采样器实现、调度器、显卡架构、步数都会改变结论。正确做法是固定其他变量,只换采样器与步数,把耗时填进表里:
| 采样器 / 调度器 | 步数 | 耗时(第 2 次运行) | 显存峰值 | 画质备注(同一提示词、同一 seed 对比) |
|---|---|---|---|---|
| euler / normal | 20 | |||
| dpmpp_2m / karras | 25 | |||
| dpmpp_2m_sde / karras | 30 |
几条可用于起步的经验区间(再次强调:经验值,不是跑分):
- 步数:SD1.5 / SDXL 常规在 20~30 步,超过 40 步的收益通常很小,耗时却线性上涨。
- CFG:多数 SD 模型在 5~8 之间(7 是常见起点);Flux 这类引导式模型走的是独立 guidance 参数,CFG 用 1。
- 采样器选择:想快用 euler 系;要细节用 dpmpp_2m + karras;具体差异在你自己的表里对比,别照抄榜单。
- 先固定 seed 再对比:不固定种子的「对比」没有意义。
八、显存不够时的处理顺序(速查)
- 关掉浏览器多余标签、聊天软件、录屏软件,用
nvidia-smi确认没有别的程序占着显存。 - 降分辨率(面积减半,显存明显下降),或把 batch_size 降到 1。
- 卸掉工作流里没用到的 LoRA、ControlNet、放大模型节点。
- 加
--lowvram;仍不够再加--novram。 - UNet 换 fp8 存储;大模型再给文本编码器也换 fp8。
- 出现随机性 OOM(同一工作流时好时坏)时加
--disable-smart-memory,并给系统留出--reserve-vram 1或2。 - 解码阶段爆显存:换 VAE Decode (Tiled),或临时用
--cpu-vae。 - 还是不行就改策略:低分辨率出图 + 放大模型/二次采样,把一次性大图的显存需求拆成两次。
九、不改精度也能省显存:工作流层面的五个做法
- 尺寸取 8 的倍数:宽高都用 8 的倍数(如 1024×1024、832×1216),既避免报错,也不会为不完整的潜空间块多付显存。
- 潜空间放大代替一次性大图:先出基础分辨率(SD1.5 用 512 档、SDXL / Flux 用 1024 档),再接潜空间放大或放大模型做二次采样。峰值显存按「小图 + 放大」结算,比重试大图低一档。
- 减少同时挂载的 ControlNet 数量:每个 ControlNet 都要额外加载一份模型与条件,叠两个以上显存占用明显上涨;能用合并版(Union)就别串多个。
- 批量优先用队列,而不是加大 batch_size:队列逐张执行,峰值显存与单张一致;batch_size 是线性叠加。无人值守跑图时队列更不容易中途 OOM。
- 关掉用不上的预览与多余节点:确认工作流里没有残留的高清预览节点,采样预览用
--preview-method none关闭(默认即关闭)。
最后一条经验:如果每个方案都要靠降精度才能勉强跑起来,说明模型选得比显卡大一档。换成同架构的小体积权重(已发布的量化版本、更小的蒸馏/加速版本),画质与稳定性通常都好于把参数抠到极限。模型世代与替代思路见工作流与模型管理。
下一步:把测量表跑起来,再回到工作流与模型管理梳理节点与批量出图的写法;任何一步出现报错,去报错速查表;环境还没装,先读安装篇。所有数值请以你机器上的实测与官方最新文档为准。
还没有评论