
前面 17 篇,你已经能装好 ComfyUI、出图、调质量、接 LoRA、搞 ControlNet 了。但有个坎,几乎每个新手都会撞上,我也没绕过去——
我第一次想跑 FLUX 的时候,兴致冲冲拖进工作流,点 Queue Prompt,结果界面一卡,控制台刷出一大串红色 CUDA out of memory。我当时还以为是显卡坏了,重装驱动、清缓存,折腾一晚上。最后才发现:不是坏了,是显存根本装不下。
后来我才搞明白:ComfyUI 报 OOM,不是”你电脑不行”,是”这一刻要塞进显存的峰值”超了。而且这个峰值,是可以被拆开、被降级、被分摊的。这篇给你一张按优先级排好的降级清单——从最见效的到最不得已的,照着降,基本都能跑起来。
一句话记住:OOM 不是绝症,是”峰值超了”,峰值能拆,就能降。
一、显存到底卡在哪(大白话)
一张图从噪声变成成品,显存里要同时塞好几样东西。哪样最大,就先砍哪样。按”占坑大小”排个序,你心里就有数了:
| 占坑大户 | 大概量级(估算,未实跑) | 说明 |
| 模型权重(FLUX fp16) | ~23 GB | 最大的头,fp16 全精度最吃显存 |
| T5 文本编码器(FLUX) | ~9 GB | 隐形大户!很多人只换底模忘了它 |
| latent 分辨率(2048²) | ~8 GB | 分辨率的平方,翻倍涨 |
| VAE 编解码(2048²) | ~8 GB | 高清图解码瞬间拉满 |
| batch / ControlNet / Detailer | 每个 ~2–3 GB | 加一个分支多一截 |
| 缓存 / 预览 | ~0.5–1 GB | 小头,但积少成多 |
踩坑经历:我头回降显存,只把底模换成了 fp8,结果还是爆。查了半天才发现——T5 还是 fp16 的,9 个 G 悄咪咪占着。换完 T5 才彻底跑通。这坑你别踩。
所以降级的核心思路就一句:从最大的头开始砍,别在缓存那 0.5G 上较劲。
二、按优先级排的降级清单(P0 → P3)
下面这张表是全文的灵魂。P0 是见效最快、最该先试的;P3 是实在没招了才动的。
| 优先级 | 峰值来源 | 降级动作 | 命令 / 节点 |
| P0 | 模型权重(最大头) | 换 fp8 / GGUF 量化 | Load Diffusion Model 节点 weight_dtype=fp8_e4m3fn;或换 .gguf 用 Unet Loader (GGUF) |
| P0 | T5 编码器(FLUX) | 换 fp8 / GGUF 版 T5 | DualCLIPLoader (GGUF) 加载量化 T5 |
| P1 | latent 分辨率 | 降到 1024² 甚至 512² | Empty Latent 改宽高 |
| P1 | VAE 编解码 | 分块解码 | 换 VAE Decode (Tiled),tile_size=512、overlap=64 |
| P2 | batch / ControlNet | 关分支、bs=1 | 工作流里减节点 |
| P2 | 视频帧×分辨率 | 降帧 + 时间分块 | VAE Decode (Tiled) 的 temporal_size / temporal_overlap |
| P3 | 缓存 / 预览 | 关预览、关缓存 | –preview-method none、–cache-none |
记法很简单:先换模型格式(P0),再降分辨率开 Tiled(P1),最后才动缓存(P3)。顺序反了就是事倍功半。
三、一个必须说清的坑:新版里 –lowvram 可能”白加了”
你搜老教程,十篇有八篇教你”显存不够加 –lowvram“。但我要泼盆冷水——在现在的 ComfyUI 上,这招大概率啥用没有。
我对照了官方启动参数文档(v0.29.2),–lowvram 的原文说明是:
No effect when dynamic VRAM is enabled. Otherwise, runs text encoders on CPU.
翻译过来:Dynamic VRAM 开着的时候,–lowvram 不生效。而当前稳定版 ComfyUI 在 Nvidia 显卡上Dynamic VRAM 默认开启。也就是说,你兴冲冲加的 –lowvram,在新版里就是个空操作,显存一点没省。
Dynamic VRAM 是 ComfyUI 新版的”自动显存管家”:模型用多少搬多少,不用就退给系统,比老式”lowvram 强制分块”聪明得多。所以对大多数 4060 用户,别跟 –lowvram 较劲,让 Dynamic VRAM 自己管,你只要把模型格式和分辨率降下来就行(见第二、五节)。
补充:想要强制走老式 –lowvram?先 –disable-dynamic-vram 把它关掉,再加 –lowvram。但我一般不建议——Dynamic VRAM 更省心。另外网上旧文提的 –normalvram、–medvram:我查了官方启动参数页,–medvram 根本不存在,–normalvram 新版也没列(旧文档有,属版本差异),这两个都别信、别加。
四、版本红利:升级到 0.29.x 白捡的优化
如果你还停在老版本,这节是 push 你升级的理由——新版有两处对低配机器实打实:
1. Dynamic VRAM 自动管理(当前稳定版在 Nvidia 上默认开启)。前面说了,它就是现代版”显存管家”,比手动 –lowvram 聪明。升级即享,不用配。
2. 视频流式转码(v0.29.0 引入)。官方 PR 描述是:视频转码从”把每一帧都缓存进内存”改成”流式处理”,内存压力大幅下降。这对做视频工作流又内存不够的人很关键。
标注:第 2 点是我从官方 PR 描述看到的,我方未在卡上实跑,具体降多少没有公开数字,你升级后可以自己感受。
实操闭环:10 分钟,给你的 4060 配一套低显存方案(现在就做)
前面讲原理,这段真刀真枪做一遍。做完你手里多一张”在 8G 显存上跑通的 FLUX 图”,还能确认降级真的生效了。
前提:你已有第 05 篇的基础文生图工作流(Load Checkpoint / Load Diffusion Model → 两个 CLIP Text Encode → KSampler → VAE Decode → Save Image)。丢了就按这 6 个节点重搭。
目标:把一张原本在 8G 上会 OOM 的 FLUX fp16 出图,改成 fp8 出图,显存降下来、图还能看。
步骤(照着点,别跳):
1. 换模型格式:把 Load Checkpoint 换成 Load Diffusion Model(或 Unet Loader (GGUF))。选 fp8 版——节点里把 weight_dtype 设成 fp8_e4m3fn;或直接选一个 .gguf 量化模型。
2. 别忘了 T5:FLUX 的话,CLIP/T5 加载也换量化版(DualCLIPLoader (GGUF) 加载量化 T5)。这是隐形大户,漏了必爆。
3. 降分辨率:Empty Latent 的宽高从 1536² 或 1024² 先降到 512² 或 768²,跑通了再说。
4. 开 Tiled VAE:把 VAE Decode 换成 VAE Decode (Tiled),tile_size 填 512、overlap 填 64。
5. (可选)启动参数:bat 里 python main.py 后加 –reserve-vram 1.5,给系统留 1.5G 显存。老版本想强制 –lowvram 就加 –disable-dynamic-vram –lowvram。
6. 出图:点 Queue Prompt,盯一眼显存占用。
检查点(你跑完应该看到):
① 图正常出来,控制台没有 CUDA out of memory;
② 显存占用比 fp16 版明显下降(fp8/GGUF 大约 5.5~7.5G,fp16 约 23G——数字为第三方估算,未亲自实测,以你本机为准);
③ 还爆 → 分辨率再降一档 / 开 –cache-none / 确认 T5 也换了量化版(T5 fp16 约 9G 是大户);
④ 图出来了但糊 → 不是显存问题,是分辨率太低或步数太少,回头调画质。
作业(选做):同一句提示词,fp16 和 fp8 各跑一张并排看,感受”量化到底损多少画质”——我自己测下来,FLUX fp8 和 fp16 肉眼差别很小,性价比极高。
五、核心旋钮:启动参数对照表(照着抄)
这些是我对照官方文档核实过的、真能影响显存的启动参数。加在 python main.py 后面:
| 参数 | 作用 | 什么情况用 |
| –reserve-vram 1.5 | 给系统预留 N GB 显存 | 怕和系统抢显存崩,必加 |
| –disable-dynamic-vram | 关掉自动显存管理 | 想强制老式 –lowvram 时才用 |
| –lowvram | Dynamic VRAM 关掉时才生效 | 4–8G 老环境兜底 |
| –novram | 比 –lowvram 还狠 | –lowvram 不够时最后手段 |
| –disable-smart-memory | 激进卸载到内存 | 显存极小要稳定性时 |
| –cache-none | 不缓存节点结果 | 内存也紧时 |
| –preview-method none | 关闭/保持节点预览图为 none(默认已是 none) | 若你手动改过预览方式,可加回来省那点显存 |
一句话:日常只需 –reserve-vram 1.5;别碰 –lowvram 指望它救命(新版没用);真要极限省,再上 –cache-none。
六、常见坑(一次说全)
1. 只换底模忘了 T5:FLUX 的 T5 约 9G,是隐形炸弹,必须一起量化。
2. 迷信 –lowvram:新版 Dynamic VRAM 开着它不生效,白加。
3. 分辨率和显存的平方关系:2048² 的 latent 峰值约 8G,降到 512² 直接少一大截。
4. VAE 没开 Tiled:高清图解码瞬间拉满显存,换成 VAE Decode (Tiled) 就匀开了。
5. fp8 设在命令行而不是节点里:–fp8_e4m3fn-unet 对 FLUX 加载器常无效,要在 Load Diffusion Model 节点的 weight_dtype 里设。
七、参数速查表(照着抄)
| 场景 | 模型格式 | 分辨率 | 关键动作 |
| 4060/8G 跑 FLUX | fp8 或 GGUF Q4_K_M | 512²~768² 起步 | T5 也量化 + VAE Decode (Tiled) |
| 想保画质 | fp16(仅 12G+ 卡) | 1024² 起 | –reserve-vram 1.5 |
| 视频显存爆 | GGUF 量化 + 降帧 | 降分辨率 | VAE Decode (Tiled) 时间分块 |
| 实在跑不起来 | GGUF 最小档 | 512² | –cache-none + –disable-dynamic-vram –lowvram |
八、4060 / 8G 专项 & 我踩的坑
技巧:4060 这种 8G 卡,跑 FLUX 的最优解不是调启动参数,是换模型格式——fp8 或 GGUF 量化版,显存直接从 ~23G 砍到 6~12G,Dynamic VRAM 再帮你自动调度,基本稳。启动参数只补一个 –reserve-vram 1.5 就行。
踩坑经历:我有次为了”极限省显存”,把 –cache-none 和 –lowvram 一股脑全加上,结果图是出来了,但一张图跑了三分多钟,慢到怀疑人生。后来才懂:缓存和分块是”省内存换速度”,能不关就不关。低显存的第一杠杆永远是模型格式,不是这些开关。