训练了个U-net,结果跑了几个epoch后,总是 RuntimeError: Unknown error -1。
我参考了https://www.jianshu.com/p/1d630843a844?utm_source=oschina-app的解决方法。一个原因是存储空间满了,还有就是pytorch自身的bug。
我开始是不相信自己内存不够的,试了第二种方法不管用,看了内存空间后确实满的不行了。但是为什么还能跑几轮呢?
原因在于,我每跑完一轮后,都执行下面代码,存一下state_dict,用于之后推理或恢复训练的通用检查点。
if epoch % epoch_save_frequency == 0:print('save start: epoch_{}.pt'.format(epoch))checkpoint = {'state_dict': net.module.state_dict(),'optimizer': optimizer.state_dict()}checkpoint_save_path = osp.join(model_save_dir, 'epoch_{}.pt'.format(epoch))torch.save(checkpoint, checkpoint_save_path)
之前没太在意,但是这次内存不够,我猜测应该是训练期间保存文件的问题,就发现每次保存的state_dict居然有240M。
为什么state_dict这么大,还需要参考:
https://pytorch.org/tutorials/beginner/saving_loading_models.html#