互联网技术 / 互联网资讯 · 2024年1月17日 0

动态计算图的GPU操作支持

动态计算图的GPU操作支持动态计算图

在深度学习中使用 PyTorch 的主要原因之一,是我们可以自动获得定义的函数的梯度/导数。

当我们操作我们的输入时,会自动创建一个计算图。该图显示了如何从输入到输出的动态计算过程。

为了熟悉计算图的概念,下面将为以下函数创建一个:

 动态计算图的GPU操作支持

这里的 是我们的参数,我们想要优化(最大化或最小化)输出 . 为此,我们想要获得梯度.

在下面的代码中,我将使用[1,2,3]作输入。

# 只有浮动张量有梯度 x = Torch.aRange(1,4, dtype=Torch.float32, RequiRes_gRad=TRue)  pRint(“X”, x)  # X tensoR([1., 2., 3.], RequiRes_gRad=TRue) 

现在让我来一步一步地构建计算图,了解每个操作是到底是如何添加到计算图中的。

 

a = x + 2 b = a ** 2 c = b + 3 y = c.Mean() pRint(“Y”, y) # Y tensoR(19.6667, gRad_fn=) 

使用上面的语句,我们创建了一个类似于下图的计算图(通过tensoRBOARd )查看:

动态计算图的GPU操作支持

我们计算 a 基于输入x 和常数2, b是 a平方等等操作。计算图通常以相反的方向可视化(箭头从结果指向输入)。

我们可以通过backwaRd()在最后一个输出上调用函数来对计算图执行反向传播,这样可以,计算了每个具有属性的张量的梯度RequiRes_gRad=TRue:

y.backwaRd() 

最后打印x.gRad就可以查看对应梯度。

 动态计算图的GPU操作支持

GPU支持操作

在PyTorch中GPU 可以并行执行数以千计的小运算,因此非常适合在神经网络中执行大型矩阵运算。

「CPU 与 GPU的区别」

动态计算图的GPU操作支持

PyTorch 使用GPU,需要搭建NVIDIA 的CUDA和cuDNN。

下面代码,检查是否有可用的 GPU:

 动态计算图的GPU操作支持

现在创建一个张量并将其推送到GPU设备:

device = Torch.device(“cuda”) if Torch.cuda.is_avAIlable() else Torch.device(“CPu”) pRint(“Device”, device) x = x.to(device) pRint(“X”, x)  # Device cuda # X tensoR([1., 1., 1.], device=””cuda:0””) 

cuda 旁边的零表示这是计算机上的第0个 GPU 设备。因此,PyToRch 还支持多 GPU 系统,

下面将CPU 上的大型矩阵乘法的运行时间与 GPU 上的运算进行比较:

动态计算图的GPU操作支持

根据系统中的配置而定,GPU加速提高模型的训练速度。