【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程

2021年12月9日更新:可查看本人最新的CUDA环境配置博客:https://zhuanlan.zhihu.com/p/443114377,系对本文的提炼、归纳与总结


目录

  • ==环境配置流程总结(2021年6月10日更新)==
  • ==重要概念:(务必看)==
  • 写在开头:
  • 1 显卡驱动+CUDA Toolkit+cuDNN配置
    • 1.1 显卡驱动 & CUDA Toolkit
    • 1.2 cuDNN
  • 2 Anaconda配置
    • 2.1 下载
    • 2.2 创建conda环境
  • 3 pytorch+cudatoolkit配置
    • 3.1 注意事项
    • 3.2 安装
  • 4 测试


环境配置流程总结(2021年6月10日更新)

经过许久的沉淀,对于驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit这套环境的配置流程,现总结如下

  1. 查看CUDA的维基百科,确定与显卡型号适配的CUDA版本,并选择其中一个
  2. 查看CUDA官方文档,确定与CUDA版本适配的驱动版本,并选择其中一个
  3. 下载驱动并安装
  4. 下载CUDA Toolkit并安装,配置软链接~/.bashrc,详见正文(Windows用户可参考这篇博客配置环境变量
  5. 在cuDNN下载页面选择CUDA版本支持的cuDNN版本下载并安装
  6. 创建python环境(推荐使用conda)
  7. 根据pytorch官网的指示安装pytorch+cudatoolkit,需注意cudatoolkitCUDA Toolkit一样要选择与显卡型号驱动版本适配的版本,pytorch版本则按需选择

重要概念:(务必看)

  1. 版本的确定流程为:显卡型号 >> CUDA >> 驱动&cuDNN

  2. CUDA是一个并行计算平台和编程模型,简单来说,它使得你能够用NVIDIA GPU进行通用计算。使用CUDA前,显卡一定要安装好驱动(事实上,没装驱动的显卡什么都干不了)。

  3. CUDA有两种API,分别是:随驱动安装的driver API(nvidia-smi显示的CUDA版本就是driver API的版本);随CUDA Toolkit安装的runtime API(可以用nvcc -V查看runtime API的版本)。两者版本不需要一致。 driver API的CUDA不能完成runtime API的CUDA的工作,所以仅安装驱动而不安装CUDA Toolkitcudatoolkit是没法在开发中使用CUDA的。

  4. CUDA Toolkit由NVIDIA官方发行,不仅包含了CUDA的runtime API,还包含了CUDA代码的编译器nvcc(CUDA也有自己的语言,代码需要编译才能执行)和debug工具等。

  5. cudatoolkit为pytorch提供的、编译好的、用以支持pytorch运行的CUDA部件(动态链接库DLL等),在运行pytorch时,调用的CUDA都是cudatoolkit;仅当需要编译依赖CUDA的torch拓展模块时,会调用CUDA Toolkit(可以参考这个帖子)。

  6. 综上述3、4条,cudatoolkitCUDA Toolkit没有关系,版本也不需要一致。且在使用pytorch时,如果不需要编译CUDA代码,则不会调用CUDA Toolkit,也不需要安装CUDA Toolkit;仅在pytorch中使用CUDA的话,cudatoolkit就足够了。 经测试,仅安装pytorch+cudatoolkit,而没有安装CUDA Toolkit时,也是可以在pytorch中使用CUDA的。

  7. 无论是CUDA Toolkit还是cudatoolkit,在安装时都必须选择与显卡型号驱动版本适配的版本。

  8. cuDNN(CUDA 深度神经网络库)是经GPU加速的深度神经网络基元库,可大幅优化标准例程(例如用于前向传播和反向传播的卷积层、池化层、归一化层和激活层)的实施。可以简单地将cuDNN理解为CUDA的拓展和加速模块。CUDA Toolkit的cuDNN需要专门安装;而cudatoolkit中包含了cuDNN的相关部件。

注:与pytorch不同,TensorFlow的运行必须依赖CUDA Toolkit等,详见TensorFlow官方的安装指南


写在开头:

当前时间2021年6月10日,服务器的配置是Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-28-generic x86_64)+RTX3090,采用conda管理环境,选择的版本号如下

环境名称 最新版本号 所用版本号
显卡驱动 460.84 455.23
CUDA Toolkit 11.3 11.1
cuDNN 8.2.1 8.0.5
pytorch 1.8.1 1.8.0
cudatoolkit 11.1 11.1
python 3.9.2 3.9.1

1 显卡驱动+CUDA Toolkit+cuDNN配置

只讲重点

1.1 显卡驱动 & CUDA Toolkit

首先搞清楚显卡型号、CUDA版本、显卡驱动版本之间的关系,并依此确定安装什么版本的CUDA驱动

①确定CUDA版本:NVIDIA不同型号显卡的计算能力不同,而不同的CUDA版本能支持的最大计算能力不同,详见CUDA的维基百科,截图如下:

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第1张图片

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第2张图片

可见,由于RTX3090的计算力为8.6,11.1以下版本的CUDA都无法支持,所以最低需要安装CUDA 11.1(不管是这里的CUDA Toolkit还是下文的cudatoolkit)。

②确定显卡驱动版本:CUDA官方文档显示了显卡驱动版本和CUDA版本之间的关系,截图如下:

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第3张图片

可见,CUDA 11.1最少需要455.23版本的显卡驱动(Linux 64-bit系统)。

综上,我们首先确定RTX3090最少需要CUDA 11.1,并选择安装CUDA 11.1,然后确定CUDA 11.1最少需要455.23版本的驱动,最终确定安装CUDA 11.1 + 455.23驱动

接下来进行安装:

①在NVIDIA驱动下载页面搜索显卡支持的驱动并下载安装,这个很简单,截图如下:

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第4张图片

②下载CUDA Toolkit并安装:

按照NVIDIA官方的说明下载和运行安装程序:

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run

由于已经安装了驱动,这里取消驱动的选项,再Install

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第5张图片

需要注意:/usr/local/目录下可以同时存在(安装)多个不同版本的CUDA Toolkit(例如cuda-11.1cuda-11.2),而默认使用的那个是名为cuda的软链接,如果你的系统里没有安装过其他版本的CUDA Toolkit,安装程序会自动创建软链接到你刚刚安装的CUDA Toolkit上,否则会进行询问,如下图所示

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第6张图片

这里取决于你是否要将刚刚安装的这个CUDA Toolkit设为默认,之后也可以手动进行软链接,例如下述命令就是删除了原本的软链接,再将cuda-11.1设为默认:

sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-11.1 /usr/local/cuda

安装程序结束后会弹出一个Summary

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第7张图片

(配图是11.0版本,仅用以辅助说明)

根据Summary的指示,需要保证~/.bashrcPATH中包含/usr/local/cuda-11.1/binLD_LIBRARY_PATH中包含/usr/local/cuda-11.1/lib64,打开~/.bashrc,在文件末添加:

export PATH="/usr/local/cuda-11.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH"

最后重启终端或执行指令source ~/.bashrc(以应用~/.bashrc的修改),完成CUDA Toolkit的安装

Windows用户可参考这篇博客配置环境变量

注意:软链接~/.bashrc的改动都会影响到当前用户所使用的CUDA Toolkit版本,这里面的细节我还没有搞清楚,但这两者最好设置为同一版本的CUDA Toolkit

1.2 cuDNN

下载cuDNN并解压、复制文件到CUDA Toolkit目录。cuDNN版本与CUDA版本之间的关系在下载页面有显示,选择适配的安装即可。


2 Anaconda配置

2.1 下载

打开浏览器,打开Anaconda官网,选择如图所示的版本,右击,复制链接地址(本人于2021.06.10通过复制得到的下载地址为:https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh)。

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程_第8张图片

然后进入终端,输入如下指令进行下载:

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh

下载完成后,使用指令

sudo sh Anaconda3-2021.05-Linux-x86_64.sh

进行安装,一路yes

安装完成后,替换Anaconda源为清华大学开源软件镜像站(请查看使用帮助)

2.2 创建conda环境

conda具体的用法在此不赘述,直接

conda create -n py python=3.9

创建一个名为py,python版本号为3.9的conda环境,中途会提示是否继续(proceed),当然yes

注意: 若指令为conda create -n py python==3.9,则python版本强制为3.9.0;仅使用一个等号时,conda会自动安装最新的python 3.9.x


3 pytorch+cudatoolkit配置

3.1 注意事项

注意:务必看文章开头的“重要概念”

cudatoolkit为pytorch提供的、编译好的、用以支持pytorch运行的CUDA部件(动态链接库DLL等)。

cudatoolkitCUDA Toolkit没有关系,版本也不需要一致。但都必须选择与显卡型号驱动版本适配的版本,因此这里也选择11.1版本进行安装。

在运行pytorch时,调用的CUDA都是cudatoolkit;仅当需要编译依赖CUDA的torch拓展模块时,会调用CUDA Toolkit(可以参考这个帖子)。

所以假如我们安装CUDA Toolkit 11.2pytorch 1.8.0 + cudatoolkit 11.1,实际运行的仍是pytorch 1.8.0 + CUDA 11.1

3.2 安装

这里不折腾pytorch preview(nightly)测试版了,直接按照pytorch官方的教程安装稳定版

首先激活conda环境

conda activate py

然后安装pytorch + cudatoolkit

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

完成


4 测试

依旧是在上文创建的conda环境里输入指令,首先激活conda环境

conda activate py

具体的测试指令和对应的结果如下

(py) usr1@ubuntu:~$ python -c "import torch; print(torch.__version__)"
1.8.0
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.version.cuda)"
11.1
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.backends.cudnn.version())"
8005
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.cuda.current_device())"
0

依次代表pytorch版本,cuda版本,cudnn版本,当前显卡设备号(0表示当前所用显卡的序号为0,若显卡无法使用会报错)

还可以使用以下指令测试显卡

(py) usr1@ubuntu:~$ python -c "import torch; print(torch.cuda.is_available())"
True
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.cuda.device_count())"
8

此外,使用nvcc -V指令可以测试CUDA Toolkit是否正确安装,以及所使用的版本:

(py) usr1@ubuntu:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Tue_Sep_15_19:10:02_PDT_2020
Cuda compilation tools, release 11.1, V11.1.74
Build cuda_11.1.TC455_06.29069683_0

若上述测试没有报错,则确定CUDA可以正常使用

注1:本人之后在系统里安装了8.1.1的cuDNN,但torch.backends.cudnn.version()的返回值仍为8005,因此cudatoolkit中应该包含了cuDNN相关的部件)

注2:头文件/usr/local/cuda/include/cudnn_version.h内有cuDNN版本的计算方法,8005 = 8x1000 + 0x100 + 5

注3:可以使用conda list指令查看pytorchtorchvisiontorchaudiocudatoolkit等是否正确安装,有时候会因为安装发生了错误而导致代码运行时报错

你可能感兴趣的:(pytorch,深度学习,神经网络,cuda,anaconda)