记CUDA与CUDNN安装的坑
CUDA安装之锅
难蚌,装个Pytorch3d装一上午也装不起,与其装好库调包,还不如自己动手丰衣足食,四元数实现我自己写好了。
然后我才发现,首先是Pytorch3d只能在linux系统下安装,windows系统不兼容。
另一个重大发现:
1 | nvidia-smi |
输出的压根就不是当前电脑安装的驱动版本,而是当前显卡支持的最高版本驱动!装pytorch的时候,务必要看仔细了。
4070Ti显卡驱动安装
马上就要收到这张激动人心的显卡了(我愿称之为小4090)。接下来是安装CUDA、CUDNN以及torch的时刻,这里有一些坑,准备做好记录工作,我是往win11的WSL上安装CUDA,win11系统上只安装驱动,不安装任何软件。
安装显卡驱动
这一步是安装硬件驱动,应该装在win11系统下,去nividia官网上找到工作室驱动,勾选以下选项:
然后下载安装即可(不要安装游戏驱动,那个虽然比工作室驱动在游戏上效果稍好,但是更新非常频繁,影响使用)。
安装完毕,可以命令行中输入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
选项,其余各个选项如下:
此时会在下面生成命令行指令,按需要复制进命令行或者.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 | name: cuda |
conda
将自动查找符合该配置的CUDA版本和CUDNN文件,并自动在虚拟环境中完成该系统环境变量的配置,不需要显式地下载cudatoolkit
等库。这样就可以直接使用conda env create -f environment.yaml
来创建一个cuda环境,该环境中不含有torch等常用的库,可根据对应的requirements.txt
文件完成安装。