ComfyUI FLUX 第一次出图很慢怎么办?冷启动、模型加载、缓存占用解释
先说结论
ComfyUI 跑 FLUX 第一次出图慢,不一定是参数错了,也不一定是机器不行。
在我这台 RTX 4060 Laptop 8GB + FLUX GGUF Q6_K + T5 FP8 上,第一次出图可能比重启后连续跑的图慢很多。这不是 bug,也不是”优化差”——只是模型需要加载、缓存需要建立、显存需要进入稳定状态。
之前我记录到 896×896 / 30 steps 耗时约 195 秒,而 1024×1024 / 30 steps 反而约 182 秒——不是 1024 比 896 快,而是两次测试的系统状态不同。896 那次是重启后跑的,包含冷启动开销;1024 那次模型已经热了。
这篇文章专门讲怎么理解这些现象,以及怎么正确记录出图速度。
边界声明:以下所有经验基于我这台 RTX 4060 Laptop 8GB。不同机器、不同驱动、不同 ComfyUI 版本表现可能不同。我不讲原理,只讲我观察到的现象和踩过的坑。
什么叫冷启动
冷启动指的是 ComfyUI 刚启动,模型文件还在硬盘上,GPU 显存里还没有加载任何东西,第一次点 Queue Prompt 的那种状态。
这时候发生的事情:
- ComfyUI 从硬盘读取 UNet / GGUF 文件到内存
- T5 FP8、CLIP、VAE 都需要初始化
- 操作系统、驱动、PyTorch、CUDA 做第一次调度
- 显存里可能还有上一轮的残留,或者被浏览器、其他程序占着
整个过程比”再来一张”慢得多,而且慢的原因和 steps、分辨率不完全相关。
什么叫热状态
热状态是指在不重启 ComfyUI、不关闭终端、不卸载模型的前提下,连续跑第二次、第三次图。
这时候:
- UNet / GGUF 已经在显存里
- T5、CLIP、VAE 不会被反复加载
- CUDA kernel 缓存已经建立
- 操作系统和驱动不需要重新分配显存
所以热状态下的耗时,更接近真正的推理耗时。如果要对比不同参数的快慢,应该用热状态的数据。
为什么第一次会慢
具体来说,几个因素叠加:
模型文件加载
flux1-dev-Q6_K.gguf 约 9.4GB,t5xxl_fp8_e4m3fn_scaled 约 4.6~4.9GB,clip_l 和 ae 也各占一些。第一次把这些文件从硬盘读到显存,需要时间。这个时间取决于硬盘速度(NVMe 比 SATA 快)、文件大小、以及当时系统在做什么。
缓存初始化
PyTorch 和 CUDA 在第一次运行时会建立很多内部缓存,比如 kernel cache、cuDNN 的算法选择。这些缓存一旦建立,后续运行就能复用。第一次永远是最慢的。
显存状态
冷启动时,显存可能不是干净的。浏览器(特别是 Chrome/Edge 开了硬件加速)、录屏软件、Discord、Steam、甚至 Windows 自己的桌面合成,都在用 GPU 显存。ComfyUI 启动时能拿到的显存,可能比你以为的少。
ComfyUI-Manager 和其他节点
如果 ComfyUI-Manager 在启动时联网更新 extension-node-map.json(我之前遇到过 raw.githubusercontent.com 连接超时),也会拖慢启动和第一次运行的整体感受。
为什么 896×896 可能反而比 1024×1024 慢
这是我之前实测时遇到的一个典型现象,值得单独写一节。
在我 FLUX 20 steps 和 30 steps 怎么选 那篇里记录过:
- 896×896 / 30 steps:约 195 秒
- 1024×1024 / 30 steps:约 182 秒
单看这两个数字,很容易得出”896 比 1024 还慢”的结论。但这是错的。
实际情况是:896 那次是我重启 ComfyUI 后跑的第一次,包含了模型加载、缓存初始化、甚至 ComfyUI-Manager 的联网更新。1024 那次是在模型已经加载、显存已经稳定之后继续跑的。
这组数据的正确解读是:单次耗时受测试状态影响巨大,不能用来判断分辨率的绝对快慢。 如果要对比 896 和 1024 的真正推理速度,需要在热状态下、同一会话内、分别跑 2~3 次取平均。
这不是 896 的锅,也不是 FLUX 的锅。只是测试方法的问题。
正确的速度测试方法
如果想自己记录出图速度,我建议按这个流程来:
- 固定工作流:同一个 .json 加载出来的工作流,不要改节点结构。
- 固定 prompt:前后保持一致,包括第二个 FLUX 文本框。
- 固定 seed:用 fixed seed,避免随机因素影响。
- 固定参数:sampler、scheduler、steps、CFG、batch 全部一样。
- 记录状态:每次跑之前记录是否重启过 ComfyUI、是否首次运行。
- 跑 2~3 次:重启后第一次单独记录;不重启,连续跑第二次、第三次,取第二次或第三次作为”热状态”数据。
- 分开对比:冷启动和冷启动比,热状态和热状态比。不要把冷启动的耗时拿来和热状态比较。
我建议怎么记录
下面是一个记录模板,你可以参考:
| 测试状态 | 分辨率 | steps | batch | 是否重启ComfyUI | 是否首次运行 | 耗时 | 备注 |
|---|---|---|---|---|---|---|---|
| 冷启动 | 1024×1024 | 30 | 1 | 是 | 是 | 仅记录参考 | 包含模型加载 |
| 热状态 | 1024×1024 | 30 | 1 | 否 | 否 | 更适合对比 | 模型已加载 |
| 热状态 | 1024×1024 | 20 | 1 | 否 | 否 | 更适合对比 | 用于和30steps对比 |
我本站记录的 108 秒(1024×1024 / 20 steps)、182 秒(1024×1024 / 30 steps)、195 秒(896×896 / 30 steps)都是特定时刻的单次记录,不是多次平均。其中 195 秒那次标注了是冷启动,108 秒和 182 秒是热状态。具体情况见 8GB 实测低显存方案。
怎么减少第一次等待
以下是我实际在用的做法,不是”绝对有效”,但确实有帮助:
- 先确认模型文件放对目录。如果 ComfyUI 找不到模型就开始报错重试,会更慢。参考 模型目录对照。
- 少开浏览器和其他 GPU 程序。Chrome/Edge 的硬件加速会占用显存,关掉或最小化能释放一些空间。
- 固定 batch_size=1。不要一上来就试 batch_size=2。
- 先用 768×768 跑通。先确认流程没问题,再上 1024×1024。不要一上来就试高分辨率。
- 不要一口气改一堆参数。每次只改一个变量,才能知道到底慢在哪里。
- 不要因为第一次慢就认为工作流错了。先等它跑完,看看能不能正常出图。如果能出图,只是慢,那是正常现象。
哪些情况才可能是真的有问题
以下情况值得排查,不只是”冷启动慢”:
- 每次都像第一次一样慢。如果热状态下连续跑,每次耗时都接近冷启动,那可能有别的问题。
- 每次都重新加载模型。控制台里能看到反复的 loading 信息,说明模型没有被正确留在显存里。
- GPU 显存一直被其他程序占满。打开任务管理器 → 性能 → GPU,看”专用 GPU 内存”是不是在你没跑 ComfyUI 的时候也接近 8GB。
- 控制台反复报错或重新加载节点。如果有节点加载失败、反复重试,会明显拖慢。
- 改了模型目录后没有完全重启 ComfyUI。有时候只是刷新页面不够,需要关掉终端重新启动。
和 OOM 的关系
慢 ≠ OOM。这是两个问题。
- 慢更多是加载、计算、缓存、后台占用造成的。
- OOM 是显存不够,程序直接报错退出或卡住。
降低 steps 可能让图出得更快(省了计算时间),但不一定能解决 OOM(不直接大幅省显存)。
真正影响显存的因素,按重要程度大致排:
- 分辨率(越高越吃显存)
- batch_size(大于 1 直接翻倍压力)
- UNet 方案(FP16 原版 vs GGUF 量化,差距巨大)
- T5 版本(全精度 vs FP8,差几 GB)
- 后台 GPU 程序(浏览器、录屏、其他 AI 软件)
详细排查步骤见 OOM 排查记录。
常见误区
”第一次慢就是参数错了”
不一定。第一次慢很可能只是模型加载和缓存初始化,和参数无关。等它跑完,如果能正常出图,参数就没问题。
“896 比 1024 慢,所以 896 优化差”
不是。我之前记录到 896 比 1024 慢,是因为 896 那次是冷启动。热状态下两者的关系可能完全不同。不要只看一个数字下结论。
“降低 steps 就能解决 OOM”
不能。steps 主要影响计算时间,不直接大幅降低显存占用。OOM 要查分辨率、batch_size、模型方案、T5 版本和后台占用。
“一次测试就能判断性能”
不能。第一次和第二次的耗时可能差很多。要对比不同参数,必须在同一状态下连续跑 2~3 次。
“任务管理器 0% 就代表 GPU 没占显存”
不是。任务管理器的”GPU 使用率”和”显存占用”是两回事。使用率低不代表显存没被占。要看”专用 GPU 内存”那一栏。
FAQ
第一次出图慢正常吗?
正常。模型需要从硬盘加载、缓存需要建立、显存需要分配。第一次比后续慢是普遍现象,不是你的机器有问题。
要不要重启 ComfyUI 再测试?
如果你要对比不同参数的速度,不要每次测试都重启。在同一次会话中连续跑,才能拿到可比较的热状态数据。如果需要记录冷启动耗时,专门重启一次单独记录就行。
为什么第二张图明显快?
因为模型已经在显存里了,CUDA 缓存也建立好了。第二张图只需要做推理,不需要重新加载模型。
冷启动耗时有没有参考价值?
有,但它回答的是”从零开始要等多久”这个问题,而不是”这张图生成本身需要多久”。两种耗时对应不同的问题,不要混用。
怎么判断是不是浏览器占显存?
打开任务管理器 → 性能 → GPU,在不跑 ComfyUI 的时候看”专用 GPU 内存”用了多少。如果已经占了几百 MB 甚至 1~2GB,可以试试关掉浏览器、或关闭浏览器硬件加速。
8GB 显卡应该看冷启动还是热状态?
都要看。冷启动让你知道第一次要等多久,热状态让你知道正常出图的速度。对比不同参数(比如 20 vs 30 steps、Q6 vs Q5)时,用热状态数据。
后续待测
后面如果继续做时间记录,我计划补这些:
- 同一 prompt、同一 seed,重启后连续三次的冷启动 vs 热状态耗时记录
- 768×768、896×896、1024×1024 在热状态下的耗时对比(同一次会话内连续跑)
- 20 steps 和 30 steps 在热状态下的 3 次重复测试
- 不同 GGUF 量化等级(Q6_K / Q5_K_M / Q4_K_M)的冷启动加载耗时
- 关闭浏览器硬件加速前后的显存占用和出图速度对比
- 同一工作流在不同 ComfyUI 版本下的耗时变化