详解tensorflow2.x版本⽆法调⽤gpu的⼀种解决⽅法
最近学校给了⼀个服务器账号⽤来训练神经⽹络使⽤,服务器本⾝配置是⼗路titan V,然后在上⾯装了tensorflow2.2,对应的python版本是3.6.2,装好之后⽤tf.test.is_gpu_available()查看是否能调⽤gpu,结果返回结果是false,具体如下:
这⾥tensorflow应该是检测出了gpu,但是因为某些库⽆法打开⽽导致tensorflow⽆法调⽤,返回了false,详细查看错误信息可以看到⼀⾏:
可以看到上⾯⼏个⽂件都顺利打开了,但是最后⼀个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命令把这个⽂件发到服务器上,解压出来可以看到~/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(),可以看到:
这时已经显⽰成功打开了libcudnn.so.7⽂件,说明tf根据我提供的⽬录成功到了这个⽂件,在打开了这些库⽂件后,最下⾯也返回了True:tensorflow版本选择
还可以⽤另⼀个⽅法tf.config.list_physical_devices(‘GPU')查看当前可⽤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内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论