解决TensorFlow-GPU 2.x使用GPU报错:Could not load dynamic library ‘libcudnn.so.7‘

前言

  本篇博客主要解决在安装tensorflow-gpu之后,使用gpu训练模型时报错的问题。

1. 问题描述

软件版本号
OSUbuntu 18.04
CUDA10.1
cuDNN7.6.5
TensorFlow-GPU2.3.0
	# test whether GPU can be used
	import tensorflow as tf

	# 查看版本号
	tf.__version__
	# 查看gpu能否使用
	tf.test.is_gpu_available()
	# tf.config.list_physical_devices('GPU')

  然后报错:Could not load dynamic library 'libcudnn.so.7'; dlerror: libcudnn.so.7: cannot open shared object file: No such file or directory,根据下图可以看出tensorflow检测到了有gpu的存在,并输出了gpu的相关信息,但是缺少gpu的库文件libcudnn.so.7,导致gpu不能正确加载。

在这里插入图片描述

2. 问题原因

  缺少gpu的库文件,因为我使用PyTorch进行GPU训练是可以的,所以猜测是tensorflow的依赖问题,缺少相关库导致gpu加载失败。

3. 解决过程

  理论上来讲,从别的机子上copy一下这个文件,应该也是能用的,但,我的是服务器…不好弄。所以就看了看相关博客,在此做总结如下:

	# 使用conda安装cudnn
	conda install -c anaconda cudnn

在这里插入图片描述
  然后再次进行测试gpu能否使用:

在这里插入图片描述

  这就很ok了,既然通过conda安装之后解决了,说明是虚拟环境中缺少gpu的加载库。
  再回头看一下这条指令是什么意思:conda install -c anaconda cudnn
  有些包在conda默认的channels中不包含,比如cudatoolkitcudnn等,这时只需要在conda install指令后加上-c anaconda 即可。也确实,有时候使用pip install一些库时,会导致相关的依赖没有完全安装完,不知道使用pip install cudnn能否成功,暂未测试 ,已测试,pypi没有cudnn库。

  tensorflow-gpucuDNNCUDA的版本对应关系,请参阅官网文档

4. 补充

  在配置过程中还遇到过相似的问题,不仅仅是'libcudnn.so.7'找不到,cuda相关的动态库也都找不到:

2022-02-28 14:30:14.561975: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcudart.so.10.0'; dlerror: libcudart.so.10.0: cannot open shared object file: No such file or directory
2022-02-28 14:30:14.562052: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcublas.so.10.0'; dlerror: libcublas.so.10.0: cannot open shared object file: No such file or directory
2022-02-28 14:30:14.562167: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcufft.so.10.0'; dlerror: libcufft.so.10.0: cannot open shared object file: No such file or directory
2022-02-28 14:30:14.562230: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcurand.so.10.0'; dlerror: libcurand.so.10.0: cannot open shared object file: No such file or directory
2022-02-28 14:30:14.562291: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcusolver.so.10.0'; dlerror: libcusolver.so.10.0: cannot open shared object file: No such file or directory
2022-02-28 14:30:14.562353: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcusparse.so.10.0'; dlerror: libcusparse.so.10.0: cannot open shared object file: No such file or directory
2022-02-28 14:30:14.562416: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcudnn.so.7'; dlerror: libcudnn.so.7: cannot open shared object file: No such file or directory

在这里插入图片描述
  可以看到,CUDA10.0cudnn7相关的库没有找到,去/usr/local目录看一下发现CUDA是已经安装好的,然后查看了一下环境变量,发现CUDA没有加进去:

在这里插入图片描述
  配置一下CUDA的环境变量:

# 编辑 .bashrc 文件,在文件末添加如下内容:
export CUDA_HOME="/usr/local/cuda"
export LD_LIBRARY_PATH="$CUDA_HOME/lib64:$CUDA_HOME/extras/CUPTI/lib64:$LD_LIBRARY_PATH"
export PATH="$CUDA_HOME/bin:$PATH"

# 编辑完成后记得 source 一下
# 注:我这里的 cuda 文件夹是个软连接,cuda-10.0的软连接

  然后再次进行测试gpu能否使用:

在这里插入图片描述
  由此可以得出结论,GPU不能用时,首先要考虑以下问题:

1. CUDA的版本与TensorFlow的版本是否对应`(使用 nvcc -V 查询CUDA版本)`
2. CUDA和cudnn是否安装成功
3. CUDA的环境变量是否配置好了

5. 再次补充

  关于终端执行代码可以使用gpu,而通过pycharm执行仍然出现上述的错误进行解决:

在这里插入图片描述

  在pycharm中添加cuda动态库的环境变量:

# 工具栏:
Run --> Edge Configurations --> Environment variables

# 然后添加 LD_LIBRARY_PATH 信息

在这里插入图片描述

在这里插入图片描述
  然后再次进行测试gpu能否使用:

在这里插入图片描述

6. 最后一次补充

  本次补充的内容是:nvidia-smi显示的CUDA版本与nvcc -V显示的CUDA版本不一致的原因。
  nvidia-smi显示的CUDA版本:

在这里插入图片描述

  nvcc -V显示的CUDA版本:

在这里插入图片描述
  这样就有了一个场景:我需要安装TensorFlow,现有2.6.0(11.2)2.4.0(11.0)2.2.0(10.1)1.15.0(10.0)四个版本可供选择,哪个可以安装?可能小伙伴觉得2.4.0(11.0)版本很合适,但是在使用过程中就会出现Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory。正确的操作是按照nvcc -V显示的CUDA版本来看,可以选择1.15.0(10.0)这个版本(实际测试时,2.2.0(10.1)这个版本也可以)。
  为什么会有两个CUDA版本?这就不得不了解一下driver APIruntime API,按照NVIDIA官方的说法driver APIruntime API非常相似,在很大程度上可以互换使用。然而,两者之间有一些关键的区别值得注意,它们都有着自己的CUDA版本。
  nvidia-smi属于driver API,用于支持driver API的必要文件(比如libcuda.so.xxx)是由NVIDIA Driver安装的,nvcc属于runtime API,用于支持runtime API的必要文件(比如libcudart.so.xxx)是由CUDA Toolkit安装的。它们并不是一一对应的,作为一个工具包,CUDA Toolkit可以同时安装多个版本,比如博主的,同时安装了7个不同的版本,以兼容不同的使用场景:

在这里插入图片描述
  现在将CUDA版本有10.0切换到11.2,使TensorFlow 2.5.0(11.2)能够使用GPU

在这里插入图片描述
  测试GPU能否正常使用:

在这里插入图片描述

在这里插入图片描述

  tips:如果我安装的CUDA版本是10.0,也是可以使用TensorFlow 2.3.0(10.1),目前测试得出的结果是:CUDA的版本和TensorFlow的版本只需要小数点前面的版本号一致即可,即CUDA 11.x可同时兼容TensorFlow 2.6.0(11.2)TensorFlow 2.4.0(11.0)

7. 结束语

  我想,应该没有其他问题了叭~

在这里插入图片描述

在这里插入图片描述

  • 17
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
这个错误提示"Could not load dynamic library 'libcudnn.so.8'; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory"通常是由于缺少"CUDNN"库文件或者文件路径配置有误引起的。 "CUDNN"是一个用于深度学习框架TensorFlow的库文件,它提供了一些加速计算的函数和工具。解决这个问题的方法有以下几种: 1. 检查"CUDNN"库文件是否存在。你可以通过在命令行中输入"ls /usr/local/cuda-11.0/lib64"来查看库文件是否存在。如果不存在,你需要安装"CUDA"和"CUDNN",并确保将库文件放在正确的路径下。 2. 检查文件路径配置是否正确。你可以通过设置环境变量"LD_LIBRARY_PATH"来指定库文件的路径。确保这个环境变量中包含了"CUDNN"库文件所在的路径,比如"/usr/local/cuda-11.0/lib64"。 3. 如果你已经正确安装了"CUDA"和"CUDNN",但仍然出现这个错误,可能是因为版本号不匹配导致的。你可以尝试升级或降级"CUDNN"的版本,使其与你的深度学习框架版本兼容。 总结来说,解决这个问题的关键是确保"CUDNN"库文件已经正确安装,并且文件路径配置正确。如果问题仍然存在,你可能需要进一步检查深度学习框架和库文件的版本兼容性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [tensorflow调用GPU出错:Could not load dynamic librarylibcudnn.so.8](https://blog.csdn.net/weixin_44133816/article/details/126216461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Ubuntu下TensorFlow报错:Could not load dynamic librarylibcudnn.so.8‘; dlerror: libcudnn.so.8: ...](https://blog.csdn.net/weixin_46584887/article/details/122729896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Could not load dynamic library 'cudart64_110.dll'; dlerror: cuda](https://download.csdn.net/download/xiangzidejia/86723763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏小悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值