版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39929304/article/details/114264400

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

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

  • 查看CUDA的维基百科,确定与显卡型号适配的CUDA版本,并选择其中一个
  • 查看CUDA官方文档,确定与CUDA版本适配的驱动版本,并选择其中一个
  • 下载驱动并安装
  • 下载CUDA Toolkit并安装,配置软链接、~/.bashrc,详见正文(Windows用户可参考这篇博客配置环境变量)
  • cuDNN下载页面选择CUDA版本支持的cuDNN版本下载并安装
  • 创建python环境(推荐使用conda)
  • 根据pytorch官网的指示安装pytorch+cudatoolkit,需注意cudatoolkit与CUDA 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 Toolkit或cudatoolkit是没法在开发中使用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条,cudatoolkit与CUDA 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管理环境,选择的版本号如下
93975-leayir1sic.png

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

只讲重点

1.1 显卡驱动 & CUDA Toolkit

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

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

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

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

可见,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驱动下载页面搜索显卡支持的驱动并下载安装,这个很简单,截图如下:
76100-aqrvtlqeh76.png
②下载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

wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run
sudo sh cuda_11.3.0_465.19.01_linux.run

84853-a5ob8gwzjkj.png
96933-jtneyddmjaa.png

由于已经安装了驱动,这里取消驱动的选项,再Install
63170-u8xmlis2hjj.png
需要注意:/usr/local/目录下可以同时存在(安装)多个不同版本的CUDA Toolkit(例如cuda-11.1、cuda-11.2),而默认使用的那个是名为cuda的软链接,如果你的系统里没有安装过其他版本的CUDA Toolkit,安装程序会自动创建软链接到你刚刚安装的CUDA Toolkit上,否则会进行询问,如下图所示
98340-ex36ygo45eb.png

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

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

安装程序结束后会弹出一个Summary
82271-tcf6viyg0w.png
配图是11.0版本,仅用以辅助说明)

根据Summary的指示,需要保证~/.bashrc的PATH中包含/usr/local/cuda-11.1/bin、LD_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版本之间的关系在下载页面有显示,选择适配的安装即可。
75803-3wh98fsapej.png
09583-rlbd6igv8g.png

2 Anaconda配置

2.1 下载

打开浏览器,打开Anaconda官网,选择如图所示的版本,右击,复制链接地址(本人于2021.06.10通过复制得到的下载地址为:https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh)。
99088-10anopzbktep.png
然后进入终端,输入如下指令进行下载:

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
wget https://repo.anaconda.com/archive/Anaconda3-2022.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等)。

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

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

所以假如我们安装CUDA Toolkit 11.2和pytorch 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())"

依次代表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())"

此外,使用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指令查看pytorch、torchvision、torchaudio、cudatoolkit等是否正确安装,有时候会因为安装发生了错误而导致代码运行时报错



最后修改:2023 年 05 月 08 日
如果觉得我的文章对你有用,请随意赞赏