关于pytorch tensor/params没有放在同一个设备上的经验

前言

用pytorch做深度学习时候,全部tensor和变量都要放到同一个设备上, i.e. GPU or CPU。否则会报一下错误:

RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu! (when checking argument for argument mat2 in method wrapper_mm)

出现以上bug,目前我遇到的有两种情况:
(1)存在tensor没有放到GPU上,比较多的是中途生成的mask。通过print(tensor.is_cuda)对可以tensor进行测试,返回False说明没有在GPU上。
(2)模型参数没有放到GPU上,比较多的情况是以list形式生成多个Module子类对象时。这种情况下注意要使用nn.ModuleList([layer() for _ in range(n)])而不是普通的list。前者会自动讲模型参数注册进网络并放置于整个网络所处的设备,而后者不会。

你可能感兴趣的:(bugs,pytorch,深度学习,人工智能)