已经根据 gpu 的型号把 cuda 的版本选对了,为什么 torch.cuda.is_available() 仍返回 False?

因为你的 pytorch 下载成了 cpu 版本。

不信?测试一下,在该虚拟环境中输入 conda list,查看 pytorch 的版本:
在这里插入图片描述
如果结果如上图,那么 pytorch 的版本为 cpu 版本而不是 gpu 版本,那自然 cuda 调用 gpu 的时候返回 False

可是为何明明电脑有 gpu,安装的时候也是按 gpu 的命令安装的,为什么安装完成之后就变成 cpu 了呢?

因为[python | cudatoolkit | pytorch] 组合的 gpu 版本在下载源中不存在。

官网上的执行命令:conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch 中的 -c pytorch 指的是从 pytorch 官方的源中下载。命令中只指定了cudatoolkit的版本是10.2,而默认的 torchvisiontorchaudiopytorch 的版本估计都是最新的。

即使你选择的 cuda 的版本和你的 gpu 是匹配的,也就是说 cudatoolkit 是对的。但是 [python | cudatoolkit | pytorch] 这三个版本不同的组合,在 pytorch 官方的源中真的不一定有。

它如果没有对应的 gpu 版本,而有对应的 cpu 版本,就会擅自做主给你安装 cpu 版本的了,这就是为什么你是按 gpu 版本安装的,装完发现是 cpu。

所以我们需要找到哪些组合版本在源里是存在的 或者说 是有 gpu 版本的
不知道官方的源在什么地方,所以我们就改用清华源,用清华源里面已有的组合来安装。

打开 清华源的网址发现:

在这里插入图片描述

里面有 python3.7 版本,对应于 cuda10.2 和 cudnn7.* 的安装包,那么我们就选择这个版本安装。

1. 创建 python 对应版本的 环境;
conda create -n pytorch-GPU python=3.7 # 创建一个python3.7的conda环境
conda activate pytorch-GPU # 进入该conda环境
2. 加入清华源;
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源

tip:在任何环境下添加源都会添加到全局中,而不只是作用于该虚拟环境中。

3. 安装 cuda、cudnn 和 pytorch;

根据已有的版本组合,安装 cuda、cudnn

conda install cudatoolkit=10.2 -c http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64/ # 安装 cuda
conda install cudnn=7.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/ # 安装cudnn

安装pytorch

conda install pytorch==1.8.0 torchvision==0.9 cudatoolkit=10.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/# 安装pytorch

其中 torchvision 版本选择需要和 pytorch 版本对应:
在这里插入图片描述
在这个命令执行之后,询问选择 y/n 时,就会发现需要下载的列表中的 pytorch 版本是 cuda 版本,此时下载就能得到 gpu 版本了。

在这里插入图片描述

参考:
https://windses.blog.csdn.net/article/details/125910538
https://blog.csdn.net/shiwanghualuo/article/details/122860521

Logo

一站式 AI 云服务平台

更多推荐