做DL课的作业必须要用到GPU(当然主要是做前几个作业的时候把colab给的免费资源用完了),所以决定新配置一个虚拟环境做作业。但没想到这次安装踩了巨多的坑,即使是跟着详细的教程,也还是把能踩的坑全踩了一遍。。。所以决定把痛苦的经历整理分享出来。
System information
版本是成功的关键,加粗的这几个版本可以照抄。
在安装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版本之间错综复杂的关系。。。稍有不慎就会导致检测不到GPU和DNN library is not found这样的错误。
很多教程都会提到,需要注意CUDA版本与显卡的对应关系,注意tensorflow-gpu和cuDNN之间版本的对应,版本对应关系可以在tensorflow官网查到(主要就是这张图):
注意这张表的意思是最高不能超过上面写的版本。
在安装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文件夹中已经存在。
所以我们需要把cuDNN中的文件复制粘贴到现有的同名文件夹中(如下图)。
然后运行:
>>>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显示的版本不一致? - 简书
我在本地运行jupyter notebook时,在做神经网络模型fit时出现了这个错,但是在colab上运行时并未发现这个错误。网上各种说法很多,普遍认为这比较复杂,最好重新配置环境。
因为在colab上运行没有出现问题,所以我参考了colab上CUDA的版本(11.2),进行了重新安装:
最后我通过这条建议,升级了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的安装。
至此已经成功配置好了环境,可以继续写作业了。。。回溯整个过程,最重要的地方就是版本对应。不知道怎么对应版本的可以直接按照我这个成功方案进行安装。