pytorch-cuda与todevice

一般的代码都是在GPU上运行,所以对相关模型与变量在CPU与GPU之间进行是十分必要的。转换的过程中经常可以见到两种格式,在此对这两种格式进行分析与总结。

1、.cuda()
一般的可以对模型和相应的数据使用.cuda()处理,这种方式可以将内存中的数据复制到GPU的显存中去。

.cuda() 操作默认使用GPU 0也就是第一张显卡来进行操作。当我们想要存储在其他显卡中时可以使用 .cuda(<显卡号数>) 来将数据存储在指定的显卡中。对于不同类型的变量,我们是不可以对他们直接进行计算的;存储在不同位置中的变量也是不可以直接进行交互计算的。

换句话说也就是比如 torch.FloatTensor 是不可以直接与 torch.cuda.FloatTensor 进行基本运算的。位于不同GPU显存上的数据也是不能直接进行计算的。

2、to(device)
这代表将模型加载到指定设备上,其中,device=torch.device(“cpu”)代表的使用cpu,而device=torch.device(“cuda”)则代表的使用GPU。

device = torch.device("cuda:0") # use cuda device 0
# Example of a function that takes in a torch.device
cuda1 = torch.device('cuda:1') #use cuda device 1
torch.randn((2,3), device=cuda1)

当我们指定了设备之后,就需要将模型加载到相应设备中,此时需要使用model=model.to(device),将模型加载到相应的设备中。

2.1 将由GPU保存的模型加载到CPU上。
将torch.load()函数中的map_location参数设置为torch.device(‘cpu’)
device = torch.device(‘cpu’)
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location=device))

2.2 将由GPU保存的模型加载到GPU上。
确保对输入的tensors调用input = input.to(device)方法。
device = torch.device(“cuda”)
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.to(device)

2.3 将由CPU保存的模型加载到GPU上。
确保对输入的tensors调用input = input.to(device)方法。map_location是将模型加载到GPU上,model.to(torch.device(‘cuda’))是将模型参数加载为CUDA的tensor。最后保证使用.to(torch.device(‘cuda’))方法将需要使用的参数放入CUDA。
device = torch.device(“cuda”)
model = TheModelClass(*args, **kwargs)
model.load_state_dict(torch.load(PATH, map_location=“cuda:0”)) # Choose whatever GPU device number you want
model.to(device)

你可能感兴趣的:(深度学习入门)