软硬件

  • 显卡:A4000(对应的算力为 8.6)
  • 系统:Ubuntu 18.04 LTS
  • 驱动:NVIDIA DRIVER 470 - CUDA11.4
  • 参考链接1:显卡算力查询官网
    这里介绍的显卡算力主要是要和 CUDA - cuDNN 匹配(如果要使用 cudnn8.x 算力的显卡对 cudatoolkit 的要求是 11.x)。
    在这里插入图片描述

conda install

使用该命令,如果不匹配,没有找到对应的包,默认选择安装 CPU 版本!对应的各个版本截图示意如下。

1.8.0 (太早之前的就不测试了)

# CUDA 10.2
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch

# CUDA 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge

CUDA 10.2

在这里插入图片描述

CUDA 11.1

在这里插入图片描述
这里需要注意下:PyTorch 1.8.0 可以和 CUDA 11.1 匹配!

1.8.1

# CUDA 10.2
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=10.2 -c pytorch

# CUDA 11.3
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=11.3 -c pytorch -c conda-forge

CUDA 10.2

在这里插入图片描述

CUDA 11.3

在这里插入图片描述
经测试,将 cudatoolkit 版本降至 11.1 后,可以成功下载 GPU 版,11.2 不行。

1.9.0

# CUDA 10.2
conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=10.2 -c pytorch

# CUDA 11.3
conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=11.3 -c pytorch -c conda-forge

CUDA 10.2

在这里插入图片描述

CUDA 11.3

在这里插入图片描述
同上:经测试,将 cudatoolkit 版本降至 11.1 后,可以成功下载 GPU 版,11.2 不行。

1.9.1

# CUDA 10.2
conda install pytorch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1 cudatoolkit=10.2 -c pytorch

# CUDA 11.3
conda install pytorch==1.9.1 torchvision==0.10.1 torchaudio==0.9.1 cudatoolkit=11.3 -c pytorch -c conda-forge

CUDA 10.2

在这里插入图片描述

CUDA 11.3

在这里插入图片描述
同上:经测试,将 cudatoolkit 版本降至 11.1 后,可以成功下载 GPU 版,11.2 不行。

1.10.0

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

# CUDA 11.3
conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge

CUDA 10.2

在这里插入图片描述

CUDA 11.3

在这里插入图片描述
可以看到,对于比较新的 PyTorch 版本,是可以使用 conda install 安装 GPU 版本的!而之前相对比较老的版本就不行。

1.10.1

# CUDA 10.2
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch

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

CUDA 10.2

在这里插入图片描述

CUDA 11.3

在这里插入图片描述

总结

1.10.0 之前的 PyTorch,都无法使用 CUDA 11.x (更正:后来经过测试,将 cudatoolkit 版本改为 11.1 后都能成功安装了!),但是可以使用 CUDA 10.x

这里说下 CUDA 11.xCUDA 10.x 的区别:支持的算力不同,如果要使用 cuDNN 进一步加速,而显卡算力和安装的 CUDA 不匹配,就无法使用。本次实验使用的显卡为 A4000,支持的算力为 8.x,对应的 cuDNN 版本也应该为 8.x 才行。
在这里插入图片描述

import torch
print(torch.cuda.is_available(), torch.cuda.device_count())

from torch.backends import cudnn
print(cudnn.is_available())
print(cudnn.is_acceptable(torch.rand(1,).cuda()))

在这里插入图片描述
升级为 CUDA 11.x 后,再次验证:
在这里插入图片描述

pip install

使用 pip install 基本都没有问题,能够成功安装上 GPU 版本,需要注意的还是上述那点,CUDA 版本要和显卡算力相匹配,否则无法使用 cuDNN 进一步加速运算!

对于无法使用 conda install 的版本,使用 pip install 安装是一个很好的解决方案,唯一的不足之处是,pip install 安装的包只保留在当前虚拟环境中,每次都需要重新下载。而 conda install 时,首先会从 ~/anaconda3/pkgs/ 里面寻找,如果找到,直接复制一份到当前虚拟环境,不用重新下载,所以速度基本是以秒计算;如果没有,那么还是会先将包下载缓存到该目录下,然后执行相同的复制操作。

以下只是个人想法!!!

有了以上的知识之后,我们可以这样操作,将可以使用 pip install 安装而无法使用 conda install 的包(比如 PyTorch1.8.1-CUDA 11.3)复制到 ~/anaconda3/pkgs/ 目录下,然后就可以使用 conda install 安装了,但是需要注意一个小细节,就是修改 CUDA 的版本,因为 pip install 只提供 CUDA 11.1,所以对应到的命令就是:

conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=11.1

一直没有注意到这个细节:为什么使用 conda install 安装不成功,而使用 pip install 就能成功呢?这里官方真的是好好地坑了我们一把!!!其实并不是 conda 本身的问题,而是因为我们指定的 cudatoolkit 版本不对!也就是官方提供的版本不对!!!因此,如果需要使用 conda install 时,只需要将 cudatoolkit 的版本指定为 pip 里面的即可!!!举个栗子:

官方提供的 cuda 安装命令:

# CUDA 11.3
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=11.3 -c pytorch -c conda-forge

经过上面的实验,我们知道,如果使用上面的命令来安装是不行的,我们这里想要的是 PyTorch 1.8.1 对应的 CUDA 11.x,这样才能和机器的算力匹配,使用 cudnn 加速运算,而这里官方只给我们提供了最新的 11.3,直接复制运行就出错了,直接给我们整个 cpu 版本的!让我们来看看官方提供的 pip 命令是怎样的:

# CUDA 11.1
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

# CUDA 10.2
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

# CUDA 10.1
pip install torch==1.8.1+cu101 torchvision==0.9.1+cu101 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html

看到了吗?是 CUDA 11.1,而不是 CUDA 11.3 !!!因此,我们只需要把 conda install 后面的命令稍微改一下,完全可以运行成功:

conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cudatoolkit=11.1 -c pytorch -c conda-forge

来对比一下吧。

  • 没有修改之前的效果
    在这里插入图片描述
  • 修改之后的效果:
    在这里插入图片描述

终于把这个困惑给解决了!

!最终方案

使用 conda install 时,不指定 cudatoolkit 的版本时,默认会安装与 PyTorch 版本相匹配的最新 CUDA,因此不需要上面那样反复地尝试!

经过这次的实验捣鼓,终于理解了之前一个博客大佬所说的。如果我们没有 cuda 编程需求的话,根本就不需要安装什么 cudatoolkit cudnn,只需要安装配置好 NVIDIA 驱动即可!我们在安装 PyTorch 的时候早就已经帮我们打包好了!!!没有上述需求的话还需要安装吗?不需要了!
在这里插入图片描述
可以通过将 CUDA 从系统配置变量中移除来检验。

补充

  • 如果使用的是 pip install,是不会安装 cudatoolkit 的,因此需要在服务器上配置 CUDA 环境。
  • 如果你只会用到 conda install 来进行安装,那么不在服务器上安装配置 CUDA 也是可以的。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐