[Pytorch系列-44]:如何使能GPU训练, 提升训练效率

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121277305


目录

第1章 软硬件的安装与装备

1.1 硬件的安装

1.2 GPU库的安装

第2章 应用程序对GPU的使用

2.1  GPU相关软件版本检查

2.2 获取当前的device的类型

2.3 把OS相关的操作转移到GPU

2.4 把模型转移到GPU上(必选)

2.5 把loss转移到GPU上(可选)

2.6 把数据集转移到GPU上(必须)

2.7 在GPU训练


第1章 软硬件的安装与装备

1.1 硬件的安装

(1条消息) [人工智能-深度学习-38]:环境搭建 - 训练主机硬件选择全指南(CPU/GPU/内存/硬盘/电源)_文火冰糖(王文兵)的博客-CSDN博客https://blog.csdn.net/HiWangWenBing/article/details/121207211

1.2 GPU库的安装

(1)GPU驱动的安装

(2)GPU CUDU的安装

(3)GPU CUDNN的安装

(4)深度学习框架的安装

(1条消息) [人工智能-深度学习-39]:开发环境 - GPU进行训练安装与搭建(Pytroch、TensorFlow、Nvidia CUDA)详细过程_文火冰糖(王文兵)的博客-CSDN博客https://blog.csdn.net/HiWangWenBing/article/details/121241620

第2章 应用程序对GPU的使用

2.1  GPU相关软件版本检查

import torch             # torch基础库

print("Hello World")
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.version.cuda)
print(torch.backends.cudnn.version())

2.2 获取当前的device的类型

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)
cuda:0

2.3 把OS相关的操作转移到GPU

import os

# 使用第一张与第三张GPU卡

os.environ["CUDA_VISIBLE_DEVICES"] = "0,3"

2.4 把模型转移到GPU上(必选)

net = AlexNet()
#方法1:
net.cuda()      # 转移到CUDA上

#方法2:
net.to(device)  # 转移到指定的device上

2.5 把loss转移到GPU上(可选)

# 这一步不做也可以,因为loss是根据out、label算出来的
# 只要out、label在CUDA上,loss自然也在CUDA上了,
# 有人发现不转移到CUDA上准确率竟然降低了1%
criterion = nn.CrossEntropyLoss()

# 方法1:
criterion = criterion.cuda()   # 把loss转移到GPU上

# 方法2:
criterion .to(device)           # 把loss转移到指定device上

2.6 把数据集转移到GPU上(必须)

(1)CPU上的数据集

#download the dataset
train_set = CIFAR10(root = "../datasets/cifar10", train=True, transform=data_tf, download=True)

train_data = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)

上述代码中,dataset是把所有的input, label都制作成了一个大的多维数组。

dataloader是在这个大的多维数组里采样制作成batch,用这些batch来训练。

(2)把数据转移到GPU上

for img, label in train_data:
    i = i + 1
    img = img.cuda()          #把数据迁移到CUDA上, 或使用to(device)
    img = Variable(img)       

    label = label.cuda()      #把label迁移到CUDA上,或使用to(device)
    label =Variable(label)

    out = net(img)                #the output should have the size of (N,10)

遍历batch的时候,首先要把拿出来的Image、label都转移到CUDA上,这样接下来的计算都是在CUDA上了。

2.7 在GPU训练

GPU不是单一的运算,而是有各种运算的集合。

当上述数据运算指定后,训练就会在GPU上执行。

备注:

并非有所有的运算都在GPU上,如数据读取,如CPU到GPU的拷贝等操作,都离不开CPU。


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121277305

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值