PyTorch错误解决方案及技巧

    • 报错:RuntimeError: Attempting to deserialize object on CUDA device 2 but torch.cuda.device_count() is 1
    • 原因:在使用Pytorch加载模型时报错。加载的模型是用两个GPU训练的,而加载模型的电脑只有一个GPU,所以会出错。
    • 解决:model = torch.load(model_path)
      改为:model = torch.load(model_path, map_location='cuda:0')
      如果是4块到2块:就把map_location改为:map_location={'cuda:1': 'cuda:0'}
  1. PyTorch多GPU的处理机制
    使用多GPU时,应该记住pytorch的处理逻辑是:

1.在各个GPU上初始化模型。
2.前向传播时,把batch分配到各个GPU上进行计算。
3.得到的输出在主GPU上进行汇总,计算loss并反向传播,更新主GPU上的权值。
4.把主GPU上的模型复制到其它GPU上。

  1. nn.Module.cuda() 和 Tensor.cuda() 的作用效果的区别
    无论是对于模型还是数据,cuda()函数都能实现从CPU到GPU的内存迁移,但是他们的作用效果有所不同。
    • 对于nn.Module:
model = model.cuda() 

model.cuda()

上面两句能够达到一样的效果,即对model自身进行内存迁移。

- 对于Tensor:

和nn.Module不同,调用tensor.cuda()只是返回这个tensor对象在GPU内存上的拷贝,而不会对自身进行改变。因此必须对tensor进行重新赋值,即tensor=tensor.cuda().

你可能感兴趣的:(PyTorch错误解决方案及技巧)