基于Pytorch深度学习——GPU安装/使用

news2025/1/12 20:57:23

本文章来源于对李沐动手深度学习代码以及原理的理解,并且由于李沐老师的代码能力很强,以及视频中讲解代码的部分较少,所以这里将代码进行尽量逐行详细解释
并且由于pytorch的语法有些小伙伴可能并不熟悉,所以我们会采用逐行解释+小实验的方式来给大家解释代码

可能听说过深度学习的小伙伴们都知道,在如今的年代,深度学习早就是几乎人人都可以使用的玩意,不再是以前只有世界顶级的高端实验室才有机会使用的有钱人的游戏。这几乎全部得益于我们GPU的问世

查看自己的CUDA版本

windows系统

我们可以了解到,看李沐老师的课有很多人使用的并不是云服务器,而是自己的本地开发环境,所以我们专门分出windows版本的使用教程

第一步:打开cmd

我们可以先按住win+R键,然后输入cmd,接着就会出现下面这样的一个黑框:
在这里插入图片描述

输入指令查询

我们在黑框中输入nvidia-smi。这个指令需要注意的地方是一定不要自己自作主张去添加空格
在这里插入图片描述
接着我们就可以看到如下的环境,这里我们的Driver Version为528.92,CUDA的版本为12.0

Jupyter Notebook查询

用这个查询就比较简单,我们只需要在代码界面输入

!nvidia-smi

同样需要注意的是不要自己加一些空格

导入模块以及查看CPU和GPU

import torch
from torch import nn
torch.device('cpu'),torch.cuda.device('cuda')

如果这里出现了报错或者其他的警告,我们可以先暂时不管,文章下面会继续解决

查看GPU个数以及修复BUG

torch.cuda.device_count()

这段代码输入后,大部分人会得到两种答案:一种是确实返回了自己CUDA的个数,还有一种就是自己原本有GPU的电脑,但是这里返回的是0
如果小伙伴们是第一种情况的话,那么问题不算特别大,我们可以继续下面的操作,这里我们会针对第二种情况提出解决办法:

device_count()为0解决办法

在这种情况下,大概率是pytorch的安装出现了问题,我们可以重新安装一次pytorch
pytorch下载地址:pytorch的下载地址,这个界面可能需要较长的时间打开,如果显示连接失败的话可以多试几次或者进行科学上网
进入到官网后,我们可以找到类似于下面的一个界面
在这里插入图片描述
我们一般选择Stable的Pytorch Build
然后根据你自己的系统选择Your OS
在安装包的选择上我们选择pipconda都可以,但是我个人建议选择pip,因为pip可以使用一些其他的源,例如清华源等等
我们这里需要讲解的是我们的Compute Platform的选择,这里我们一定要选择CUDA版本的,那么我们应该如何选择呢?
还是回到上面我们查看CUDA版本的那个地方
在这里插入图片描述
我们可以看到我这里的CUDA的版本是12.0,我们只可以选择Pytorch对应CUDA版本小于等于自己本地版本的
所以这里我们只能选择CUDA11.8版本
接着复制下面的Command,然后到自己的环境下进行pip安装即可
安装完成之后,在自己的环境下输入下面代码:

torch.cuda.is_available()

如果返回的是True,说明安装成功,cuda可以使用

寻找电脑的GPU

def try_gpu(i=0):
    # 如果存在GPU就返回gpu(i),否则返回cpu
    if torch.cuda.device_count() >= i+1:
        return torch.device(f'cuda:{i}')
    return torch.device('cpu')
    
def try_all_gpus():
    # 返回所有的GPU,如果不存在GPU就返回CPU
    devices = [
        torch.device(f'cuda:{i}') for i in range(torch.cuda.device_count())
    ]
    return devices if devices else [torch.device('cpu')]

try_gpu(),try_gpu(10),try_all_gpus()

这一段代码,李沐老师的主要目的是为了看看自己计算机或者云服务器中是否存在GPU环境,如果存在GPU环境的话就返回GPU,如果不存在的话就返回CPU
我这边的运行结果为

>>>(device(type='cuda', index=0),
 device(type='cpu'),
 [device(type='cuda', index=0)])

可能让初学者有疑惑的是,为什么我这里try_gpu(10)返回的是一个CPU,那是因为我本地电脑只有一块3050的GPU,try_gpu(10)的意思是寻找第10块GPU,而我电脑并没有10块GPU,所以就默认返回CPU

数据转存到GPU

x = torch.tensor([1,2,3])
x.device 
>>> device(type='cpu')

这一段代码我们可以看出,我们一般普通创建的变量都会优先创建在CPU的内存上,那么如果我们需要将它们创建在我们的GPU上,我们应该怎么做呢

X = torch.ones(2,3,device=try_gpu())
X
>>> tensor([[1., 1., 1.],
        [1., 1., 1.]], device='cuda:0')

我们修改device参数,成功的将X存放在了GPU上面

神经网络与GPU

这一块将是我们后面的重点,因为后面我们讲解卷积神经网络的时候,需要进行大量的GPU的并行运算

net = nn.Sequential(nn.Linear(3,1))
net = net.to(device=try_gpu())
net(X)
>>>tensor([[0.7873],
        [0.7873]], device='cuda:0', grad_fn=<AddmmBackward0>)
        
net[0].weight.data.device
>>>device(type='cuda', index=0)

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

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

相关文章

用git上传本地文件到github

两种方式&#xff1a;都需要git软件&#xff08;1&#xff09;VScode上传 &#xff08;2&#xff09;直接命令行&#xff0c;后者不需要VScode软件 &#xff08;1&#xff09;vscode 上传非常方便&#xff0c;前提是下载好了vscode和git软件 1 在项目空白处右击&#xff0c;弹…

字符函数与字符串函数(2)

遇见她如春水映莲花 字符函数与字符串函数&#xff08;2&#xff09; 前言一、strcatstrncat 二、strcmpstrncmp在这里插入图片描述 三、strstr四、strtok五、strerror总结 前言 根据上期字符函数与字符串函数我们可以了解到字符函数与个别字符串函数的用法&#xff0c; 那么接…

手写一个uart协议——rs232

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1 波形设计1.3.2 代码实现与tb1.3.4 顶层设计1.3.3 仿真 本篇内容&#xff1a; 一、RS232的回环测试 上位机…

改变视觉创造力:图像合成中基于样式的生成架构的影响和创新

原文地址&#xff1a;revolutionizing-visual-creativity-the-impact-and-innovations-of-style-based-generative 2024 年 4 月 30 日 介绍 基于风格的生成架构已经开辟了一个利基市场&#xff0c;它将机器学习的技术严谨性与类人创造力的微妙表现力融为一体。这一发展的核…

4.3 JavaScript变量

4.3.1 变量的声明 JavaScript是一种弱类型的脚本语言&#xff0c;无论是数字、文本还是其他内容&#xff0c;统一使用关键词var加上变量名称进行声明&#xff0c;其中关键词var来源于英文单词variable&#xff08;变量&#xff09;的前三个字母。 可以在声明变量的同时对其指定…

汇川AM400PLC通过EtherCAT总线控制禾川X3E伺服使能和点动控制

进行通信之前需要安装禾川X3E的XML文件&#xff0c;具体方法如下&#xff1a; 1、汇川AM400PLC和X3E通信配置 汇川AM400PLC和禾川X3E伺服EtherCAT通信-CSDN博客文章浏览阅读29次。1、汇川H5UPLC和X3E伺服EtherCAT总线控制汇川H5U PLC通过EtherCAT总线控制SV660N和X3E伺服_伺服…

转速和频率转换功能块(CODESYS ST源代码)

1、转速/频率常用转换关系 转速/频率/线速度/角速度计算FC_200 plc计算角速度-CSDN博客文章浏览阅读3.2k次。里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的绕线算法,大家可以参看专…

并行魔法:揭秘scikit-learn中的Bagging并行训练技术

并行魔法&#xff1a;揭秘scikit-learn中的Bagging并行训练技术 随着大数据时代的到来&#xff0c;机器学习模型的训练时间越来越长&#xff0c;尤其是在处理大规模数据集时。如何高效地训练模型成为了一个亟待解决的问题。幸运的是&#xff0c;scikit-learn库为我们提供了一种…

如何访问远程MySQL数据库?

访问远程MySQL数据库是在进行数据库开发和运维工作中经常遇到的需求。本文将介绍如何使用合适的工具和方法进行远程访问MySQL数据库。 什么是天联组网 天联组网是一款异地组网内网穿透产品&#xff0c;由北京金万维科技有限公司自主研发。天联能够在任何网络环境下实现不同地区…

Vitis HLS 学习笔记--HLS眼中的完美循环嵌套

目录 1. 简介 2. 示例 2.1 不完美循环 2.2 完美循环 2.3 HLS 眼中的循环 3. 总结 1. 简介 在处理嵌套循环时&#xff08;HDL或HLS工具中&#xff09;&#xff0c;优化循环结构对于实现最佳性能至关重要。嵌套循环的性能优化直接影响着计算的时延和资源利用率。创建完美嵌…

Redis 实战2

系列文章目录 本文将从字典的实现、哈希算法、解决键冲突、rehash、渐进式rehash几方面来阐述 Redis 实战Ⅱ 系列文章目录字典的实现哈希算法解决键冲突rehash渐进式 rehash渐进式 rehash 执行期间的哈希表操作 字典 API总结 字典的实现 Redis 的字典使用哈希表作为底层实现&…

什么是数据工程?

目录 一、什么是数据工程&#xff1f; 二、数据工程在医疗行业中的应用 三、数据工程在精准医疗方面的应用有哪些&#xff1f; 一、什么是数据工程&#xff1f; 数据工程是一个综合性的技术学科&#xff0c;涵盖了从数据的收集、存储、处理、分析到应用的整个数据处理过程。…

深入了解 Arthas:Java 应用程序诊断利器

序言 在 Java 应用程序的开发和运维过程中&#xff0c;诊断和解决性能问题是一项非常重要的任务。而 Arthas 作为一款由阿里巴巴开发的 Java 应用程序诊断工具&#xff0c;提供了一系列强大的功能&#xff0c;帮助开发人员实时监控、诊断和调优Java 应用程序。本文将深入介绍 …

光伏光热一体化技术PVT

1、PVT集热器简介 太阳能光伏光热一体化组件主要由光伏与光热两个部分组成。光伏部分采用技术成熟的太阳能光伏面板&#xff0c;通过控制系统为建筑提供所需电能&#xff0c;主要包括光伏电池、蓄电池、逆变器和控制器等构件。光热部分主要为集热器&#xff0c;将太阳能转换为热…

禅道项目管理系统 身份验证漏洞分析QVD-2024-15263

前言 最近不怎么更新了&#xff01;向小伙伴说明下 我不是什么组织 更不什么经销号&#xff08;尽管csdn有很多经销广告号&#xff09; 一确实是下岗了&#xff01;忙着为找工作而发愁。简历都投出去如同石沉大海能不愁吗!.哎...... 二是忙着论文及材料的事...…

领域驱动设计(DDD)笔记(一)基本概念

文章链接 领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;一&#xff09;基本概念-CSDN博客领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;二&#xff09;代码组织原则-CSDN博客领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;三&#xff09;后…

嵌入式开发四:STM32 基础知识入门

为方便更好的学习STM32单片机&#xff0c;本篇博客主要总结STM32的入门基础知识&#xff0c;重点在于理解寄存器以及存储器映射和寄存器映射&#xff0c;深刻体会STM32是如何组织和管理庞大的寄存器&#xff0c;从而提高开发效率的&#xff0c;为后面的基于标准库的开发做好铺垫…

Elasticsearch:对 Java 对象的 ES|QL 查询

作者&#xff1a;Laura Trotta ES|QL 是 Elasticsearch 引入的一种新的查询语言&#xff0c;它将简化的语法与管道操作符结合起来&#xff0c;使用户能够直观地推断和操作数据。官方 Java 客户端的新版本 8.13.0 引入了对 ES|QL 查询的支持&#xff0c;提供了一个新的 API&…

手撸Mybatis(四)——连接数据库进行简单查询

本专栏的源码&#xff1a;https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 添加数据库操作模板 对于JDBC操作&#xff0c;一般包括以下几个步骤&#xff1a; 1&#xff09;注册驱动 2&#xff09;建立连接 3&#xff09;执行sql语句 4&#xff09;处理结果 5&#xff09…

【neteq】tgcall的调用、neteq的创建及接收侧统计

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…