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)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值