作者:咖啡Spring_767 | 来源:互联网 | 2023-09-06 08:03
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_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