一、下载与CUDA版本对应的cudnn

官网,根据之前安装好的CUDA版本选择一个合适的cudnn版本。我之前安装的是cuda10.2,因此这里选择了cuDNN v8.1.0
根据教程,我下载了以下四个文件,但是后面才知道这是两种安装方式。
image.png

二、cudnn的安装

2.1 第一种安装方式
将从第一个链接下载的cudnn-10.2-linux-x64-v8.1.0.77.solitairetheme8文件后缀名称改为.tgz的。然后利用tar -xzvf对其进行解压。
将解压出来的部分文件复制到指定文件夹,并对其赋予执行权限。

  1. sudo cp cuda/include/cudnn.h /usr/local/cuda/include
  2. sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
  3. sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

2.2 第二种安装方式

  1. sudo dpkg -i libcudnn7_8.1.0.77-1+cuda10.2_amd64.deb
  2. sudo dpkg -i libcudnn7-dev_8.1.0.77-1+cuda10.2_amd64.deb
  3. sudo dpkg -i libcudnn7-doc_8.1.0.77-1+cuda10.2_amd64.deb

这里我遇到了链接问题,后面补充。

三、验证安装是否成功

  1. cp -r /usr/src/cudnn_samples_v8/ .
  2. cd cudnn_samples_v8/mnistCUDNN/
  3. make clean && make
  4. ./mnistCUDNN

等结果Result = PASS,即可说明安装成功。

四、安装时遇到的问题

4.1文件链接问题:

  1. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link
  2. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link
  3. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link
  4. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 is not a symbolic link
  5. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link
  6. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link
  7. /sbin/ldconfig.real: /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link

解决方法:将cudnn的版本号改为自己的版本号即可

  1. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
  2. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
  3. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
  4. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
  5. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
  6. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
  7. sudo ln -sf /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.8.1.0 /usr/local/cuda-10.2/targets/x86_64-linux/lib/libcudnn.so.8

4.2 其实,我第一次安装的时候失败了。在试运行samples的时候报错test.c:1:10: fatal error: freeimage.h no such file or directory解决方法 sudo apt-get install libfreeimage3 libfreeimage-dev。

4.3 时隔半年后,服务器上NVIDIA-docker没办法使用。经查是driver自动升级了,在同事的帮忙下重新卸载有冲突的driver并重新安装了一个。在验证cuDNN是否安装成功时遇到了以下报错信息。

  1. xxx@gpu8010:~/cudnn_samples_v8/mnistCUDNN$ ./mnistCUDNN
  2. Executing: mnistCUDNN
  3. cudnnGetVersion() : 8100 , CUDNN_VERSION from cudnn.h : 8100 (8.1.0)
  4. Host compiler version : GCC 7.5.0
  5. ERROR: cuda failure (unknown error) in error_util.h:91
  6. Aborting...

目前找到了三种解决方法:1.重启电脑链接2);2.重新安装;3.将主板BIOS设置中的“Windows UEFI mode”改为“Other OS”
本想优先尝试方法3,但是服务器的BIOS没找到入口。
对于方法2,我尝试了将第一种方式cp到指定文件夹下的文件都转移到备份文件夹下,再用sudo dpkg -i 安装3个deb文件。但安装完之后遇到同样报错,且/usr/local/cuda/文件夹下,未找到对应的可用文件。
后面想先解决nvidia-docker2的安装,回头再看这个问题,该问题也解决了。

参考文章:

  1. 官方文档:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#installlinux-tar
  2. ubuntu下驱动、cuda、cudnn的安装套餐:https://blog.csdn.net/qq_23981335/article/details/113245479
  3. cudnn的安装:https://blog.csdn.net/moses1994/article/details/83931037