欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pytorch-cuda与todevice

程序员文章站 2022-04-18 20:05:29
...

一般的代码都是在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)

相关标签: 深度学习入门