PyTorch保存通用检查点报错:无法打开指定文件
问题
我用PyTorch在CIFAR-10数据集上训练CNN模型,尝试按照PyTorch推荐的通用检查点方式保存训练状态,但持续报错;但直接保存整个模型的方式可以正常工作。
相关代码
保存检查点的函数:
def save_model(epoch): torch.save({ 'epoch': epoch+1, 'model_state_dict': net.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), }, '/home/cc/research/AdderNet/pretrained/minionn.pt')
测试可行的保存方式:
torch.save(model, '/home/cc/research/AdderNet/pretrained/FILE_NAME')
报错信息
> Train - Epoch 1, Batch: 1, Loss: 2.302385 > Test Avg. Loss: 0.020081, Accuracy: 0.269100 > Train - Epoch 2, Batch: 1, Loss: 2.019350 > Test Avg. Loss: 0.018918, Accuracy: 0.324800 > Traceback (most recent call last): > File "/home/cc/research/AdderNet/main.py", line 119, in <module> > main() > File "/home/cc/research/AdderNet/main.py", line 115, in main > save_model(epoch) > File "/home/cc/research/AdderNet/main.py", line 105, in save_model > torch.save({ > File "/home/cc/anaconda3/envs/torch/lib/python3.10/site-packages/torch/serialization.py", line 422, in save > with _open_zipfile_writer(f) as opened_zipfile: > File "/home/cc/anaconda3/envs/torch/lib/python3.10/site-packages/torch/serialization.py", line 309, in _open_zipfile_writer > return container(name_or_buffer) > File "/home/cc/anaconda3/envs/torch/lib/python3.10/site-packages/torch/serialization.py", line 287, in __init__ > super(_open_zipfile_writer_file, self).__init__(torch._C.PyTorchFileWriter(str(name))) > **RuntimeError: File /home/cc/research/AdderNet/pretrained/minionn.pt cannot be opened.**
环境信息
- 系统:Ubuntu20.04远程服务器
- 开发工具:VSCode远程连接
- Python环境:conda虚拟环境(Python3.10.8),conda基础环境3.9.13,系统默认Python3.8.10
解决方案
1. 检查目标目录的存在性与权限
首先确认保存路径中的pretrained目录是否存在,若不存在则创建:
mkdir -p /home/cc/research/AdderNet/pretrained/
然后检查目录的读写权限,确保当前用户拥有写入权限:
ls -ld /home/cc/research/AdderNet/pretrained/
如果权限不足,执行以下命令修改:
chmod 755 /home/cc/research/AdderNet/pretrained/
2. 排查文件路径与锁定问题
- 先尝试简化保存路径,比如保存到当前工作目录测试,排除路径解析问题:
torch.save(checkpoint, './minionn_test.pt') - 若目标文件已存在,可能被其他进程锁定,先删除旧文件再尝试保存:
rm -f /home/cc/research/AdderNet/pretrained/minionn.pt
3. 验证检查点字典的有效性
先将检查点数据存入临时变量,再执行保存,排除字典构造时的潜在问题:
def save_model(epoch): checkpoint = { 'epoch': epoch+1, 'model_state_dict': net.state_dict(), 'optimizer_state_dict': optimizer.state_dict(), } torch.save(checkpoint, '/home/cc/research/AdderNet/pretrained/minionn.pt')
同时确保net和optimizer对象在保存时处于有效状态,未被意外释放。
4. 检查系统与环境兼容性
- 确认磁盘空间是否充足:
df -h - 验证conda虚拟环境中的PyTorch版本是否正常,必要时重新安装:
# CPU版本示例,GPU版请替换为对应命令 conda install pytorch torchvision torchaudio cpuonly -c pytorch
内容的提问来源于stack exchange,提问作者Al A
相关产品推荐
相关产品推荐

