11.3 GPU使用

本文详细介绍了PyTorch中如何在CPU与GPU之间迁移数据,使用CUDA包中的常用方法,多GPU并行运算的机制以及GPU模型加载过程中可能遇到的问题和解决方案。通过实例展示了张量和模型在不同设备间转换的方法,并讨论了CUDA_VISIBLE_DEVICES环境变量的用途。
摘要由CSDN通过智能技术生成

一、CPU 与 GPU 

二、如何使用pytorch在CPU与GPU之间进行数据迁移

三、CUDA包中常用的方法

四、多GPU并行运算的机制

五、GPU模型加载过程中的常见问题

 

这节课来学习pytorch如何使用GPU。

 

一、CPU 与 GPU 

CPU:中央处理器,主要包括控制器和运算器。

GPU:图像处理器。为什么成为图像处理器呢?因为在早起计算机中,处理统一的,五依赖的大规模数据运算,主要在图形、图像这个任务中,所以这个处理器就称为图形处理器。

示意图是两个处理器的差异。黄色为控制单元,绿色为计算单元,橙色为存储单元。我们可以看到,在GPU中,绿色面积占到绝大部分,而在CPU中,计算单元是比较少的。

 

二、如何使用pytorch在CPU与GPU之间进行数据迁移

处理器要进行数据运算,运算的两个数据必须要在同一个处理器上,要么都在GPU上,要么都在CPU上。(这个问题不知道对不对,视频中这么讲的,但是我实验发现也能运行。见【例4】)

在pytorch中,如何在CPU与GPU之间来回切换呢?

其实pytorch提供了一个非常简便的方法:to()。

从CPU放到GPU:  data.to("cuda")

从GPU放到CPU: data.to("cpu")

data通常会有两种数据类型:1. Tensor张量  2. Module模型

to()函数除了可以转移设备,还可以转换数据类型。下面来学习这两种数据类型的to()函数。

1. tensor转换数据类型

 x = torch.ones((3,3))

 x = x.to(torch.float64)    #把x的数据类型从float32位转换成float64位。

2. tensor转换设备

x = torch.ones((3,3))

x = x.to("cuda")             #把X迁移到GPU上

注意:x2 = x.cuda() 这个方法也是将张量迁移到GPU中,但是这个方法是pytorch0.4.0之前的一个方法,现在已经弃用。

3. Module改变数据类型

linear = nn.Linear(2,2)

linear.to(torch.double)   #linear中的所有数据类型都变成float64

4. Module改变设备

linear = nn.Linear(2,2)
gup1 = torch.device("cuda")
linear.to(gpu1)                  #迁移到GPU上

张量的to()函数与Module的to()有什么区别?

张量的to()函数不会执行inplace操作,因此需要用“=”进行赋值。【例1】。而Module的to()函数会执行inplace操作。【例2】

 

例1:

结果:

可以看到内存地址是不同的。说明张量的to()函数不会执行inplace操作。

 

例2:

结果:

 

例3:在GPU上运算得到的结果,还是在GPU上。

结果:

 

例4:如果模型在GPU上,数据在CPU上

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值