一、问题描述
跑程序时遇到runtime cudnn版本问题,程序报错,如下图所示。
即:加载的运行时 cudnn 库: 7103(兼容版本7100) ,但源代码是用7005(兼容版本7000)编译的。如果使用二进制安装,请升级您的 cudnn 库以匹配。如果从源代码构建,请确保在运行时加载的库与编译配置期间指定的协同容错版本相匹配。
也就是说,代码跑的环境里cudnn版本是7.1.3,而源代码要求cudnn版本是7.0.5,必须调整程序环境的cudnn版本。
二、解决办法
1、过程描述
参考以下资料得两种解决办法,一是升级TF版本到1.8.0(配置的环境是TF1.4.1),但是笔者复现的代码README上的TF是1.4.1,不想之后跑程序有更多问题,这个方法没有尝试;二是更改cudnn版本,配置环境时,TF1.4.1配置的是CUDA8.0,cuDNN6.0,决定将cuDNN调整为7.0.5版本。 1、在运行Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7003 2、深度学习环境搭建(二): Ubuntu不同版本gcc,CUDA,cuDNN共存,切换解决方案 3、ubuntu安装并切换多个版本的cuda 4、Pytorch-cuDNN version mismatch: PyTorch was compiled against 7005 but linked against 7103
至此,新问题出现,程序报错显示运行的cudnn7.1.3,环境配置cudnn6.0,二者不一致。参考文献4得知虚拟环境是由anaconda建立的,其lib文件夹里存在cudnn7.1.3,故运行的程序没有用到配置的cudnn6.0。(即,/home/ubuntu/anaconda3/envs/py27_tf141/lib中存在cudnn7.1.3) 查询cudnn版本都说用下面这个命令,但是这查询的是本地安装的cudnn版本,事实证明anaconda创建的虚拟环境不一定用到本地安装的cudnn。
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
(可直接看下方解决方法步骤)提醒自己的一点: 笔者电脑存在多版本cuda,按照参考文献3,已将使用的cuda环境变量设置好,并且把cuda链接指向了cuda8.0,也就是说,环境变量路径文件里的cuda就是已经安装好的cuda8.0文件夹。
2、解决方法步骤
① 下载cuDNN7.0.5,压缩包解压后得到的cuda文件夹放在home待用。 过程参考Ubuntu16.04装CUDA和cuDNN。
② 把cuDNN7.0.5文件加入anaconda创建的虚拟环境里,该虚拟环境笔者命名为py27_tf141。 在home右键打开终端,输入以下命令,目的地路径就是虚拟环境的include、lib两个文件夹的路径,得符合自己的实际情况。
sudo cp cuda/include/cudnn.h /home/ubuntu/anaconda3/envs/py27_tf141/include
sudo cp cuda/lib64/libcudnn* /home/ubuntu/anaconda3/envs/py27_tf141/lib
sudo chmod a+r /home/ubuntu/anaconda3/envs/py27_tf141/include/cudnn.h /home/ubuntu/anaconda3/envs/py27_tf141/lib/libcudnn*
③ 软链接指向 进入虚拟环境的lib文件夹,即/home/ubuntu/anaconda3/envs/py27_tf141/lib,用下方命令查看cudnn有关文件、软连接指向。
ls -al |grep cudnn
可以看到存在cudnn7.0.5、cudnn7.1.3,libcudnn.so指向libcudnn.so.7,libcudnn.so.7指向libcudnn.so.7.0.5,这就是实际软链接。 更改软连接指向,用以下命令,实现软连接指向cudnn7.0.5。
sudo ln -sf libcudnn.so.7.0.5 libcudnn.so
sudo ln -sf libcudnn.so.7.0.5 libcudnn.so.7
以上,已经解决了笔者的问题。
相关记录
1、查询cudnn版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
图中由cudnn版本定义得cudnn runtime版本为7005,三位数字对应版本cuDNN7.0.5。 2、查看创建的软连接命令:
ll /usr/local/cuda/lib64/
同时可以看到存在什么版本的cuda、cudnn。
|