pytorch

PyTorch如何使用GPU,训练神经网络时哪些东西可以传到GP

2022-11-24  本文已影响0人  午字横

1:检测是否可以使用GPU
use_gpu =torch.cuda.is_available()
> 当可以使用GPU,我们不想使用,可以直接赋值use_gpu = False。
2:使用GPU的三种方式

with torch.cuda.device(1):
    # allocates a tensor on GPU 1
    a = torch.tensor([1., 2.], device=cuda)
 
    # transfers a tensor from CPU to GPU 1
    b = torch.tensor([1., 2.]).cuda()
    # a.device and b.device are device(type='cuda', index=1)
 
    # You can also use ``Tensor.to`` to transfer a tensor:
    b2 = torch.tensor([1., 2.]).to(device=cuda)
    # b.device and b2.device are device(type='cuda', index=1)
 
#这三种方式没什么区别,但都需要先判断是否又GPU才能使用,个人觉得.to(device)更好用,在使用前先使用(1)中的代码判断,后面直接使用use_gpu即可。

3:哪些数据能上传到GPU运算

#(1)判断GPU是否可用
if torch.cuda.is_available():
    device = torch.device('cuda')
    cudnn.benchmark = True
else:
    device = torch.device('cpu')
 
#(2)构建网络时,把网络,与损失函数转换到GPU上
model = CNN().to(device)
loss = nn.CrossEntropyLoss().to(device)
 
#(3)训练网络时,把数据转换到GPU上
x, y = x.to(device), y.to(device)
 
# 注,只有tensor类型才能上传到GPU上,故需要对numpy数据进行转换成rensor类型
# torch.tensor(x) 或 torch.from_numpy(x) 
#两者的区别见 https://blog.csdn.net/github_28260175/article/details/105382060
 
#(4)对训练的输出结果有些需要使用np的函数进行操作,需先将输出结果转到CPU上,并转成numpy类型,再使用np的函数
output = (model(x)).cpu().numpy()

4:代码释意:cudnn.benchmark = True

通过如上设置让内置的cuDNN的auto-tuner自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。
1.网络的输入数据维度或类型上变化不大,设置为true可以增加运行效率;
2.如果网络的输入数据在每个iteration都变化的话,会导致cnDNN每次都会去寻找一遍最优配置,这样反而会降低运行效率;

cuDNN是英伟达专门为深度神经网络所开发出来的GPU加速库,针对卷积、池化等等常见操作做了非常多的底层优化,比一般的GPU程序要快很多。在使用cuDNN的时候,默认为False。
设置为True将会让程序在开始时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法,进而实现网络的加速。适用场景是网络结构固定,网络输入形状不变(即一般情况下都适用)。反之,如果卷积层的设置一直变化,将会导致程序不停地做优化,反而会耗费更多的时间。

原文链接: https://blog.csdn.net/qq_38101208/article/details/110481390

上一篇 下一篇

猜你喜欢

热点阅读