← ComfyUI 实测笔记

ComfyUI FLUX 第一次出图很慢怎么办?冷启动、模型加载、缓存占用解释

ComfyUIFLUXRTX4060performancelow-vram

先说结论

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 的锅。只是测试方法的问题。


正确的速度测试方法

如果想自己记录出图速度,我建议按这个流程来:

  1. 固定工作流:同一个 .json 加载出来的工作流,不要改节点结构。
  2. 固定 prompt:前后保持一致,包括第二个 FLUX 文本框。
  3. 固定 seed:用 fixed seed,避免随机因素影响。
  4. 固定参数:sampler、scheduler、steps、CFG、batch 全部一样。
  5. 记录状态:每次跑之前记录是否重启过 ComfyUI、是否首次运行。
  6. 跑 2~3 次:重启后第一次单独记录;不重启,连续跑第二次、第三次,取第二次或第三次作为”热状态”数据。
  7. 分开对比:冷启动和冷启动比,热状态和热状态比。不要把冷启动的耗时拿来和热状态比较。

我建议怎么记录

下面是一个记录模板,你可以参考:

测试状态分辨率stepsbatch是否重启ComfyUI是否首次运行耗时备注
冷启动1024×1024301仅记录参考包含模型加载
热状态1024×1024301更适合对比模型已加载
热状态1024×1024201更适合对比用于和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(不直接大幅省显存)。

真正影响显存的因素,按重要程度大致排:

  1. 分辨率(越高越吃显存)
  2. batch_size(大于 1 直接翻倍压力)
  3. UNet 方案(FP16 原版 vs GGUF 量化,差距巨大)
  4. T5 版本(全精度 vs FP8,差几 GB)
  5. 后台 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 版本下的耗时变化