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

本文章来源于对李沐动手深度学习代码以及原理的理解,并且由于李沐老师的代码能力很强,以及视频中讲解代码的部分较少,所以这里将代码进行尽量逐行详细解释
并且由于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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java中的Lambda表达式

Lambda表达式的标准格式 格式&#xff1a;&#xff08;形式参数&#xff09;->{代码块} 形式参数&#xff1a;如果有多个参数&#xff0c;参数之间用逗号隔开 如果没有参数&#xff0c;留空即可 ->&#xff1a;由英文中画线和大于符号组成&#xff0c;固定写法。代表着…

学习中遇到的问题

1.UFUNCTION() 不是所有函数都能加UFUNCTION()修饰&#xff0c;涉及UE反射机制。 2.初始化用{} 初始化列表 3.创建C文件时修改了路径 这时.cpp文件会报错&#xff0c;只需删掉前面多余路径即可 4.函数的移除 1.虚幻5.1 UUserWidget不再包含OnLevelRemovedFromWorld() 转而使用…

微信CRM管理系统、企业个人微信号管理对接接口

接口地址&#xff1a; POST/login/getLoginQrCode appId参数为设备ID&#xff0c;首次登录传空&#xff0c;会自动触发创建设备&#xff0c;掉线后重新登录则必须传接口返回的appId&#xff0c;注意同一个号避免重复创建设备&#xff0c;以免触发官方风控 取码时传的appId需要…

python邮件发送

第一种方式 一&#xff1a;发送的邮件要设置授权码&#xff0c;通过邮箱邮箱授权码去验证&#xff0c;让邮件服务器帮我们去转发邮件到要接收的邮件&#xff0c;代码中的授权码&#xff0c;是需要登录126邮箱&#xff08;我这里是以126邮件发送的&#xff0c;具体的以自己为准…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-PWR电源控制

PWR简介 PVD可用在电池供电或安全要求比较高的设备&#xff0c;如果供电电压在逐渐下降&#xff0c;在电压过低的情况下可能会导致内外电路出现不确定的错误。为了避免不必要的错误&#xff0c;可以在电源电压过低的情况下&#xff0c;提前发出警告并关闭较为危险的设备 关闭的…

循环神经网络模块介绍(Pytorch 12)

到目前为止&#xff0c;我们遇到过两种类型的数据&#xff1a;表格数据和图像数据。对于图像数据&#xff0c;我们设计了专门的卷积神经网络架构(cnn)来为这类特殊的数据结构建模。换句话说&#xff0c;如果我们拥有一张图像&#xff0c;我们 需要有效地利用其像素位置&#xf…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 继续接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们点击 submit 提…

【JavaEE 初阶(一)】初识线程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.进程3.线程4.线程和进程的区别5.Thread创建线程5.1继承Thread创建线程5.2实现R…

非平衡数据处理-SMOTE Tomek算法(互联网最全)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;非平衡数据处理-SMOTE Tomek算法 之前Toby老师讲了非平衡数据处理相关知识&#xff0c;具体内容和链接如下。 imbalanced data机器学习非平衡数据处理 Python非平衡数据处理_SMOTE-ENN 方法 非平衡数…

【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 ​ 针对分页&#xff0c;使用的是PageHelper分页插件&#xff0c;版本使用的是5.1.8 。 ​ 参考文档…

虚拟机网络实现桥接模式

虚拟机网络实现桥接模式 虚拟化软件&#xff1a;VMware 17 Linux&#xff1a;rocky8_9 主机&#xff1a;Win10 文章目录 虚拟机网络实现桥接模式1. 桥接模式介绍2. 查看Win本机的网络信息&#xff08;以笔记本电脑以WiFi联网为例&#x…

【Canvas与艺术】录王昌龄出塞诗“秦时明月汉时关”

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用HTML5/Canvas绘制秦时明月汉时关</title><style type&q…

【论文阅读】Sparse is Enough in Scaling Transformers

Sparse is Enough in Scaling Transformers 论文地址摘要1 介绍2 相关工作模型压缩。模型修剪模型蒸馏。稀疏注意力。张量分解。稀疏前馈。 3 Sparse is Enough3.1 稀疏前馈层3.2 稀疏 QKV 层3.3 稀疏损失层。 4 长序列的稀疏性4.1 长序列架构4.2 内存效率的可逆性4.3 泛化的循…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(4)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;4&#xff09; 一、hystrix&#xff1a;使用 turbine 聚合所有的 hytrix 的监控数据测试。创建父工程 spring_cloud_hystrix_demo&#xff0c;导入相关依赖坐标。并在父工程 spring_cloud_…

C++校招八股

c类的访问权限与继承方式 公有成员在任何地方都可以被访问&#xff0c;包括类的外部和派生类。受保护成员在类的内部和派生类中可以被访问&#xff0c;但在类的外部不可访问。 私有成员只能在类的内部访问&#xff0c;包括类的成员函数和友元函数&#xff0c;不允许在类的外部…

MySQL45讲(一)(45)

如果使用的是unsigned int 做的主键&#xff0c;如果你用完了&#xff0c;在insert直接就是报冲突的错误 碰到这种情况&#xff0c;只能进行修改字段的属性了&#xff0c;把他换成big unsigned 了&#xff0c;所以建表对字段定义的时候就需要判断好&#xff0c;是否会超过 对于…

我的创作纪念日—128天的坚持|分享|成长

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

H3C MSTP 实验

H3C MSTP 实验 实验拓扑 ​​ 实验需求 所有交换机上创建 Vlan10&#xff0c;Vlan20&#xff0c;Vlan30 和 Vlan40所有交换机之间的端口配置为 Trunk&#xff0c;并放行相关 VLAN按照图示分区域配置 MSTP&#xff0c;并配置主备根网桥 实验步骤 VLAN基础配置&#xff08;…

RateLimiter 限流 —— 通过切面对单个用户进行限流和黑名单处理

关于登录的安全性管理有较多的手段&#xff0c;包括&#xff1b;设备信息、IP信息、绑定的信息、验证码登各类方式。不过在一些网页版的登录中&#xff0c;如果有人想办法把你的验证码给我&#xff0c;我就可以登录你的账户&#xff0c;查看你的数据。对于一些不法分子通过让你…

windows 驱动开发-DMA技术(二)

前面描述了DMA技术中适配器相关的部分以及DMA的分类&#xff0c;接下来看一下系统具体在支持两种DMA时候的操作的细微差别。 此处解释一下Scatter/Gather&#xff0c;这个也翻译为散点/收集&#xff0c;是指指示设备能够读取或写入内存中的任何区域&#xff0c;而不仅仅是特定…