解决 PyTorch 2.11 + SB3 Checkpoint “损坏“ 报错:从 RuntimeError 到源码修复的完整排障记录
解决 PyTorch 2.11 + SB3 Checkpoint “损坏” 报错:从 RuntimeError 到源码修复的完整排障记录在使用 Stable-Baselines3 (SB3) 进行强化学习训练时,训练中途冻结或异常退出后,尝试从iteration_300.zip恢复训练,却遇到了一个极其诡异的报错:RuntimeError: PytorchStreamReader failed reading file .data/serialization_id: file read failed. This is an internal miniz error. If you are seeing this error, there is a high likelihood that your checkpoint file is corrupted. This can happen if the checkpoint was not saved properly, was transferred incorrectly, or the file was modified after saving.错误信息直白地告诉我们:“文件极大概率已损坏”。但经过一番深入排查,我发现这其实是一个**看似“文件损坏”实为“库兼容性 bug”**的典型陷阱。本文将完整记录从定位根因到修改源码修复的全过程,希望能帮遇到同样问题的开发者少走弯路。1. 问题发现与初步排查触发场景:训练中途冻结,进程异常退出后,尝试从iteration_300.zip恢复训练:setCKPT_FILE=%MODEL_DIR%\Lite3_flat_terrain.zip_iteration_300.zip %PYTHON% examples\legged_gym\run_legged_rl.py--config...--train--ckpt"%CKPT_FILE%"初步假设:因为上一次训练确实冻结过,下意识的判断是——进程在保存iteration_300.zip时被打断,文件没写完。排查路径:方案 A:回退到更早的 checkpoint。300 坏了,换 200 试试。结果:完全相同的错误。方案 B:切换到另一个训练目录。换到另一个更成熟的模型(如08-16-25目录下的iteration_800.zip),这个目录训练过程没有冻结过。结果:还是同样的错误。关键转折:三个不同目录、不同时间点保存的 checkpoint,全部报同一个错误。如果是“随机损坏”,概率上说不通——不可能三个文件恰好以相同方式损坏。2. 验证文件完整性为了验证文件是否真的损坏,我使用 Python 直接读取了 zip 结构:importzipfile z=zipfile.ZipFile("Lite3_flat_terrain.zip_iteration_800.zip")print(

相关新闻