linux替换cudnn版本以及链接库碰到的问题

总说

这篇博客主要是给自己看的。哎哎,他们在我电脑跑程序,一会儿他把cudnn换成5.0的,一会儿又被另一个换成3.0的,然而最近别人在我电脑编译的tensorflow是基于cudnn是5.1的,然而我现在的版本是5.0的,出现错误。

sudo tar -zxvf cudnn-7.5-linux-x64-v5.1.tgz
cd cuda
sudo cp include/cudnn.h /usr/local/cuda/include/
sudo cp lib64/* /usr/local/cuda/lib64/

上面没什么好说的,就是把相应的文件cudnn.h文件和lib64文件夹下的链接库文件考入相应的位置呗。
注意:解压出来的lib64下面有3个so文件。分别是 libcudnn.so 和 libcudnn.so.5以及 libcudnn.so.5.1.3文件。 并且这3个点so文件大小都一样。其实都是软连接!libcudnn.so链接到libcudnn.so.5,而libcudnn.so.5.又链接到libcudnn.so.5.1.3。 正真的文件只有libcudnn.so.5.1.3,因此我们要将/usr/local/lib64下的以前的这样的链接替换掉。由于装cuda时,比如我装的是cuda8.0,那么在/usr/local/下会生成cuda-8.0文件夹,以及一个cuda文件夹,cuda是软链接到cuda-8.0的,所以这两个文件夹可以看成一个。往任意一个文件夹中添加东西,另一个文件夹都会有相同的东西。

cd /usr/local/cuda/lib64
ll

出现:

-rw-r--r-- 1 root root    720192  816  2015 libcudart_static.a
lrwxrwxrwx 1 root root        15 103 22:39 libcudnn.so -> libcudnn.so.5.0*
lrwxrwxrwx 1 root root        17 104 18:34 libcudnn.so.5 -> libcudnn.so.5.0.

我们需要把以前的这3个文件删除。libcudnn.so和libcudnn.so.5以及libcudnn.so.5.0

sudo rm libcudnn.so.5 libcudnn.so.5.0*
sudo rm libcudnn.so

然后自己创建类似的链接。由于5.1已经被链接到了5.1.3上了。所以我们要删掉以前的.so文件,然后创建新的.so文件,并且链接到5.1上。

sudo ln -s libcudnn.so.5.1 libcudnn.so
ll

最后出现

lrwxrwxrwx 1 root root        15 106 22:40 libcudnn.so -> libcudnn.so.5.1*
lrwxrwxrwx 1 root root        17 106 22:40 libcudnn.so.5.1 -> libcudnn.so.5.1.3*
-rwxr-xr-x 1 root root  60696704 106 22:37 libcudnn.so.5.1.3*
-rwxrwxrwx 1 root root  59715990 106 22:37 libcudnn_static.a*

路径问题

这里写图片描述
由于某种原因,出现了这个问题。cudnn链接有问题,就知道要么是路径有问题了。查看了一下/usr/local/cuda,发现cudnn并没有链接上,所以按照上面的方法进行链接。
这里怎么说是找主文件夹下的torch/install/lib来找cudnn呢?
在前面安装torch时,有个选项说是否把这个路径LD_LIBRARY_PATH加入到.bashrc中。点了Yes。于是查看

vim ~/.bashrc

发现最后一行是

. /home/yan/torch/install/bin/torch-activate

那么接着找这个torch-activate

export LUA_PATH='/home/yan/.luarocks/share/lua/5.1/?.lua;/home/yan/.luarocks/share/lua/5.1/?/init.lua;/home/yan/torch/install/share/lua/5.1/?.lua;/home/yan/torch/install/share/lua/5.1/?/init.lua;./?.lua;/home/yan/torch/install/share/luajit-2.1.0-beta1/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua'
export LUA_CPATH='/home/yan/.luarocks/lib/lua/5.1/?.so;/home/yan/torch/install/lib/lua/5.1/?.so;./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so'
export PATH=/home/yan/torch/install/bin:$PATH
export LD_LIBRARY_PATH=/home/yan/torch/install/lib:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/home/yan/torch/install/lib:$DYLD_LIBRARY_PATH
export LUA_CPATH='/home/yan/torch/install/lib/?.so;'$LUA_CPATH

发现这里在原来的$LD_LIBRARY_PATH变量前面加入了/home/yan/torch/install/lib。那么按照类似的方法,简单粗暴的直接在.bashrc中加入cuda路径。

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export CUDA_HOME=/usr/local/cuda

Tensorflow的官方文档中加入了extras/CUPTI/lib64的路径和/usr/local/cuda的。这个主要是有libcputi.so文件,如果不加的话会Couldn't open CUDA library libcupti.so
最后的最后干脆粗暴点,直接运行下面2句。

source ~/.bashrc
sudo ldconfig

这里写图片描述


版权声明:本文为Hungryof原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。