【PyTorch如何实现CPU、GPU相互转换?】
拒绝CPU,PyTorch如何切换GPU计算?
问题的提出
写代码时非常困惑,明明下载了cuda支持包和PyTorch-GPU版本,进行NN和CNN时却是用CPU在进行计算(CPU利用率超90%,GPU利用率不到5%),如下图:
首先我检查了PyTorch是否安装成功,输入命令print(torch.cuda.is_available()),返回值为True,说明PyTorch是安装成功了,这可让我有点捉急。
看了许多文章终于解决了深度学习时CPU和GPU之间切换的问题,以下是一些总结。
1.CPU_to_GPU——定义device对象
深度学习前,可以调用torch.device函数定义当前设备,如要使用GPU计算 输入‘cuda’,使用CPU计算则输入‘cpu’。
为了以防万一,加上if判断语句,利用torch.cuda.is_available()对当前环境是否成功安装GPU版本的Pytorch进行判断,如果成功安装则选择GPU进行计算,否则CPU,代码如下:
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
反之,也可GPU_to_CPU。
如果成功安装GPU版本的Pytorch,返回值为True,相反为False。接下来,需要使用Tensor.to(device)方法进行切换操作:
- 将Tensor数据转入GPU:
x_train,y_train,x_valid,y_valid = map(torch.tensor,(x_train,y_train,x_valid,y_valid))x_train = x_train.to(device)y_train = y_train.to(device)x_valid = x_valid.to(device)y_valid = y_valid.to(device)
- 别忘了将model也转入GPU:
model = model.to(device)
2.CPU_to_GPU——.cuda()方法
我们可以直接使用Tensor.cuda()方法将张量用GPU调用
# 数据用GPU调用data = data.cuda()target = target.cuda()# 将model用GPU调用net = CNN()net = net.cuda()
3.GPU_to_CPU——.cpu
结束GPU计算后,需要转换回CPU调用模式才能进行相应的数值numpy计算,否则有可能报错,切换格式为Tensor.cpu()。
print(100. * train_r[0].cpu().numpy() / train_r[1])
End
问题就解决了:
补充:
尽量直接避免使用data.cuda() ,可能会报错,建议使用data = data.cuda()
来源地址:https://blog.csdn.net/fly_ddaa/article/details/129999425
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341