0


关于深度学习中的cuda编程,cuda相关介绍

深度学习中会涉及大量的、重复的矩阵运算、图形运算,而CPU对这种简单的加减法加速不够显著,可以使用GPU进行加速运算

CUDA是英伟达旗下的专门为深度学习加速运算的显卡,其对于简单的浮点运算、矩形运算相较于CPU加速了数倍不止

本文介绍CUDA编程,以及如何在PyTorch中配置CUDA环境,以实现深度学习模型的高效开发

1. CUDA 简介

CUDA(Compute Unified Device Architecture,统一计算设备架构)是由Nvidia开发的编程模型和并行计算平台。

在模式识别任务中,使用cuda进行GPU加速可以显著提升计算能力,通过并行化任务更快的执行简单矩阵操作

PyTorch提供了torch.cuda库来设置和运行CUDA操作

需要注意的是,cuda操作的数据被称为张量,其实就是数组,维度从一维到几十维度、上百维度不止,只是叫法不同而已。利用PyTorch的CUDA功能,可以创建张量并将其分配至GPU。完成分配后,所有计算操作都将在GPU上进行,确保结果也存储于该设备。

查看本地设备是否支持CUDA,最简单的方法就是在桌面上鼠标右键,出现下图的标志就是支持cuda加速

关于cuda 的安装不多赘述,其实不是很复杂,只是刚开始的时候经常配置失败,就觉得很困难了。其实在深度学习中,为了保证环境不被污染,新建虚拟环境是很正常的事情,也很简单,可以参考:Pytorch 配置 GPU 环境_pytorch gpu-CSDN博客

更多深度学习环境配置参考本专栏:深度学习环境配置篇_听风吹等浪起的博客-CSDN博客

2. 在pytorch中运行CUDA操作

安装成功后,输入下面命令,检查CUDA是否安装成功

import torch

print("Pytorch CUDA版本是:", torch.version.cuda)

成功的话会显示版本

然后检查是否支持GPU加速

import torch

print("系统是否支持CUDA:", torch.cuda.is_available())

返回True,环境就没问题了

当然,PyTorch CUDA还提供了以下功能

import torch

cuda_id = torch.cuda.current_device()
print("CUDA设备ID: ", torch.cuda.current_device())
print("当前CUDA设备名称: ", torch.cuda.get_device_name(cuda_id))

返回如下:

还可以通过指定ID来更改默认的CUDA设备:

import torch

torch.cuda.set_device(1)

3. CUDA 中的张量操作

我们上面介绍过,cuda中的数据类型是张量,也就是多维数组。而常见的读取图像啊、文本的,都是列表或者数组的形式,想要进行gpu加速,就需要类型转换,这里只做简单介绍,详细的教程之前也写过:Tensor 和 Numpy 相关操作_tensor只能在gpu上处理吗-CSDN博客

常用的cuda在pytorch中的命令:

  • tensor.device:返回张量所在的设备名称,默认是“CPU”
  • tensor.to(device_name) :用于将张量迁移到指定的设备。设置device_name为"CPU",张量就会在CPU上;设置为"cuda",张量则会在GPU上执行
  • tensor.cpu() : 将张量从当前设备传输到CPU

下述代码实现的功能,是张量在cpu和gpu上的运算,值得一提的是,张量可以在CPU和GPU上运行

import torch

x = torch.randint(1, 1000, (100, 100))      # 创建张量
print("设备名称: ", x.device)           # 最初的在cpu上

res_cpu = x ** 2        # cpu运算

x = x.to(torch.device('cuda'))      # 转移到cuda

print("传输后的设备名称: ", x.device)

res_gpu = x ** 2            # gpu运算
x.cpu()

返回如下:

4. 在机器学习中使用CUDA运算

当然在机器学习的具体训练中,不需要每次都要使用torch.device来转移数据,pytorch为我们提供了简单的方法

事实上,本身cuda加速的是前向传播、反向传播运算,只需要记住两种数据的运算需要在同一设备上即可,就是说cpu上的矩阵不能加上gpu上的矩阵

这样实际训练中就很简单,只需要把网络仍在cuda上。

因为数据需要和网络进行矩阵运算,所以数据也需要放在cuda上。

对于监督学习,真实的标签需要进行损失计算,那么标签也需要放在cuda上即可

CUDA提供了一种便捷的方法,可以将机器学习模型部署到不同的计算设备上:

使用

model.to(device_name) 

指定它运行在CPU或支持CUDA的GPU上

**其中,

"CPU"

代表在CPU上运行,而

"cuda"

则代表在GPU上运行。**

下述代码就是将实例化的resnet网络仍在cuda上的demo代码

import torch
import torchvision.models as models

device = 'cuda' if torch.cuda.is_available() else 'cpu'
# 实例化预训练模型
model = models.resnet18(pretrained=True)
# 将模型传输到支持CUDA的GPU
model = model.to(device)

模型成功迁移到支持CUDA的GPU之后,将数据和标签也放在cuda上即可加速模型的学习过程


本文转载自: https://blog.csdn.net/qq_44886601/article/details/140723764
版权归原作者 Ai 医学图像分割 所有, 如有侵权,请联系我们删除。

“关于深度学习中的cuda编程,cuda相关介绍”的评论:

还没有评论