[开发技巧]·PyTorch如何使用GPU加速(CPU与GPU数据的相互转换)

[开发技巧]·PyTorch如何使用GPU加速(CPU与GPU数据的相互转换)

配合本文推荐阅读:PyTorch中Numpy,Tensor与Variable深入理解与转换技巧

关联阅读:

[深度应用]·主流深度学习硬件速度对比(CPU,GPU,TPU)

[开发技巧]·TensorFlow&Keras GPU

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博客专家&知乎深度学习专栏作家--小宋是呢

### 使用 GPU 加速 PyTorch 的模型训练推理 为了充分利用 GPU 提供的强大并行计算能力,在 PyTorch 中可以轻松实现 CPUGPU 之间的切换。以下是关于如何配置和使用 GPU加速 PyTorch 模型训练或推理的具体方法。 #### 1. 检查 CUDA 是否可用 在开始之前,需确认当前环境是否支持 CUDA 并能够访问 GPU 设备。这可以通过调用 `torch.cuda.is_available()` 函数完成[^1]。 ```python import torch if torch.cuda.is_available(): device = torch.device("cuda") # 如果有CUDA,则选择GPU作为设备 else: device = torch.device("cpu") # 否则默认使用CPU ``` #### 2. 将模型迁移到指定设备 一旦定义好了神经网络模型实例,就可以通过 `.to(device)` 方法将其移动至目标设备(无论是 CPU 还是 GPU)。此操作确保所有的参数都存储于同一硬件资源之上[^3]。 ```python model = YourModel() # 假设这是您的自定义模型类 model.to(device) # 移动模型到选定的device (GPU/CPU) ``` #### 3. 数据加载器中的设备设置 当构建数据集以及相应的 DataLoader 时,应考虑将输入的数据也同步迁移至对应的处理单元上。通常情况下是在每次迭代获取批次样本之后立即执行该动作[^2]。 ```python for inputs, labels in dataloader: inputs, labels = inputs.to(device), labels.to(device) # 转移数据GPU outputs = model(inputs) # 执行前向传播 loss = criterion(outputs, labels) # 计算损失函数值 ... ``` #### 4. 推理阶段的结果返回 尽管大部分时间我们希望保持整个流程都在高速度的图形处理器上面运行,但在某些特定场景下可能还需要把最终预测结果拷贝回到中央处理器内存里去进一步分析或者保存文件等操作。 ```python with torch.no_grad(): predictions = model(input_tensor.to(device)) # 在评估模式下进行推断 prediction_on_cpu = predictions.cpu().numpy() # 可选:如果需要的话转换成NumPy数组形式 ``` 以上就是基于 PyTorch 实现 GPU 加速的主要步骤概述。它不仅简化了开发人员的工作负担而且还极大地提高了大型深度学习项目的效率。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宋是呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值