报错提示:
trainer.model.save(self.dir, epoch, is_best=is_best)
AttributeError: 'DataParallel' object has no attribute 'save'
源码分析:
trainer.model.save(self.dir, epoch, is_best=is_best)
上述代码为使用单机多卡并行前的代码,我的并行代码实现如下:
os.environ["CUDA_VISIBLE_DEVICES"] = "3,2,1"
model = torch.nn.DataParallel(model,device_ids=[0,1]).cuda()#括号里的model就不细说了
原因分析:AttributeError: ‘DataParallel‘ object has no attribute ‘save‘
在 torch 多GPU训练下,存储的是整个模型而不是model.state_dict(), 所以我们在调用model时需要使用model.module方式。在使用上述修改方法后,代码如下所示:
trainer.model.module.save(self.dir, epoch, is_best=is_best)