今天在导入之前训练好的模型的时候出现了这个问题,现在来记录一下是为什么
是因为之前保存模型的时候,保存的模型参数回记录到自己是存在哪个GPU上的,叫做allocation这个参数。所以在读入的时候,导入模型会默认放在之前的那个GPU上。(我出现这个问题是因为之前用的那块卡上现在内存被占满了,但是另一块一直没人用)
例如之前在GPU0上训练的参数,在再次读入的时候也会默认数据是被放入到第0块GPU上去的。
要解决该问题:
在
torch.load('....pkl', map_location='cuda:0') # 就是在有cuda的地方都把它放到'0'设备上,我是这么理解的,不一定正确 QAQ(有待考证)
map_location={'cuda:1':'cuda:0'} # 有些博客中也是这么写的,可能也就是里面有cuda:1 的地方都用字典的方式变成'cuda:0'