【实战经验】ComfyUI 模型加载错误:PytorchStreamReader failed reading zip archive 的解决方案

问题描述

在使用 ComfyUI 时,你可能会遇到这样的错误:

工作流运行报错

!!! Exception during processing !!! PytorchStreamReader failed reading zip archive: failed finding central directory
Traceback (most recent call last):
  File "H:\PythonProjects1\Win_ComfyUI\execution.py", line 496, in execute
    output_data, output_ui, has_subgraph, has_pending_tasks = await get_output_data(prompt_id, unique_id, obj, input_data_all, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, hidden_inputs=hidden_inputs)
                                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "H:\PythonProjects1\Win_ComfyUI\execution.py", line 315, in get_output_data
    return_values = await _async_map_node_over_list(prompt_id, unique_id, obj, input_data_all, obj.FUNCTION, allow_interrupt=True, execution_block_cb=execution_block_cb, pre_execute_cb=pre_execute_cb, hidden_inputs=hidden_inputs)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "H:\PythonProjects1\Win_ComfyUI\execution.py", line 289, in _async_map_node_over_list
    await process_inputs(input_dict, i)
  File "H:\PythonProjects1\Win_ComfyUI\execution.py", line 277, in process_inputs
    result = f(**inputs)
             ^^^^^^^^^^^
  File "H:\PythonProjects1\Win_ComfyUI\custom_nodes\ComfyUI_LayerStyle_Advance\py\segment_anything_ultra_v3.py", line 31, in load_sam_models
    DINO_MODEL = load_groundingdino_model(grounding_dino_model)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "H:\PythonProjects1\Win_ComfyUI\custom_nodes\ComfyUI_LayerStyle_Advance\py\segment_anything_func.py", line 122, in load_groundingdino_model
    checkpoint = torch.load(
                 ^^^^^^^^^^^
  File "H:\PythonProjects1\Win_ComfyUI\.venv\Lib\site-packages\torch\serialization.py", line 1486, in load
    with _open_zipfile_reader(opened_file) as opened_zipfile:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "H:\PythonProjects1\Win_ComfyUI\.venv\Lib\site-packages\torch\serialization.py", line 771, in __init__
    super().__init__(torch._C.PyTorchFileReader(name_or_buffer))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory

关键报错信息:

!!! Exception during processing !!! PytorchStreamReader failed reading zip archive: failed finding central directory
……
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory

错误弹窗显示:

在这里插入图片描述

LayerMask: LoadSegmentAnythingModels

PytorchStreamReader failed reading zip archive: failed finding central directory

错误原因分析

这个错误表面上看起来是 PyTorch 无法读取模型文件,但实际上通常有以下几种原因:

1. 模型文件损坏或不完整

  • 下载过程中断导致文件不完整

  • 文件传输错误

  • 磁盘空间不足导致文件写入不完整

2. 模型路径配置错误

  • 模型文件不在指定路径

  • 路径包含特殊字符或空格

  • 权限问题导致无法访问文件

  • 模型移动到的文件夹不正确:如 lora > loras / checkpoints > diffusion_models 等

3. 最常见原因:模型名称不匹配

这是我在实践中发现的最主要原因

  • 工作流中节点保留的模型名称与实际存储的模型名称不完全一致

  • 可能是工作流提供方的一种简单加密或保护方式

  • 模型文件已更新但工作流中的配置未更新

解决方案

经过深入研究和实践,我找到了一个简单有效的解决方案

步骤 1:识别问题节点

在 ComfyUI 工作流中,出现问题的节点会显示为红色边框,这表明该节点执行失败并暂停了整个工作流。

问题节点显示为红色边框

步骤 2:检查模型配置

点击红色边框的节点,查看其模型配置:

  • 检查sam_model参数

  • 检查grounding_dino_model参数(如果适用)

  • 确认这些模型名称是否与你实际拥有的模型文件名称一致

步骤 3:重新指定正确的模型

点击模型选择下拉菜单,重新选择正确的模型:

模型选择下拉菜单

选择与你实际存储的模型文件名称完全一致的选项。

步骤 4:验证解决方案

重新执行工作流,如果节点边框变为绿色,并且工作流得以继续正确运行,表示问题已解决:

问题解决后节点显示为绿色边框
在调整每个报错节点的模型文件后,工作流继续正确运行
解决该报错问题后工作流正确运行完成。工作流:“工作流大全\09.25-Wan-Animate【动作迁移】换人-高质量+细节”

预防措施

为了避免类似问题再次发生,建议采取以下预防措施:

1. 模型文件管理

  • 统一命名规范:为所有模型文件建立统一的命名规范

  • 版本控制:记录模型文件的版本信息

  • 备份机制:定期备份重要的模型文件

2. 工作流管理

  • 保存前检查:在保存工作流前,检查所有节点的模型配置

  • 版本记录:为工作流建立版本管理

  • 文档说明:为复杂工作流添加模型配置说明

3. 环境配置

  • 路径配置:确保 ComfyUI 能正确找到模型文件路径

  • 权限设置:确保 ComfyUI 有足够的权限访问模型文件

  • 定期维护:定期检查和清理模型文件

深入分析

为什么会出现模型名称不匹配?

  1. 工作流保护:有些工作流提供方会故意修改模型名称作为一种简单的保护机制

  2. 版本更新:模型文件更新后,工作流中的配置可能没有同步更新

  3. 平台差异:不同平台或环境下的模型文件命名可能不同

  4. 用户自定义:用户可能手动修改了模型文件名但忘记更新工作流配置

错误信息的技术解读

错误信息PytorchStreamReader failed reading zip archive: failed finding central directory实际上是 PyTorch 在尝试读取一个损坏的 ZIP 文件时抛出的错误。这可能是因为:

  • 模型文件确实损坏了

  • 模型文件路径不正确,PyTorch 读取了错误的文件

  • 模型文件不存在,PyTorch 尝试读取了一个空文件或目录

其他可能的解决方案

如果上述方法无效,可以尝试以下解决方案:

方案 1:重新下载模型文件

# 删除损坏的模型文件

rm models/sam/sam\_vit\_h.pth

# 重新下载模型文件

# 可以从官方仓库或可靠的源重新下载

方案 2:检查模型文件完整性

import os
import torch

model_path = "models/sam/sam_vit_h.pth"

# 检查文件是否存在
if not os.path.exists(model_path):
    print(f"模型文件不存在: {model_path}")
else:
    print(f"模型文件存在,大小: {os.path.getsize(model_path)} bytes")
    
    # 尝试加载模型以验证完整性
    try:
        model = torch.load(model_path)
        print("模型文件完整,可以正常加载")
    except Exception as e:
        print(f"模型文件损坏: {e}")

方案 3:检查文件权限

# 在Linux/macOS上检查文件权限
ls -la models/sam/

# 确保文件具有读取权限
chmod +r models/sam/sam_vit_h.pth

方案 4:清理 ComfyUI 缓存

# 删除ComfyUI缓存
rm -rf comfyui_cache/
rm -rf __pycache__/

案例分析

让我分享一个具体的案例来说明这个问题的解决过程:

案例背景

用户使用了一个从网络上下载的复杂工作流,其中包含 Segment Anything 模型的加载节点。

问题现象

工作流执行到 几乎每个指定模型的 节点时失败,显示红色边框和模型加载错误。

诊断过程

  1. 检查节点配置,发现工作流上的模型名字 与我们 实际保存到对应模型文件夹的模型名称不一致(多字或少字符)

  2. 检查实际的模型文件,发现文件名是xxx.xxx

  3. 重新选择正确模型名称后,意识到模型名称不匹配是问题根源

解决方案

  1. 点击红色节点,打开模型选择菜单

  2. 从下拉菜单中选择实际保存的正确模型名称xxx.xxx

  3. 重新执行工作流,节点变为绿色,工作流正常运行
    逐一更换并指定每个报错节点上的模型文件后工作流运行正常
    逐一更换并指定每个报错节点上的模型文件后工作流运行正常

经验总结

这个案例展示了一个典型的模型名称不匹配导致的该问题。通过简单地重新选择正确的模型,就可以解决看似复杂的技术问题。

常见问题解答

Q1: 为什么模型名称会不匹配?

A: 这通常是因为工作流中的模型配置与实际存储的模型文件名称不一致。可能的原因包括:工作流分享者修改了模型名称、模型文件更新了但工作流未更新、或者用户手动修改了模型文件名。

Q2: 除了 Segment Anything 等模型,其他模型会有类似问题吗?

A: 是的。任何需要加载外部模型文件的节点都可能遇到类似问题,包括:ControlNet、LoRA、VAE 等。

Q3: 如何避免这个问题?

A: 建议在保存工作流前仔细检查所有模型节点的配置,确保模型名称与实际文件名称一致。同时,建立良好的模型文件管理习惯。

Q4: 如果下拉菜单中没有正确的模型选项怎么办?

A: 这可能意味着你需要下载相应的模型文件。你可以从官方仓库或可靠的源下载所需的模型,然后重新启动 ComfyUI,新的模型应该会出现在下拉菜单中。

总结

ComfyUI 中的PytorchStreamReader failed reading zip archive错误虽然看起来很技术化,但在大多数情况下,解决方案非常简单

  1. 识别问题节点:寻找显示红色边框的节点

  2. 检查模型配置:确认模型名称是否与实际文件一致

  3. 重新选择模型:从下拉菜单中选择正确的模型

  4. 验证解决方案:确认节点变为绿色,工作流正常运行

这个解决方案不仅适用于 Segment Anything 模型,也适用于其他任何需要加载外部模型文件的节点。

记住,在 ComfyUI 中,红色边框通常表示配置问题,而不是复杂的技术故障。通过仔细检查节点配置,很多问题都可以迎刃而解。

如果你遇到类似的问题,不要被复杂的错误信息吓倒。先检查最基本的配置,特别是模型名称和路径,这往往是解决问题的关键。

Date: 2025 年 11 月 9 日

Author: ComfyUI 技术分析团队

Tags: ComfyUI, 技术故障排除,PyTorch, 模型加载,Segment Anything, 工作流优化,AI 艺术创作

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐