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

news2024/11/15 7:38:39

深度学习中会涉及大量的、重复的矩阵运算、图形运算,而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上即可加速模型的学习过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1951025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

结合GB/T28181规范探讨Android平台设备接入模块心跳实现

技术背景 好多开发者在用我们Android平台GB28181设备接入模块的时候,更希望跟我们探讨一些协议规范方面,以便在现场对接时,可以知其然知其所以然。比如,有开发者提到,GB28181的状态消息报送这块到底要怎么实现&#x…

搭建Vue开发环境

一、下载Vue.js 进入官网教程安装 — Vue.js (vuejs.org) 下载开发版本到本地 二、安装 Vue Devtools 安装完成后

Spring Boot 与 MongoDB 整合指南

MongoDB MongoDB 是一种基于文档的NoSQL数据库,以其高性能、高可用性和易扩展性而著称。它使用 BSON(类似 JSON 的二进制格式)来存储数据,提供了灵活的数据模型,使得开发者可以更轻松地存储和查询复杂的数据结构。将M…

Navicat premium最新【16/17 版本】安装下载教程,图文步骤详解(超简单,一步到位,免费下载领取)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Navicat是一款快速、可靠且功能全面的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设计。以下是对Navicat的详细介绍: 一、产品概述 开发目的:Navicat旨在通过其直观和设计…

Linux:core文件无法生成排查步骤

1、进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改。 使用ulimit -a 命令检查是否开启core文件生成限制 如果发现-c后面的结果是0,就临时添加环境变量ulimit -c unlimited,之后在启动程序观察是否有core生成,如果…

Qt 学习第二天:创建第一个Qt程序

【最新QT从入门到实战完整版|传智教育】04 创建第一个Qt程序 一、命名规范(驼峰命名法) 类名: 首字母大写,单词和单词之间首字母大写 函数名和变量名: 首字母小写,单词和单词之间首字母大写 二、快捷…

零食商城管理系统

目录 一、项目背景与目标 1.1 项目背景 1.2 项目意义 1.3 国内外研究现状 1.4 开发工具介绍 二、项目内容与分工 三、 时间表与进度 1. 需求分析阶段: 2. 系统设计阶段: 3. 系统开发阶段: 4. 系统测试阶段: 5. 部署与上…

Selenium 的使用

selenium 是一个自动化测试工具,利用它可以驱动浏览器完成特定的操作,例如点击,下拉等,还可以获取浏览器当前呈现的页面的源代码,做到所见即所爬,对于一些 JavaScript 动态渲染的界面来说,这种爬…

WEB攻防-通用漏洞-SQL 读写注入-MYSQLMSSQLPostgreSQL

什么是高权限注入 高权限注入指的是攻击者通过SQL注入漏洞,利用具有高级权限的数据库账户(如MYSQL的root用户、MSSQL的sa用户、PostgreSQL的dba用户)执行恶意SQL语句。这些高级权限账户能够访问和修改数据库中的所有数据,甚至执行…

WEB集群-Tomact集群

linux云计算中小企业规模集群架构设计图----总结 在写今天内容前,小编绘制一个图:我设计了linux云计算中小企业规模集群架构设计图(也可根据业务需求,增加业务变成大型企业架构设计图) 知识补充–故障案例-https no s…

【Golang 面试基础题】每日 5 题(十)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

Python爬虫(6) --深层爬取

深层爬取 在前面几篇的内容中,我们都是爬取网页表面的信息,这次我们通过表层内容,深度爬取内部数据。 接着按照之前的步骤,我们先访问表层页面: 指定url发送请求获取你想要的数据数据解析 我们试着将以下豆瓣读书页…

WPF代办事项应用

目录 一 设计原型 二 后台源码 一 设计原型 添加代办事项页面: 二 后台源码 Model: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 待办事项应用.DataModel {pub…

数据结构(Java):Map集合Set集合哈希表

目录 1、介绍 1.1 Map和Set 1.2 模型 2、Map集合 2.1 Map集合说明 2.2 Map.Entry<K&#xff0c;V> 2.3 Map常用方法 2.4 Map注意事项及实现类 3、Set集合 3.1 Set集合说明 3.2 Set常用方法 3.3 Set注意事项及其实现类 4、TreeMap&TreeSet 4.1 集合类TreeM…

头歌最小生成树 ------习题

一、背包问题 1.理解&#xff1a;背包问题相当于最小生成树&#xff0c;也就是线性规划最优解 2.公式&#xff1a; M: 背包的总重量 w&#xff1a;物品 i 的重量 p: 物品 i 的价值 3.基本背包练习 4.完全背包问题&#xff1a;每种物品有无限件 >>> 开头加一个for…

面试常考Linux指令

文件权限 操作系统中每个文件都拥有特定的权限、所属用户和所属组。权限是操作系统用来限制资源访问的机制&#xff0c;在 Linux 中权限一般分为读(readable)、写(writable)和执行(executable)&#xff0c;分为三组。分别对应文件的属主(owner)&#xff0c;属组(group)和其他用…

SearchGPT 搜索引擎发布:让信息检索变得简单

如今的互联网时代&#xff0c;我们每天都在与海量数据搏斗。无论是学习、工作还是生活&#xff0c;我们都需要快速准确地获取所需信息。然而&#xff0c;传统搜索引擎往往让人感到力不从心&#xff1a;关键词需要精准&#xff0c;结果泛滥成灾&#xff0c;有用信息如大海捞针。…

如何快速抓取小红书帖子评论?两大实战Python技巧揭秘

摘要&#xff1a; 本文将深入探讨两种高效的Python方法&#xff0c;助您迅速获取小红书文章下方的所有评论&#xff0c;提升市场分析与用户洞察力。通过实战示例与详细解析&#xff0c;让您轻松掌握数据抓取技巧&#xff0c;为您的内容营销策略提供有力支持。 如何快速抓取小…

Linxu系统:hwclock命令

1、命令详解&#xff1a; hwclock命令用于显示与设定硬件时钟。它是一种访问硬件时钟的工具&#xff0c;可以显示当前时间&#xff0c;将硬件时钟设置为指定的时间&#xff0c;将硬件时钟设置为系统时间&#xff0c;以及从硬件时钟设置系统时间。您还可以定期运行hwlock以插入或…

raise JSONDecodeError(“Expecting value”, s, err.value) from None

raise JSONDecodeError(“Expecting value”, s, err.value) from None 目录 raise JSONDecodeError(“Expecting value”, s, err.value) from None 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是…