conda安装GPU版pytorch,结果却是cpu版本[找到问题根源,从容解决]_pytorch-mutex

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

conda安装GPU版pytorch结果却是cpu版本[找到问题根源从容解决]

一、问题描述

按照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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6