UNIMPLEMENTED: DNN library is not found. 细数安装tensorflow-gpu时CUDA版本和cudnn版本的坑

前言

做DL课的作业必须要用到GPU(当然主要是做前几个作业的时候把colab给的免费资源用完了),所以决定新配置一个虚拟环境做作业。但没想到这次安装踩了巨多的坑,即使是跟着详细的教程,也还是把能踩的坑全踩了一遍。。。所以决定把痛苦的经历整理分享出来。

System information

  • OS Platform and Distribution: windows 10
  • display adapters: NVIDIA GeForce RTX 3070 Ti
  • tensorflow-gpu installed from: Simple Index
  • tensorflow version: 2.10.0
  • python version: 3.8
  • Installed using virtualenv tensorflow_gpu
  • GCC/Compiler version: 11.2
  • CUDA driver version: 11.6.110
  • CUDA version: 11.2
  • cuDNN version: 8.2.1

版本是成功的关键,加粗的这几个版本可以照抄。

第一个坑

在安装CUDA和cudnn之前,需要先安装Microsoft Visual C++ Redistributable,下载地址:Latest supported Visual C++ Redistributable downloads | Microsoft Learn。安装完成后需要重启电脑。

接下来将按照教程Tensorflow GPU版本安装教程,非常详细,建议收藏_EminemBest的博客-CSDN博客_如何安装gpu版本的tensorflow的步骤进行安装。版本问题将在第二个坑中提到!!

第二个大坑

最大的坑就是tensorflow-gpu版本、CUDA driver版本、CUDA版本和cuDNN版本之间错综复杂的关系。。。稍有不慎就会导致检测不到GPUDNN library is not found这样的错误。

  1. tensorflow-gpu版本、CUDA driver版本、CUDA版本和cuDNN版本分别是什么,如何查看

很多教程都会提到,需要注意CUDA版本与显卡的对应关系,注意tensorflow-gpu和cuDNN之间版本的对应,版本对应关系可以在tensorflow官网查到(主要就是这张图):

注意这张表的意思是最高不能超过上面写的版本

UNIMPLEMENTED: DNN library is not found. 细数安装tensorflow-gpu时CUDA版本和cudnn版本的坑_第1张图片

在安装tensorflow-gpu时,我并没有指定版本(因为报错说找不到2.6.0-2.4.0版本的tensorflow-gpu,所以我就不带版本号默认下载了最新版):

pip install tensorflow-gpu

安装成功后在查看tensorflow版本号:

import tensorflow as tf
print(tf.__version__)

这里我安装的默认最新版本是2.10.0

但是2.10.0版本并不在tensorflow官网的版本对应关系表里面,我当时按照这边教程先安装了11.1版本的CUDA,然后下载了对应版本的cuDNN v8.0.5 (November 9th, 2020), for CUDA 11.1。

值得一提的是cudnn的安装。教程里写的是直接将官网下载的cuDNN压缩包解压,然后复制到CUDA文件中。具体步骤可以参考我的做法:

上面的窗口是解压后的cuDNN文件夹,下图是CUDA文件夹。但是我们会发现bin、include、lib这几个文件夹在CUDA文件夹中已经存在。

UNIMPLEMENTED: DNN library is not found. 细数安装tensorflow-gpu时CUDA版本和cudnn版本的坑_第2张图片

 

所以我们需要把cuDNN中的文件复制粘贴到现有的同名文件夹中(如下图)。

UNIMPLEMENTED: DNN library is not found. 细数安装tensorflow-gpu时CUDA版本和cudnn版本的坑_第3张图片

 UNIMPLEMENTED: DNN library is not found. 细数安装tensorflow-gpu时CUDA版本和cudnn版本的坑_第4张图片

 

然后运行:

>>>print(tf.config.list_physical_devices('GPU'))
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

到这里为止,GPU设备已经能够被调用。

如果我们通过nvcc —version 命令行命令查看,可以查看当前CUDA版本号。这个版本号和我们从CUDA官网下载的版本号一致。

通过nvidia-smi也可以查看CUDA version,但这里查看的是CUDA driver版本。这两条命令的区别可以参考这篇:【CUDA】nvcc和nvidia-smi显示的版本不一致? - 简书

  1. UNIMPLEMENTED: DNN library is not found.

我在本地运行jupyter notebook时,在做神经网络模型fit时出现了这个错,但是在colab上运行时并未发现这个错误。网上各种说法很多,普遍认为这比较复杂,最好重新配置环境。

因为在colab上运行没有出现问题,所以我参考了colab上CUDA的版本(11.2),进行了重新安装:

UNIMPLEMENTED: DNN library is not found. 细数安装tensorflow-gpu时CUDA版本和cudnn版本的坑_第5张图片

 

最后我通过这条建议,升级了cuDNN的版本,解决了这个问题:

under cuda 11.2 install cudnn>8.2

tensorflow - How to install latest cuDNN to conda? - Stack Overflow

在cuDNN官网下载cuDNN v8.2.1 (June 7th, 2021), for CUDA 11.x版本,重复cudnn的安装。

总结

至此已经成功配置好了环境,可以继续写作业了。。。回溯整个过程,最重要的地方就是版本对应。不知道怎么对应版本的可以直接按照我这个成功方案进行安装。

你可能感兴趣的:(Deep,learning,tensorflow,深度学习)