草庐IT

Pytorch的gpu配置

叕叕其华 2023-11-20 原文

写在前面:

从0基础开始断断续续装了快4天,到处找解决方法,中间经历10多次的remake,最后应该算是装好了,特此记录一下,顺便防止我以后再配环境的时候忘了操作。。

1、安装cuda和cudnn

首先查看cuda driver version

命令行(win+R并输入cmd)输入nvidia-smi

右边可以看硬件上的cuda driver版本

其中cuda driver版本≥cuda runtime版本(即Pytorch 可以选择的cuda版本),我最开始的版本是10.2,发现Pytorch中现在没有10.2的cuda了(主要是以前的没看到),然后选择升级cuda driver version到11.6,想想还是升最新的,然后升到了11.8,准备配11.6的Pytorch cuda版本。

安装cuda和cudnn可以参考:(42条消息) 【CUDA】cuda安装 (windows版)_何为xl的博客-CSDN博客_cuda windows

我最后安装的是11.8的cuda和8.6.0的cudnn,重要信息,好好记住,后面会在提到。

2、安装anaconda

我的感觉是随便选个最近版本的安装就行了,安装还是挺简单的,我这几天的前段时间光出bug还以为是anaconda安装出问题了,把anaconda remake了3次了,后来无事发生,发现问题不在这儿,我太愚蠢了。

附上我认为b站上讲cuda,gpu是啥(说真的我当时也是真不清楚),anaconda的安装与使用与指令,pycharm的gpu配置讲的比较清楚的一个合集,给0基础的我讲得很透彻:21. GPU版本-安装Anaconda_哔哩哔哩_bilibili,五星好评。

3、安装Pytorch

重点来了,我觉得最烦人的阶段

前段时间耽搁在anaconda上,后段时间耽搁在这上面

通过pytorch官网上的conda指令能安装,用pip指令也能安装,甚至下载whl文件,然后再用pip直接安装也行(附链接),作为cuda11.8的我,11.6,10.3,10.2都能安装,但我秉持着安装最新的原则安装了11.6的,输入指令后,最好用镜像网站,那样更快,但我因为第一次用的镜像安装失败了,所以就用的官网提供的,我这儿好像速度也不慢,所以后面就没用镜像了。

在经过几次install和uninstall的操作之后,我才发现了下面这个现象,我真的太蠢了。

以10.2的安装为例,输入指令后,在确定是否安装(y/n)之前有这些信息

​在红框处写着cpu,那不用想了肯定是安装成cpu版本了,不过我就开始纳闷,我是按照官网给的指令安装的,为啥也能装成cpu,后来发现pytorch版本是1.12.0,和其他几个包版本对不上,所以安装不上,不过既然装不上为啥还要写出来,可能也是我在第一层没领会到操作。而我直接用官方提供的cuda=11.6的conda命令安装,各个版本都对应上了也是cpu。纳闷。

继续以10.2的安装为例,输入指令后,在确定是否安装(y/n)之前有这些信息

​在红框处是这样的,那么就可以开始下一步输入y安装了。

可以在装了pytorch环境中输入python进入python环境,然后

import torch
torch.cuda.is_available()

判断是否能使用gpu

若输出True则成功了

​这些例子是我最后安装10.2时候的,但我最开始是从11.6开始装的。再经过了几次remake后,当

第一次输出为True时,我开始安装yolov5的依赖文件,后来安装出了bug,import torch都报错:未找到这个包了,然后我又remake了anaconda了。

再经过了几次remake后,发现始终输出都是False,后来采用了直接下载11.6版本的whl文件,第二次输出为True,开始训练yolov5(yolov5的链接,顺便提一句tensorboard需要自己pip,我当时不知道),训练了几次,输出可视化没变化以及测试发现没结果,才发现结果成nan了,又在网上查原因,有

1、数据集大小的问题

2、学习率的问题

3、cuda和cudnn的版本不一致的问题

最开始在找前两点原因,后来发现用

torch.backends.cudnn.version()

可以看cudnn版本

​我用这个代码测试我自己下载的cuda11.8版本输出是8303(大概是,忘了保存了),也就是8.3.3(应该是),但我的cudnn是8.6.0,我开始意识到不对劲了,然后用另一种直接去cudnn_version头文件看版本的方法发现还是8.6.0,开始纳闷了,一直到现在都没弄清楚,此时此刻,我已经有点想把我的11.8降到10.2了,然后刚好配上8.3.3的cudnn,但是我突然意识到一个问题,是不是造成这个的原因是我没有按官方的命令下载pytorch,因为我是安装的whl文件,所以我决定将官方的conda和pip命令依次进行试验,看看输入上方的代码后是否会出现不同的cudnn版本,然后经过了连续几次的install和uninstall后,发现了上面提到的那个现象,真的蠢,浪费了好多时间。最后直接安装了10.2cuda版本的pytorch,经过训练测试发现没有nan了,开始出现具体数字了,后面测试了一下能正常使用了,但是这个cudnn版本号是7.6.5,而我还是8.6.0。

​但是我又能用了,疑惑且不解,开始怀疑这个

torch.backends.cudnn.version()

代码是否代表cudnn的版本了(我现在觉得不一定是了,还是说现阶段的pytorch自动把cudnn集成了,不用我单独安装了),但我确实能用了,而我的cuda和cudnn从我第一次安装好后就没动过了,单独用11.6的whl就会造成他们版本不一致,conda指令安装10.2的就好了,疑惑且不解,所以最后的结果兜兜转转还是回到了10.2版的,而我最开始的cuda driver version也是10.2,属于是白忙活了。

但我没找到10.2是否比11.6更慢的信息,就我个人体验而言,用10.2版本比11.6版慢了一倍,不知道是不是确实慢了一倍还是因为我用11.6版的时候结果都是nan导致的程序内部有些代码没运行,所以时间更短,我用自己的能力现在也验证不了,求有知道的佬可以解答一下

第二天

好像又出bug了

看网上的意思是pytorch版本和torchvision没对上,但我pytorch版本和torchvision分别是1.10.1和0.11.2啊,版本对上了啊,不懂,继续remake吧

遍历官网给的命令,发现这个能将loss显示出来,

conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch

但就是又会出现这个警告(之前loss是nan时也是这个提示,但现在loss好了,还有这个提示,终归还是变好了一点)

但我想先记录下来,再试试其他的,于是运行了这一条

conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=11.3 -c pytorch -c conda-forge

然后出了个bug,通过这个解决了,开始训练,又出现上面这个顺序问题的警告,也能显示loss,而且我发现比昨天10.2的cuda好像更快了,然后训练200轮,一直到30多轮的时候发现loss好像空有示数但是没啥变化,好像又成之前情况了,所以还是看不出来到底谁快了属于是,我又开始remake了。

我现在有点感觉可能是我最开始把cuda driver version升级到11.8造成的这个原因,但我cudnn的对应版本也没错啊,我也不想把cuda降回去了,我头铁,我主观上觉得它没问题,但我客观上感觉有问题。不能因为我11.8的版本太高了吧。。

接着又用了下面这个指令

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=10.2 -c pytorch

这个pytorch和torchvision版本没对上(不然会出现今天(28号)上午的bug),官方的版本对应,pytorch=1.10.0的时候,torchvision应该是0.11.1,但我还是相信了官方,有点头铁,我准备试试,大不了再remake然后安torchvision==0.11.1的版本,照样出现该bug,解决后,然后奇迹出现了,好起来了,顺序bug和未找到文件的bug都没有了,当然速度也降下来了,不过训练5轮,肉眼可见地loss越来越小了。可能也许正常速度应该就是这个样子。

最后的最后,我还是不了解装gpu的原理是什么,只是粗略了解了,以及我没有按照pytorch和torchvision版本对应关系却也阴差阳错成功了,我也不知道为啥能成功,我就是碰个运气,然后碰到了运气。

总体来说,应该是安装成功了,希望能一直好下去,不要明天又出现bug了

有关Pytorch的gpu配置的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  4. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  5. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  6. Ruby 默认将 IRB 配置为 Pretty_Inspect - 2

    我是ruby​​的新手,正在配置IRB。我喜欢pretty-print(需要'pp'),但总是输入pp来漂亮地打印它似乎很麻烦。我想做的是默认情况下让它漂亮地打印出来,所以如果我有一个var,比如说,'myvar',然后键入myvar,它会自动调用pretty_inspect而不是常规检查。我从哪里开始?理想情况下,我将能够向我的.irbrc文件添加一个自动调用的方法。有什么想法吗?谢谢! 最佳答案 irb中默认pretty-print对象正是hirb被迫去做。Theseposts解释hirb如何将几乎所有内容转换为ascii表。虽

  7. ruby - 是否可以将 IRB 提示配置为动态更改? - 2

    我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO

  8. ruby - 如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作? - 2

    我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe

  9. ruby-on-rails - 如果特定语言环境中缺少翻译,如何配置 i18n 以使用 en 语言环境? - 2

    如果特定语言环境中缺少翻译,如何配置i18n以使用en语言环境翻译?当前已插入翻译缺失消息。我正在使用RoR3.1。 最佳答案 找到相似的question这里是答案:#application.rb#railswillfallbacktoconfig.i18n.default_localetranslationconfig.i18n.fallbacks=true#railswillfallbacktoen,nomatterwhatissetasconfig.i18n.default_localeconfig.i18n.fallback

  10. ruby-on-rails - 在 Rails 中存储(结构化)配置数据的位置 - 2

    对于我正在编写的Rails3应用程序,我正在考虑从本地文件系统上的XML、YAML或JSON文件中读取一些配置数据。重点是:我应该把这些文件放在哪里?Rails应用程序中是否有用于存储此类内容的默认位置?附带说明一下,我的应用程序部署在Heroku上。 最佳答案 我经常做的是:如果文件是通用配置文件:我在目录/config中创建一个YAML文件,每个环境有一个上层key如果我为每个环境(大项目)创建一个文件:我为每个环境创建一个YAML并将它们存储在/config/environments/然后我在加载YAML的地方创建了一个初始化

随机推荐