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

解决conda安装GPU版PyTorch失败的问题
本文详细分析了conda安装PyTorch GPU版本时出现CPU版本的原因,指出问题在于源中缺少特定版本的GPU版PyTorch文件,conda会默认选择CPU版本。解决方案是确认源中有匹配的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

### 离线安装 PyTorch CPU 版本的方法 离线安装 PyTorchCPU 版本通常涉及以下几个方面:准备所需的依赖项、创建独立的安装包以及执行本地安装。以下是详细的说明: #### 1. 准备环境和依赖 为了确保 PyTorch 能够正常工作,需要提前准备好其所有的依赖库。对于 CPU 版本,主要依赖包括 `torch` 和 `torchvision`,而无需 CUDA 工具链的支持。 可以通过以下方式获取这些依赖: - 访问官方 PyTorch 官网或 Anaconda 镜像站点,找到适合当前系统的 PyTorch CPU 版本及其对应的 `.tar.bz2` 或 `.whl` 文件。 - 下载适用于 Python 版本的文件到本地磁盘上[^1]。 #### 2. 创建离线安装包 将下载好的文件打包成压缩文件(如 ZIP 或 TAR),以便于传输至目标机器。如果使用的是 Conda 环境,则可以利用 `conda-pack` 工具来导出整个环境并将其迁移到无网络连接的目标设备上[^4]。 ```bash # 使用 conda 导出指定环境中所有软件包为 tar.gz 归档文件 conda pack -n my_pytorch_env -o pytorch_cpu_env.tar.gz ``` 此操作会把名为 `my_pytorch_env` 的虚拟环境下所有必要的组件都保存下来供后续部署之用。 #### 3. 执行本地安装 一旦上述准备工作完成,在没有互联网接入的情况下就可以按照如下方式进行实际安装了: ##### 方法一: Pip 安装预下载轮子文件(.whl) 假设已经获得了对应平台架构下的 wheel 文件,那么只需切换到存放该文件夹路径下并通过 pip 命令加载即可. ```python pip install torch-*.whl torchvision-*.whl ``` 这里替换星号(*)代表的具体版本号与操作系统匹配的信息[^2]. ##### 方法二: Conda 加载已打包环境 当采用 conda-pack 方式处理时,解压先前制作好的归档文档之后启动新的 shell session 并激活它。 ```bash mkdir ~/envs/my_pytorch_env && tar xf pytorch_cpu_env.tar.gz -C ~/envs/my_pytorch_env export PATH=~/envs/my_pytorch_env/bin:$PATH source activate ~/envs/my_pytorch_env/ ``` 这样就完成了基于 anaconda 的完全脱机模式下的 pytorch cpu edition setup 过程[^3]. 通过以上流程能够有效解决因缺乏在线资源而导致无法顺利完成框架搭建的问题。
评论 144
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windSeS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值