conda安装GPU版pytorch,结果却是cpu版本[找到问题根源,从容解决]_为什么conda安装pytorch版本不对-程序员宅基地

技术标签: python  debug  conda  pytorch-gpu  

一、问题描述

按照pytorch官网安装pytorch GPU版本,结果却是CPU版本。

在这里插入图片描述

我的倔脾气,嘿!反反复复安装、卸载个五、六、七、 遍。才意识到再操作一遍也是一样的结果。

二、网上解决方案罗列【此节为反面方案罗列!!!】

还是上网搜索:
在这里插入图片描述
结果发现,遇到和我同样问题的还不少。

我发现大家的解决办法不相同,大致如下:

解决方案一:卸载pytorch-mutex
在这里插入图片描述
解决方案二:卸载cpuonly
在这里插入图片描述
解决方案三:卸载numpy,哦呵…
在这里插入图片描述
如果继续往下看,你或许明白上面的方案的确能解决问题。但是,这种神秘性以及某种被约束的感觉真的不是太好。上面这些方案,其实就是瞎猫碰上死耗子!!! 他们能起作用本身就是一个BUG。

程序员的诡异操作,写的代码莫名其妙运行起来了。。

想知道这个问题产生的根本原因以及根本解决方案,那么请继续跟着我一起往下看吧…

三、发现的根本原因[独家]

3.1 pytorch文件命名格式

首先介绍一个pytorch的文件名的普通命名格式。

一个在python=3.7conda 环境下,cudatoolkit=10.1版本的pytorch=1.7.0的文件名为:pytorch-1.7.0-py3.7_cuda10.1.243_cudnn7.6.3_0.tar.bz2

一个在python=3.7conda 环境下,CPU版本的pytorch=1.7.0的文件名为pytorch-1.7.0-py3.7_cpu_0.tar.bz2

从上可以看出,不同的python版本,GPU/CPU,若是GPU版本,则cudatoolkit的版本,再加上pytorch的版本,唯一指定一个pytorch安装文件。

明白这个,我们再继续往下。

3.2 问题的根本原因:找不到对应GPU版本的pytorch文件,所以conda就用CPU替代了=v=

先说一下问题产生的根本原因:指定某一版本cudatoolkit下的指定版本的pytorch不在源(国内conda镜像源或因外源)中,导致某一版本cudatoolkit下的指定版本的pytorch无法被conda install找到,然而不凑巧的是,源中却有指定版本的pytorch,不过它是CPU版本。那么,conda install这个小机灵鬼自作主张的替你安装了这个版本。结果就是,你觉得明明安装的是GPU版pytorch,可是像是有种神秘力量让你最终得到的总是cpu版pytorch。

例子1

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch

-c pytorch是指在官方源里找库。此时,如果conda官方源里没有(或者由于网络问题无法访问官方源)cudatoolkit=11.3对应的GPU版pytorch,而此时conda install又找到一个CPU版的pytorch,那么结果是,它给你安装了这个cpu版的pytorch

例子2

conda create -n pytorch-GPU python=3.7 # 创建一个python3.7的conda环境
conda activate pytorch-GPU # 进入该conda环境
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # 换conda源
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ # 换conda源
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ # 换conda源
conda install cudatoolkit=10.0 -c http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/ # 安装 cuda
conda install cudnn=7.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/ # 安装cudnn
conda install pytorch==1.7.0 torchvision==0.8 cudatoolkit=10.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/# 安装pytorch

我想通过国内的镜像源来安装cudatoolkit=10.0版本的pytorch==1.7.0,结果我发现安装的还是cpu版本。我在https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/上发现,原来镜像源里根本没这个文件。于是,conda install这个小机灵鬼又自作主张的给我装了cpu版本的文件pytorch-1.7.0-py3.7_cpu_0.tar.bz2,它给我装的文件python版本相同,pytorch版本相同,唯一不同的就是CPU/GPU。
在这里插入图片描述

此处需要指出,若采用官方命令conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch,安装的是pytorch==1.4.0版本,此版本在from torch.cuda.amp import GradScaler, autocast时会报错from torch.cuda.amp import GradScaler, autocast。网上说是1.4版本太低,换1.7就好了。

3.3 解决方案

我们安装前先要确定源中是否真的有我们组合出来的版本,[python|cudatoolkit|pytorch]这三个版本不同的组合,真的不一定有。

例如,我发现根本没有满足python=3.7cudatoolkit=10.0以及pytorch=1.7.0的版本,但是在镜像源中,我发现有python=3.7cudatoolkit=10.1以及pytorch=1.7.0的版本,于是用以下命令安装:

conda create -n pytorch-GPU python=3.7 # 创建一个python3.7的conda环境
conda activate pytorch-GPU # 进入该conda环境
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ # 换conda源
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ # 换conda源
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ # 换conda源
conda install cudatoolkit=10.1 -c http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/ # 安装 cuda
conda install cudnn=7.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/ # 安装cudnn
conda install pytorch==1.7.0 torchvision==0.8 cudatoolkit=10.1 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/# 安装pytorch

仔细看下图的倒数第5行,我们发现,conda install找到对应的gpu版本,此时,它便不好去自作主张了,乖乖地给我安装gpu版本吧。

在这里插入图片描述


以上
by windSeS
2022-7-21

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013468614/article/details/125910538

智能推荐

弘辽月刊:分享七月份弘辽电商月刊-程序员宅基地

文章浏览阅读52次。深圳市弘辽科技有限公司,致力于将已有经验同步复制给电商创业者、小微企业及商家,助力中国电商经济及视频电商经济良性发展,分享公司7月份弘辽月刊。

MTK平台是什么-程序员宅基地

文章浏览阅读4.6k次。 有时候想想真够窝囊的,本科四年,工作三年,白纸一张,什么都没留下。接触计算机7年了,一无所成。 大学时,大部分时间用在游戏、闲聊等吃喝玩乐,一部分用在应试,剩下可怜的少部分才是那喜爱的编程上了。应该称不上喜爱吧,顶多算不反感、感兴趣罢了。因为凡是这类课程我不用逃课了,不用瞌睡了,虽然不是认真听讲,但还是安安心心地看会书,平时作业、课程设计、毕业设计能认认真真完成而已。除此之外,还看过寥寥几本C/C++的书籍,其它的再也说不上来了。 工作三年,主要从事的是MTK平台MMI软件,做一些简单的应用开发。第_mtk平台

python 闲鱼消息_GitHub - Hatcat123/XianyuSdd: 爬取闲鱼某关键字实时信息,将最新的发送到钉钉群聊。更多我们共同开发的项目(咸鱼反爬更新,只能作为学习使用)...-程序员宅基地

文章浏览阅读651次。XianyuSdd爬取闲鱼某关键字实时信息,将最新的发送到钉钉群聊写了一个异步爬取闲鱼商品最新信息推送到钉钉图中的需求有两个部分值得学习。多线程爬取最新关键字的商品信息python对钉钉的操作多线程爬取最新关键字的商品信息这个多线程是依靠关键字的数量,启动线程。比如可以是线程数=关键字的数量/5。具体接口参考github组织中的例子,24小时采集 然后将线程加入到while True中。关键字与价..._闲鱼爬取最新商品

ANSYS2022R1安装教程(非常详细)从零基础入门到精通,看完这一篇就够了(附安装包)-程序员宅基地

文章浏览阅读2.2w次,点赞27次,收藏150次。网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。_ansys2022r1安装教程

ufldl matlab 工具箱,matlab的Deep Learning的toolbox 中的SAE算法-程序员宅基地

文章浏览阅读44次。最近一直在看Deep Learning,各类博客、论文看得不少但是说实话,这样做有些疏于实现,一来呢自己的电脑也不是很好,二来呢我目前也没能力自己去写一个toolbox只是跟着Andrew Ng的UFLDL tutorial写了些已有框架的代码(这部分的代码见github)后来发现了一个matlab的Deep Learning的toolbox,发现其代码很简单,感觉比较适合用来学习算法再一个就是..._matlab deep learning 工具箱算例

手把手教你在Windows上编译Swift工具链_windows 无法编译swift-程序员宅基地

文章浏览阅读1.8k次。2020/5/27更新:大家现在可以直接从Saleem Abdulrasool的Azure Pipeline中下载打包好的Swift Windows SDK了,在他的GitHub中找到swift-build项目,里面的CI链接里找到Artifacts就可以直接下载(类似windows-toolchain-amd64.msi这样的文件)。考虑到5.3版本的Swift将支持Windows平台,因此以下文章也许已经成为历史,大家看看就好了。-----------------------------------_windows 无法编译swift

随便推点

ubuntu 下播放 yuv 格式的文件&预览Raw格式图片_安装ufraw-程序员宅基地

文章浏览阅读7k次,点赞6次,收藏20次。1、ubuntu 下播放 yuv 格式的文件1)使用ffplaysudo apt-get install ffmpeg查看图片ffplay -f rawvideo -video_size 640x360 test_input_640x360_bak.yuv另外,windows下面可以使用yuvplayer.exe,打开需要设置size,软件下载链接http://..._安装ufraw

Android 集成zxing二维码扫描、自定义_scanoptions scancontract zxing-程序员宅基地

文章浏览阅读7.4k次,点赞6次,收藏16次。项目主要有zxing的基本使用,包含扫描回调、连续扫描、自定义扫描框:一、依赖库implementation 'com.journeyapps:zxing-android-embedded:4.3.0'Github这个库是zxing Android端的,封装了一些基本的使用方法二、基本使用这里使用的是startActivityForResult的替代方法,registerForActivityResult..._scanoptions scancontract zxing

连以太网接口和串口傻傻分不清?看完本文就懂了_网口和串口的区别-程序员宅基地

文章浏览阅读6.1k次,点赞6次,收藏33次。路由器是一种网络设备,它的主要功能是在不同的网络之间转发数据包,实现网络互联。路由器根据数据包的目的地址,选择最佳的路径,将数据包发送到下一跳。路由器可以连接不同的网络类型,如以太网、帧中继、PPP等。路由器上有多种不同的接口,用于连接不同的网络或设备。其中最常见的两种接口是以太网接口和串口。本文就给大家介绍一下以太网接口和串口,让我们直接开始!_网口和串口的区别

Unity打开出现两个空白错误的解决方法_unity 两个空白报错-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏2次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar_unity 两个空白报错

Unity功能记录(九)------ Unity Android判断应用程序进入前后台方法_unity 监听程序进入前后台-程序员宅基地

文章浏览阅读3.7k次。Android上亲测有效,我是用来保存数据的,因为当用户强制清除掉后台程序时并不会调用Android和unity生命周期,但是程序进入后台运行就会调用如下方法,因此可用其来判断进入后台即保存数据 private void OnApplicationPause(bool focus) { if (focus) { Debug..._unity 监听程序进入前后台

ctf实战 掌控安全的靶场 第三关通关记录_掌控安全靶场第三关密码多少-程序员宅基地

文章浏览阅读3.3k次。掌控安全封神台第三关 根据题目可能要用burp进行抓包,点击传送门进入题目主页之前题目说的扫描到新的后台地址admin123 在网址后加入admin123 进入新的后台管理页面根据第二关得到的用户和密码进行登录 进入后得到这样一个页面抓包结果如下根据代码分析只需要修改host和referer的ip地址修改以后结果还是进不去分析一下问题 打开F..._掌控安全靶场第三关密码多少