热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:目录第1章软硬件的安装与装备1.1硬件的安装1.2GPU库的安装第2章应用程序对

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_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


推荐阅读
author-avatar
咖啡Spring_767
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有