近期在本地测试 Z-Image 工作流时,刚下载完模型便直接点击运行,结果弹出一长串报错信息:
error in loading state dict for llama2:size mismatch for model.layer
起初以为是模型下载损坏或工作流不兼容,甚至重新下载了模型和节点,折腾了大半天。后来才发现,问题其实非常直接。
问题原因
根本原因在于:Z-Image 采用了更新的模型结构,而旧版 ComfyUI 或旧版 GGUF 节点无法正确解析新模型的参数,从而引发 size mismatch 这类参数维度不匹配的错误。
此类错误的本质是:使用老旧代码尝试加载新模型结构,参数的 shape 不一致导致模型初始化失败。打个比方,就像用 Vue3 的源代码去运行 Vue2 插件——接口名称相同,但内部结构已完全改变。
解决方法
方法1:更新 ComfyUI(最有效)
这是 Reddit 原帖中确认有效的方法。打开 ComfyUI Manager,然后执行 Update ComfyUI。更新完成后,务必彻底重启 ComfyUI——很多人恰恰忽略了这一步。仅仅更新却不重启,新代码不会加载,Python 缓存仍然保留,节点依然是旧版本,效果等于没有更新。
正确更新流程
建议按以下顺序操作:
1. 更新 ComfyUI
Update ComfyUI
2. 更新所有 Custom Nodes
Update All Custom Nodes,尤其是 ComfyUI-GGUF 这个节点,非常关键。
3. 关闭 ComfyUI
不要仅仅刷新网页,一定要关闭终端、关闭 bat 窗口、停止 Python 进程。
4. 重新启动
重新运行 run_nvidia_gpu.bat 或 python main.py。
如果更新后仍然报错
部分用户更新后依然会遇到类似错误:
UnetLoaderGGUFError(s) in loading state_dict for NextDiT:size mismatch for x_pad_token
例如:shape torch.Size([3840]) vs torch.Size([1, 3840])
这属于 GGUF 节点兼容问题,并非模型损坏。目前主要与 ComfyUI-GGUF 节点版本有关。
Reddit 讨论中提到了相关 Issue:https://github.com/city96/ComfyUI-GGUF/issues/379,目前部分版本尚未完全修复。
解决 GGUF 兼容问题的方法
方法1:重新拉取 GGUF 节点
删除 ComfyUI/custom_nodes/ComfyUI-GGUF,然后重新安装最新版本。
方法2:Git 更新
进入 custom_nodes/ComfyUI-GGUF 目录,执行 git pull。
方法3:使用官方推荐工作流
部分第三方工作流节点版本老旧、模型版本不匹配、参数结构已经发生变化,容易触发 size mismatch。尽量采用官方 workflow 或最新版本的 workflow,并确保对应模型版本一致。
为什么会出现 size mismatch?
这是 PyTorch 中常见的错误。例如旧模型参数为 torch.Size([3840])(一维),而新模型参数变为 torch.Size([1, 3840])(二维)。虽然看起来差别不大,但模型层结构已经变化,旧版加载器无法正确读取。
最终解决方案总结
如果你运行 Z-Image 时遇到 error in loading state dict for llama2,按以下操作即可解决:
| 操作 | 是否必须 |
|---|---|
| 更新 ComfyUI | 必须 |
| 更新 Custom Nodes | 必须 |
| 更新 GGUF 节点 | 建议 |
| 完全重启 ComfyUI | 必须 |
| 重新下载模型 | 一般不用 |
Reddit 原帖用户反馈
很多用户被这个问题困扰了很久,结果最后仅仅是因为 ComfyUI 版本过旧。还有用户更新后成功运行,说明模型本身没有问题。
总结
这个报错本质上与显卡、CUDA 或模型损坏无关,而是模型版本与 ComfyUI 代码版本不匹配。更新 ComfyUI、更新所有自定义节点、完全重启,通常即可解决。如果问题依然存在,重点检查 ComfyUI-GGUF 节点版本是否最新。
