Error : cache_latents_to_disk for anima_train (キャッシュ読込エラー)

该报错一般出现在使用 anima_train.py 并开启 --cache_latents_to_disk 后,首次缓存成功、但第二次训练读取已有 .npz 缓存时报 Error : cache_latents_to_disk for anima_train (キャッシュ読込エラー) 的场景;优先排

快速结论:该报错一般出现在使用 anima_train.py 并开启 --cache_latents_to_disk 后,首次缓存成功、但第二次训练读取已有 .npz 缓存时报 Error : cache_latents_to_disk for anima_train (キャッシュ読込エラー) 的场景;优先排查 npz 路径是否被重复拼接(分辨率与后缀叠加)导致实际路径与缓存文件不一致。

适用环境:Issue 中确认的工具为 kohya-ss/sd-scripts(anima_train.py)、数据集使用 metadata json、开启 --cache_latents 与 --cache_latents_to_disk;涉及版本包括 main 068bcd7、main 1a3ec9e、dev fb03a16。操作系统、Python、CUDA、显卡型号未在 Issue 中明确。

最快修复方案:暂无确认的一步修复方案。Issue 中说明该问题已由 #2381 修复并合并到 main,报告中验证通过的提交为 b2b4992,建议先更新到该提交或之后的 main 版本再重试。若暂时无法升级,可使用评论中提供的 strategy_anima.py 临时补丁。

注意事项:临时补丁属于“相当强行”的做法,Issue 明确指出在以下情况仍会报错:同一图片被多个 Dataset 重复使用(尤其配合 skip_image_resolution)、以及极少数图片在 npz 尚未创建时的报错(规律不明)。升级修复版本是目前唯一被报告为“新规创建和重新读取都 OK”的路径。

问题场景

用户在运行 kohya-ss/sd-scripts 的 anima_train.py 时启用 --cache_latents 和 --cache_latents_to_disk,并通过 metadata json 配置数据集(dataset.config)。首次训练时 latents 缓存创建正常,但第二次及之后的训练在读取已有 .npz 缓存阶段抛出异常。用户同时提到:使用 SDXL Full-FT 时 npz 读取正常,因此判断问题与 anima 相关 strategy 结构有关。

报错原文

INFO     caching latents...     train_util.py:1174
ERROR    Error loading file:  train_util.py:2964
	C:\ ## folder_name ### \ ### file_name ##_0602x0429_anima.npz

Traceback (most recent call last):
  File "\train_util.py", line 2632, in new_cache_latents
    dataset.new_cache_latents(model, accelerator)
  File "train_util.py", line 1215, in new_cache_latents
    submit_batch(batch, current_condition)
  File "\train_util.py", line 1159, in submit_batch
    info.image = info.image.result()  # future to image
・・・
・・
・
PIL.UnidentifiedImageError: cannot identify image file 'C:\ ## folder_name ### \ ### file_name ##_0602x0429_anima.npz'

原因分析

根据 Issue 调查与维护者确认:在通过 metadata json 使用数据集时,如果对应 .npz 已经存在,代码会覆盖图片路径,并基于被覆盖后的路径再次生成 .npz 路径,从而产生错误的缓存文件名。

具体机制在报告者的分析中体现为:strategy_anima.py 的 get_latents_npz_path 使用 os.path.splitext(absolute_path)[0] 作为基础,但当时传入的 absolute_path 已经被拼接过一次分辨率与 _anima 后缀,导致返回结果中后缀重复,例如出现 ABCDEF_0602x0429_anima_0602x0429_anima 这类路径。由于真实存在的缓存文件名与代码尝试读取的文件名不一致,程序误判 .npz 不存在并尝试重建,最终在对该路径执行图像识别时抛出 PIL.UnidentifiedImageError。

维护者说明,由于修复涉及重命名相关代码改动,需先合并重命名分支后再修复,最终在 #2381 中完成修复并合并到 main。

环境排查

  • 确认 sd-scripts 版本:报告涉及的版本为 main 068bcd7、main 1a3ec9e、dev fb03a16;修复版本对应的提交为 b2b4992。
  • 确认运行脚本:anima_train.py。
  • 确认数据集配置方式:使用 metadata json(dataset.config)。
  • 确认已开启 --cache_latents 与 --cache_latents_to_disk。
  • 检查报错中的 .npz 文件名是否出现“分辨率 + _anima”后缀重复,例如 xxx_0602x0429_anima_0602x0429_anima.npz。
  • 对比缓存目录中实际存在的 .npz 文件名与代码尝试加载的文件名是否一致。
  • Python、CUDA、PyTorch、显卡型号等在本 Issue 中未提供,不作为排查依据。

解决步骤

  1. 确认当前 sd-scripts 版本是否早于 #2381 修复;若是,升级到 main 分支中 b2b4992 或之后的版本。
  2. 升级后重新运行 anima_train.py,观察 npz 的重新创建与再次读取是否均正常工作(这是 Issue 中最后验证通过的做法)。
  3. 若暂时无法升级,可优先尝试评论中给出的 strategy_anima.py 临时补丁:在 get_latents_npz_path 中先判断后缀是否已存在,若存在则直接返回 absolute_path,否则再按原逻辑拼接。
  4. 使用临时补丁时,注意避免同一图片在多 Dataset 中复用(特别是在使用 skip_image_resolution 时),并留意极少数图片在 npz 未创建时的报错。
  5. 如临时补丁后仍复现,请按上方“环境排查”确认缓存文件名是否仍存在后缀重复,并考虑直接升级到修复版本。

验证方法

升级到修复版本(b2b4992 或之后)后,重新运行 anima_train.py:确认 npz 的首次创建和二次读取均无报错,训练正常进入 caching latents 之后的流程。Issue 报告者以 b2b4992 验证了“npz 新规创建和重新读取均 OK”。若使用临时补丁,也应确认不再出现后缀重复的 npz 路径,且读取已有缓存时不再触发 PIL.UnidentifiedImageError。

参考来源

kohya-ss/sd-scripts #2362

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 25780

发表回复

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