基于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),否则返回cpuif torch.cuda.device_count() >= i+1:return torch.device(f'cuda:{i}')return torch.device('cpu')def try_all_gpus():# 返回所有的GPU,如果不存在GPU就返回CPUdevices = [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.mzph.cn/news/831684.shtml

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

相关文章

《QT实用小工具·四十九》QT开发的轮播图

1、概述 源码放在文章末尾 该项目实现了界面轮播图的效果&#xff0c;包含如下特点&#xff1a; 左右轮播 鼠标悬浮切换&#xff0c;无需点击 自动定时轮播 自动裁剪和缩放不同尺寸图片 任意添加、插入、删除 单击事件&#xff0c;支持索引和自定义文本 界面美观&#xff0c;圆…

开源免费的网盘项目Cloudreve,基于Go云存储个人网盘系统源码(七牛、阿里云 OSS、腾讯云 COS、又拍云、OneDrive)

项目简介&#xff1a; 在现今的网盘服务中&#xff0c;用户经常遭遇限速和价格上涨的问题&#xff0c;这无疑增加了使用上的困扰。 为此&#xff0c;我今天要介绍一款开源且免费的网盘项目——Cloudreve。 这个项目是基于Go语言开发的云存储个人网盘系统&#xff0c;支持多种…

[笔试训练](十二)

目录 034:删除公共字符串 035:两个链表的第一个公共节点 036:mari和shiny 034:删除公共字符串 删除公共字符_牛客题霸_牛客网 (nowcoder.com) 题解: 用哈希记录好第二个字符串中的字符&#xff0c;再遍历一遍第一个字符串&#xff0c;只将没有记录的字符加在结果字符串上。…

[C++][数据结构]哈希1:哈希函数的介绍与线性探测的实现

前言 学完了二叉树&#xff0c;我们要学当前阶段数据结构的最后一个内容了&#xff1a;哈希&#xff01;&#xff01; 引入 先来介绍两个用哈希封装的两个容器&#xff1a;unordered_map unordered_set 与map和set的不同&#xff1a; map/set是双向迭代器&#xff0c;而另…

【已解决】VSCode 连接远程 Ubuntu :检测到 #include 错误。请更新 includePath。

文章目录 1. 环境声明2. 解决过程 1. 环境声明 即使是同一个报错&#xff0c;在不同的环境中&#xff0c;报错原因、解决方法都是不同的&#xff0c;本文只能解决跟我类似的问题&#xff0c;如果你发现你跟我遇到的问题不太一样&#xff0c;建议寻找其他解法。 必须要吐槽的是…

STD10A230XCB电源模块STD05A230XCB整流模块介绍

STD10A230XCB电源模块STD05A230XCB整流模块介绍&#xff0c;直流屏电源模块STD05A230XCB&#xff0c;整流模块STD10A115XCB&#xff0c;STD20A115XCB&#xff0c;STD10A230X&#xff0c;STD05A230X&#xff0c;直流屏充电模块的关键词: 电力智能高频开关充电模块STD20A230XCB,高…

SPRINGBOOT高级教程知识

************************************************************************************************************************************************************** 1、Springboot与缓存 【1】访问量大、临时性数据 【2】JSR107&#xff08;用的少&#xff09;、缓存抽象…

linux下C热补丁

linux运行进程热补丁&#xff08;一&#xff09;之函数替换_linux 热补丁的实现-CSDN博客 一、实现目标 在Linux环境下&#xff08;x86_64&#xff09;对正在运行进程的函数替换&#xff0c;不改变该进程的可执行文件内容&#xff0c;通过使用汇编指令JMP完成运行中进程的函数…

【科研技术】华为为什么不给微信特权?

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

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

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

简历总结:打造HR无法拒绝的简历

最近要秋招实习了&#xff0c;看了一下实习简历应该如何正确展开书写&#xff0c;写下这篇博客来记录一下。 油管&#xff1a;神奇4步法&#xff0c;打造HR无法拒绝的简历 明确目标 针对不同的岗位编写不同的简历&#xff0c;具体内容可以针对不同岗位的要求。 筛选经历 将自…

C语言/数据结构——每日一题(移除链表元素)

一.前言 今天在leetcode刷到了一道关于单链表的题。想着和大家分享一下。废话不多说&#xff0c;让我们开始今天的知识分享吧。 二.正文 1.1题目要求 1.2思路剖析 我们可以创建一个新的单链表&#xff0c;然后通过对原单链表的遍历&#xff0c;将数据不等于val的节点移到新…

图床搭建GitHub+PicGo+jsdelivr(CDN)+Typora(内附加速工具)

目录 安装PicGo GitHub配置与加速器 配置PicGo 使用typroa 安装PicGo PicGo是一个用于上传图片的客户端&#xff0c;支持拖拽上传、剪贴板上传&#xff0c;功能十分方便。 下载地址&#xff1a; https://github.com/Molunerfinn/PicGo/releases 个人网盘自取版本2.4.0…

了解并学会使用反射

目录 一、反射的应用场景&#xff08;简单了解&#xff09; 二、反射的定义 三、关于反射的四个重要的类 四、反射的使用 1.Class获取一个class对象的方式 方式一&#xff1a;forName&#xff08;&#xff09;&#xff1a; 方式二&#xff1a;封装类.Class&#xff1a; …

【stomp 实战】Spring websocket 用户订阅和会话的管理源码分析

通过Spring websocket 用户校验和业务会话绑定我们学会了如何将业务会话绑定到spring websocket会话上。通过这一节&#xff0c;我们来分析一下会话和订阅的实现 用户会话的数据结构 SessionInfo 用户会话 用户会话定义如下&#xff1a; private static final class Sessio…

怎么让电脑耳机和音响都有声音

电脑耳机音响不能同时用没声音怎么办 一般来说&#xff0c;重新开机后问题能够得到解决。右击“我的电脑”---“属性”---“硬件”---“设备管理器”&#xff0c;打开“声音、视频和游戏控制器”有无问题&#xff0c;即看前面有没有出现黄色的“”。 如果您的 电脑 耳机能正常…

VMware虚拟机中ubuntu使用记录(4)—— 如何在VMware虚拟机中调用本机电脑的摄像头

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、虚拟机调用本机摄像头(1) 启动VMware USB 服务(2) 连接本机摄像头(3) 测试摄像头的连接 前言 通过配置虚拟机调用本机摄像头&#xff0c;用户可以在虚拟机…

redis集群的创建安装与配置,以及维护

一、redis集群配置 port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 二、安装ruby&#xff08;ruby可以充当redis客户端的角色&#xff09; yum -y install ruby ruby-devel rubygems rpm-build gem install …

【SQL】根据条件分组,并根据条件取最大的这一条数据

数据&#xff0c;当字段A相同时&#xff0c;取字段B数值大的这一条数据 ABC123114223234 期望结果 ABC123234 Oracle SELECT A, B, C FROM (SELECT A, B, C,ROW_NUMBER() OVER (PARTITION BY A ORDER BY B DESC) AS rnFROM 表名 ) WHERE rn 1; MySql SELECT t1.A, t1.B,…

Redis---------实现商品秒杀业务,包括唯一ID,超卖问题,分布式锁

订单ID必须是唯一 唯一ID构成&#xff1a; 代码生成唯一ID&#xff1a; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.tim…