详解tensorflow2.x版本无法调用gpu的一种解决方法


Posted in Python onMay 25, 2020

最近学校给了一个服务器账号用来训练神经网络使用,服务器本身配置是十路titan V,然后在上面装了tensorflow2.2,对应的python版本是3.6.2,装好之后用tf.test.is_gpu_available()查看是否能调用gpu,结果返回结果是false,具体如下:

详解tensorflow2.x版本无法调用gpu的一种解决方法

这里tensorflow应该是检测出了gpu,但是因为某些库无法打开而导致tensorflow无法调用,返回了false,详细查看错误信息可以看到一行:

详解tensorflow2.x版本无法调用gpu的一种解决方法

可以看到上面几个文件都顺利打开了,但是最后一个libcudnn.so.7文件显示无法打开,not such file or directory。怀疑是cuda有问题,服务器本身是装的cuda10.1,跟tensorflow2.2应该是吻合的,但是一直无法调用,所以一开始我想重新安装cuda,覆盖掉服务器本来的cuda,下好安装包之后,因为我不是管理员,没有root权限,所以总是失败。但是安装过程中了解到系统的cuda安装目录,位于/usr/local/cuda下面,这个libcudnn.so.7应该是一个库文件,那应该放在cuda的安装目录下面,具体地,在/usr/local/cuda/lib64下面,之前在我的windows本地机器安装cuda时还要下载cudnn7.x,然后把文件拷贝到cuda对应的目录下面,我怀疑lib64目录下面的这个libcudnn.so.7文件有问题,因为在linux版本的cudnn中是可以看到libcudnn.so.7这个文件的。
于是,打开lib64目录,查找是否有libcudnn.so.7这个文件,结果是没有找到这个文件,这就很奇怪了,cuda10.1目录下面竟然没有cudnn的文件,我也没有权限修改/usr/local,因此想到既然是少了这个文件,那是不是把对应的文件加载在别的目录下,引导tensorflow去另一个我可以操作的目录下找这个libcudnn.so.7文件,就可以解决问题呢?我带着试验性的心态wget下载cudnn,结果在命令行下无法下载cudnn,原因是cudnn下载需要登录,而在命令行下就没办法下载。于是在本地机器上下载了linux版的cudnn,然后用scp命令把这个tar.gz文件发到服务器上,解压出来可以看到~/cudnn/cuda/lib64下面有libcudnn.so.7。接下来就是添加环境变量,让tensorflow不仅在/usr/local/cuda/lib64下找文件,还可以在我这个目录下找,添加命令:

export PATH=$PATH:/usr/local/cuda-10.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-10.1/lib64

这几行命令添加系统cuda的库
然后添加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/users/cudnn/cuda/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/home/users/cudnn/cuda/lib64

这里的/home/users/cudnn/cuda/lib64视自己的libcudnn.so.7文件目录而定,最后是更新:

source /etc/profile

如果tensorflow是按照在anaconda虚拟环境下的,在执行这几条命令会自动退出虚拟环境。记得重新进入:

source activate 环境名

这时重新进入python,导入tensorflow,然后运行tf.test.is_gpu_available(),可以看到:

详解tensorflow2.x版本无法调用gpu的一种解决方法

这时已经显示成功打开了libcudnn.so.7文件,说明tf根据我提供的目录成功找到了这个文件,在打开了这些库文件后,最下面也返回了True:

详解tensorflow2.x版本无法调用gpu的一种解决方法

还可以用另一个方法tf.config.list_physical_devices(‘GPU')查看当前可用gpu:

详解tensorflow2.x版本无法调用gpu的一种解决方法

十块gpu都显示出来了。
注意,添加这几条命令只在当前连接上有用,如果断开了服务器连接再重新连接时,需要重新输入这些命令。

这个方法只是作为一个参考,碰巧是在tensorflow2.2上这个libcudnn.so.7文件打不开,于是尝试性地试了一下,结果成功了。其他机器上如果出现同类问题,采用这个方法不一定能解决,只是提供一个思路。在tensorflow2.1上,也同样出现gpu无法调用的问题,但打印的错误信息不仅有libcudnn.so.7文件无法打开,还有其他几个文件也打不开,这些文件基本都是lib开头的,可以查看这些文件是否在cuda的lib64目录下,如果找得到这些文件,那有可能是环境变量设错了,可以试试上面那些命令:

export PATH=$PATH:/usr/local/cuda-10.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-10.1/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-10.1/lib64

如果找不到,那可以试试跟我一样先把这些文件下载到机器上面,给系统添加环境变量到对应这些文件的目录,引导tf去找。当然,这只是我一种猜测,tensorflow2.1和2.2用的应该都是cuda10.1,但是我不清楚为什么2.2只有一个文件无法打开,而2.1就有好几个文件打不开,而在1.9版本上,由于1.9似乎用的不是10.1版本的cuda,其错误原因更多,这里要区分开。

到此这篇关于详解tensorflow2.x版本无法调用gpu的一种解决方法的文章就介绍到这了,更多相关tensorflow2.x无法调用gpu内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python程序员开发中常犯的10个错误
Jul 07 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
Python操作列表之List.insert()方法的使用
May 20 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
Jul 02 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
python实现烟花小程序
Jan 30 Python
Python-ElasticSearch搜索查询的讲解
Feb 25 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
Python Tensor FLow简单使用方法实例详解
Jan 14 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python如何实现的二分查找算法
May 27 Python
keras模型保存为tensorflow的二进制模型方式
May 25 #Python
keras 如何保存最佳的训练模型
May 25 #Python
keras处理欠拟合和过拟合的实例讲解
May 25 #Python
python如何调用字典的key
May 25 #Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 #Python
Python+PyQt5实现灭霸响指功能
May 25 #Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 #Python
You might like
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
php常用文件操作函数汇总
2014/11/22 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
vue 实现通过vuex 存储值 在不同界面使用
2019/11/11 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
python中base64加密解密方法实例分析
2015/05/16 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
求职简历的自我评价怎样写好
2013/10/07 职场文书
大学生求职简历的自我评价范文
2013/10/12 职场文书
团队队名口号大全
2014/06/06 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
2015年中个人总结范文
2015/03/10 职场文书
蜗居观后感
2015/06/11 职场文书