关于ImportError: libcudnn.so.7: cannot open shared object file错误以及非root用户安装cudnn
使用 Tensorflow 的时候出现了错误Tensorflow:ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory
从报错信息上来看,就是libcudnn.so.7
文件没有找到。
首先检查是否是cuda的链接出现了错误,ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory解决
简单来说,就是:
首先检擦libcudnn.so.7
文件是否存在,这个文件夹一般在usr/local
文件夹下,可以使用命令:
ll /usr/local
查看自己的cuda信息,在服务器上一般都会有多个版本,但是会将cuda指向其中一个,这时候检查各个文件夹(例如cuda-9.0
, cuda-10.0
等等)下的lib64
文件夹下是否有libcudnn.so.7
文件夹(例如,在/usr/local/cuda-9.0/lib64
文件夹下找到了libcudnn.so.7
,)记住这个文件夹,这时候需要在配置文件信息里添加这个路径,使用
vim .bashrc
打开文件 -> Esc
-> i
进入编辑模式,然后添加配置信息:
export PATH="/usr/local/cuda-9.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH"
注意这里的cuda-9.0
要根据实际改变。(关于export
命令,可见:环境变量设置export 命令详解)
但是!!! 我试了之后发现我的/usr/local/cuda-X/lib64下面并没有这个libcudnn文件,我解决的方法是安装自己的cudnn,(我是非root用户),这里介绍非root用户如何安装cudnn。(可以参考, Linux非root用户如何优雅的安装cuda和cudnn)
首先,在官网找到下载:cuDNN Archive(或者是参考 下载历史版本cudnn)注意这个网站需要注册,然后下载的话记得还要做个survey,总之找到这个页面:

然后找到你要使用的版本(注意与Cuda版本对应,可以使用nvcc -V
看一下你的Cuda版本),然后点击就可以下载了,当然也可以直接使用命令,但是往往会受到网速限制,注意下载之后是一个后缀名为.solitairetheme8
的文件,这个文件需要改名,如果是已经上传到服务器,使用
cp XXXX.solitairetheme8` XXXX.tgz
命令改名,如果还是在windows下直接改成.tgz
文件即可,然后再服务器中找个位置使用:
tar -xvfz XXXX.tgz
解压即可,如果你比较"精细",那么可以将这个文件夹移动到上面的cuda文件夹下,当然也可以直接在某个位置解压。
最后一样要改一改环境变量配置文件,例如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export LD_LIBRARY_PATH="/home/XXX...XXX/cudnn/cuda/lib64:$LD_LIBRARY_PATH"
注意按照自己的实际解压位置改一下路径。
然后我就可以用了,其实总结一下就是两个步骤:
- 首先检测文件是否存在,环境变量中的链接路径是否写对
- 如果没有文件,则单独安装libcudnn包