[开发技巧]·PyTorch如何使用GPU加速(CPU与GPU数据的相互转换)
配合本文推荐阅读:PyTorch中Numpy,Tensor与Variable深入理解与转换技巧
关联阅读:
1.问题描述
在进行深度学习开发时,GPU加速可以提升我们开发的效率,速度的对比可以参照笔者这篇博文:[深度应用]·主流深度学习硬件速度对比(CPU,GPU,TPU)结论:通过对比看出相较于普通比较笔记本的(i5 8250u)CPU,一个入门级显卡(GPU MX150)可以提升8倍左右的速度,而高性能的显卡(GPU GTX1080ti)可以提升80倍的速度,如果采用多个GPU将会获得更快速度,所以经常用于训练的话还是建议使用GPU。
在PyTorch中使用GPU和TensorFlow中不同,在TensorFlow如果不对设备进行指定时,TensorFlow检测到GPU就会把自动将数据与运算转移到GPU中。而PyTorch类似于MxNet,需要显性的指定数据和运算放在哪里执行,这样的操作比较自由,却也有些繁琐。因为如果哪一步忘记转换了就会运行出错。
本文在数据存储的层面上,帮大家解析一下CPU与GPU数据的相互转换。让大家可以掌握PyTorch使用GPU加速的技巧。
2.原理讲解
使用GPU之前我需要安装PyTorch的GPU版本,建议使用conda安装,官方教程地址
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
检测是否可以使用GPU,使用一个全局变量use_gpu,便于后面操作使用
use_gpu = torch.cuda.is_available()
可以使用GPU,use_gpu的值为True,否则为False。当可以使用GPU,我们不想使用,可以直接赋值use_gpu = False
我们在进行转换时,需要把数据,网络,与损失函数转换到GPU上
1.构建网络时,把网络,与损失函数转换到GPU上
model = get_model()
loss_f = t.nn.CrossEntropyLoss()
if(use_gpu):
model = model.cuda()
loss_f = loss_f.cuda()
2.训练网络时,把数据转换到GPU上
if (use_gpu):
x,y = x.cuda(),y.cuda()
3.取出数据是,需要从GPU准换到CPU上进行操作
if(use_gpu):
loss = loss.cpu()
acc = acc.cpu()
进一步的对数据操作可以查看笔者这篇博文:[开发技巧]·PyTorch中Numpy,Tensor与Variable深入理解与转换技巧
欢迎大家关注小宋公众号《极简AI》带你学深度学习:这里收集了一些比较适合入门实战的PDF书籍,覆盖TensorFlow、PyTorch与MXNet。推荐的理由是通俗易懂,适合初学者研究学习。书籍列表如下:《简单粗暴TensorFlow2最新中文版》《动手学深度学习PyTorch最新中文版》《动手学深度学习MXNet最新中文版》
关注后,回复:书籍,领取。
基于深度学习的理论学习与应用开发技术分享,笔者会经常分享深度学习干货内容,大家在学习或者应用深度学习时,遇到什么问题也可以与我在上面交流知无不答。
出自CSDN博客专家&知乎深度学习专栏作家--小宋是呢