CUDA安装之锅

难蚌,装个Pytorch3d装一上午也装不起,与其装好库调包,还不如自己动手丰衣足食,四元数实现我自己写好了。
然后我才发现,首先是Pytorch3d只能在linux系统下安装,windows系统不兼容。
另一个重大发现:

1
nvidia-smi

输出的压根就不是当前电脑安装的驱动版本,而是当前显卡支持的最高版本驱动!装pytorch的时候,务必要看仔细了。

4070Ti显卡驱动安装

马上就要收到这张激动人心的显卡了(我愿称之为小4090)。接下来是安装CUDA、CUDNN以及torch的时刻,这里有一些坑,准备做好记录工作,我是往win11的WSL上安装CUDA,win11系统上只安装驱动,不安装任何软件。

安装显卡驱动

这一步是安装硬件驱动,应该装在win11系统下,去nividia官网上找到工作室驱动,勾选以下选项:
安装Studio显卡驱动
然后下载安装即可(不要安装游戏驱动,那个虽然比工作室驱动在游戏上效果稍好,但是更新非常频繁,影响使用)。
安装完毕,可以命令行中输入nvidia-smi输出当前显卡驱动版本等信息,则说明显卡驱动安装已经完毕。

CUDA安装

驱动能够让CPU访问GPU的,使用GPU参与运算,最快捷的方式还是调用Nvidia封装起来的CUDA库函数,这也是Nvidia的核心机密。安装CUDA之前,进行驱动查验,这一步骤可参考自官网文档
在命令行中输入以下命令,显示正常版本号和驱动版本号:

1
lspci | grep -i nvidia

验证当前系统类型:

1
uname -m && cat /etc/*release

同时输入gcc --version查验当前已经安装gcc
以上验证均获得通过后,可前往官网上下载CUDA安装程序,尤其注意,如果使用的是WSL,应该选择wsl-ubuntu选项,其余各个选项如下:
安装CUDA
此时会在下面生成命令行指令,按需要复制进命令行或者.sh文件运行即可。
安装完毕,输入命令nvcc --version,如果显示当前CUDA版本号,则说明安装成功。

CUDNN安装

CUDNN是Nvidia推出的供神经网络加速的软件算法,专用于torch等深度学习框架。安装CUDNN,可以参考官网教程

conda环境中的CUDA安装

conda可以直接从Nvidia官网上下载对应版本的CUDA和CUDNN,甚至更进一步,连nvcc也可以一并下载安装使用,可谓之是深度学习必备之工具包。

使用conda安装CUDA、CUDNN

可以简单地使用以下命令:

1
conda install cudatoolkit=11.0

这样就可以安装CUDA11.0版本,如果需要其他版本,可以在官网上查找对应版本号,通常兼容度较好的版本有11.3版本、11.8版本,其他的较新或者较旧不推荐。同时,该命令将同时安装对应版本的CUDNN,这个不用我们再单独安装,除非在代码运行过程中报错,可通过以下命令手动补充安全对应的CUDA版本的CUDNN:

1
conda install cudnn=8.0

使用conda安装nvcc

如果在torch的使用中需要应用自定义的CUDA代码,例如算子等,则必须要求设备上有可以使用的nvcc,如果服务器上的CUDA与使用的conda版本不同,又无法安装,可直接使用conda安装,使用以下命令,conda将自动根据当前环境内的CUDA版本安装对应的nvcc:

1
conda install -c nvidia cuda-nvcc

当然为了保险,或者安装有特殊需要的nvcc版本,可以首先使用以下命令查找一下对应的版本号:

1
conda search -c nvidia cuda-nvcc

然后再使用以下命令安装:

1
conda install -c nvidia cuda-nvcc=11.0

这样就可以安装对应版本的nvcc了,示例中是安装的11.0的版本。

安装可能出现的问题

cc1plus: fatal error: cuda_runtime.h: No such file or directory这个问题是CUDA相应的头文件和源文件没有完整安装,在conda环境中只安装了nvcc而该程序在编译过程中找不到对应的库,即使强行在conda里面找到了个别头文件如cuda.h并将其路径增加至环境变量中也不能解决问题,查询问题后在github上找到了一个可行的解决方案:

1
conda install nvidia::cuda-cudart-dev=<version>

安装与cudatoolkit对应版本的开发文件包,即可解决上述问题。

简易安装

以上的conda安装始终稍显复杂,通过一段时间的学习,可以使用environment.yaml文件来完成以上cuda环境的配置,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
name: cuda
channels:
- pytorch
- defaults
- conda-forge
dependencies:
- python=3.9
- cuda-nvcc=11.8 # 安装nvcc
- cuda-nvprof=11.8 # 安装计时工具
- cuda-memcheck=11.8 # 安装内存检查工具
- pip:
- ninja # 安装编译工具
# - cmake # 高版本cmake以方便调试,可选的

conda将自动查找符合该配置的CUDA版本和CUDNN文件,并自动在虚拟环境中完成该系统环境变量的配置,不需要显式地下载cudatoolkit等库。这样就可以直接使用conda env create -f environment.yaml来创建一个cuda环境,该环境中不含有torch等常用的库,可根据对应的requirements.txt文件完成安装。