AttributeError: ‘VAE’ object has no attribute ‘patcher’

用户在 ComfyUI 中加载任何检查点(例如来自 black-forest-labs/FLUX.2-small-decoder 的 full_encoder_small_decoder.safetensors )时触发。该检查点不包含可识别的 VAE 权重,导致 ComfyUI 的 VAE 初始化

AttributeError: 'VAE' object has no attribute 'patcher'

AttributeError: ‘VAE’ object has no attribute ‘patcher’

快速结论:此报错通常发生在 ComfyUI 加载没有可识别 VAE 权重的检查点(如 Flux、Qwen 等 UNET-only 模型)时,且启用了 `–cache-ram` 模式。优先排查是否加载了不包含 VAE 权重的模型文件。

问题场景

用户在 ComfyUI 中加载任何检查点(例如来自 black-forest-labs/FLUX.2-small-decoderfull_encoder_small_decoder.safetensors)时触发。该检查点不包含可识别的 VAE 权重,导致 ComfyUI 的 VAE 初始化失败。当用户运行第二个提示词时,RAM 缓存压力释放功能(RAMPressureCache.ram_release)在扫描缓存输出时抛出异常。

报错原文

AttributeError: 'VAE' object has no attribute 'patcher'

完整 Traceback(部分):
File "D:\ComfyUI\comfy\sd.py", line 1258, in is_dynamic
    return self.patcher.is_dynamic()
           ^^^^^^^^^^^^
AttributeError: 'VAE' object has no attribute 'patcher'

原因分析

这是 #14799 提交引入的功能与 VAE 早期返回路径之间的交互问题。具体机制如下:

  • #14799comfy/sd.py 中新增了 VAE.is_dynamic() 方法,该方法直接调用 self.patcher.is_dynamic(),隐含假设 self.patcher 始终存在。
  • VAE.__init__ 在检测到无法识别为 VAE 的状态字典时,会提前返回(early-return),此时 self.patcher 尚未被赋值(在后续代码行 L937 才被创建)。该 VAE 对象虽然不完整,但仍被返回给工作流并存储在输出缓存中。
  • 当使用 --cache-ram 模式时,每个节点执行后都会触发 RAMPressureCache.ram_release,它会遍历所有缓存输出并调用 all_outputs_dynamic。虽然代码通过 hasattr(output, "is_dynamic") 检查方法是否存在(方法确实存在),但调用时 self.patcher 不存在,导致 AttributeError 传播并终止 prompt_worker 线程。

重要说明:即使 VAE 输出端口未连接,CheckpointLoaderSimple 也会从检查点的状态字典中构造 VAE 对象。因此,加载任何不包含 VAE 权重的检查点(如 Qwen、FLUX 等 UNET-only 模型)都足以触发此错误。

环境排查

  • 确认 ComfyUI 版本:建议检查是否在 2026 年 7 月 5 日之后(#14799 合并后)的版本。
  • 确认是否启用了 --cache-ram 启动参数(这是默认缓存模式)。
  • 确认是否加载了提示 WARNING: No VAE weights detected, VAE not initalized. 的模型文件。
  • 确认 Python 版本(报错中显示为 3.13)。

解决步骤

  1. 可优先尝试的修复方案:更改 comfy/sd.pyis_dynamic 方法,使用 getattr 进行安全检查:

    def is_dynamic(self):
        patcher = getattr(self, "patcher", None)
        return patcher is not None and patcher.is_dynamic()
  2. 替代方案:在 VAE 的早期返回路径中设置 self.patcher = None,并在 is_dynamic 方法中添加 None 检查。

  3. 临时回避方案:降级到 2026 年 7 月 5 日的 Nightly 版本(在 #14799 之前),但此方案不推荐,因为会丢失后续重要更新。

注意:不要简单地使用全局 try/except 包裹 ram_release,因为失败的缓存清除会导致 RAM 无限增长,直到操作系统 OOM 终止进程。

验证方法

应用修复后,重新运行包含不检测 VAE 权重的检查点的工作流,然后执行第二个提示词,观察是否不再出现 AttributeError: 'VAE' object has no attribute 'patcher' 错误。如果之前因该错误导致进程崩溃,修复后应能正常运行。建议同时监控任务管理器中的内存使用情况,确认 RAM 不再无限增长。

参考来源

Comfy-Org/ComfyUI #14806

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 12026

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注