手机版 欢迎访问it开发者社区(www.mfbz.cn)网站

当前位置: > 开发

Ubuntu18.04下配置Caffe的问题集锦

时间:2021/5/20 21:39:18|来源:|点击: 次

(先把内容记录一下,等有空了再弄一下格式)
我不算太小白了,至少几个流行的框架都搭建过以及一些知名的算法都跑过,但搭建caffe的过程仍然让我感到非常吐血。
一些具体的手把手配置流程网上已经有很好的教程了,本文主要汇集了一些较为罕见的错误,以供大家参考和把握
caffe官网:http://caffe.berkeleyvision.org/install_apt.html
官网的两行代码的安装方式
sudo apt install caffe-cuda
sudo apt build-dep caffe-cuda # dependencies for CUDA version
用处不大,只是将caffe从源码那里编译好移植到自己电脑上,建议不要采用这样的方式,缺失了很多依赖文件
最好还是下载caffe的源码到自己电脑上,然后按照步骤一步一步地自己编译:
1、Prerequisites最好严格按照caffe官网进行,其中,严格cuda8.0和cudnnv6这样的搭配,随之而来的是gcc和g++要降为5版本
2、Makefile.config和Makefile按照网上的配置即可
这里推荐https://blog.csdn.net/CAU_Ayao/article/details/83536320和,比较完善。出现问题的话搜一下即可,90%以上都是路径配置的问题,基本不会去改源代码。

一些注意事项:

用命令 ‘cmake ./’ 来进行依赖项完整性的检查 https://blog.csdn.net/u010158659/article/details/77276000

‘cmake ./’ 找不到cuDNN版本信息 https://www.cnblogs.com/phillee/p/11173316.html

/usr/lib/x86_64-linux-gnu/libcudnn.so → /etc/alternatives/libcudnn_so

sudo make runtest -j16的时候ERROR: something wrong with flag ‘flagfile’ in file ‘XXXX/gflags-master/src/gflags.cc’. One possibility: file ‘XXXX/gflags-master/src/gflags.cc’ is being linked both statically and dynamically into this executable
解决方法:https://blog.csdn.net/xiaxiazls/article/details/52042385

问题集锦:
1、make all 的时候出现“/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h”。
大致原理就是Python的路径不对,CPLUS的path没有设置。详见:https://blog.csdn.net/qq_30024069/article/details/90747346?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162048020216780274150617%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162048020216780274150617&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-5-90747346.first_rank_v2_pc_rank_v29&utm_term=wrap_python.hpp%3A50%3A11%3A+fatal+error%3A+pyconfig.h
2、make all 的时候出现 Undefined reference to ‘__cudaPopCallConfiguration’。
原理就是CUDA版本不对,我原来的版本是CUDA9.0(因为教研室服务器很多人在用导致版本混乱),将CUDA降为8.0即可,也可以不用降级,安装CUDA8.0然后建立软链接即可。详见:https://blog.csdn.net/hitlizhaoting/article/details/86562747?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162061422716780271587534%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162061422716780271587534&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-4-86562747.first_rank_v2_pc_rank_v29&utm_term=caffe+undefined+reference+to
3、make all 的时候出现
.build_release/lib/libcaffe.so:undefined reference to‘cudnnGetConvolutionForwardAlgorithm’
.build_release/lib/libcaffe.so:undefined reference to‘cudnnGetConvolutionBackwardFilterAlgorithm’
.build_release/lib/libcaffe.so:undefined reference to‘cudnnGetConvolutionBackwardDataAlgorithm’

这个问题困扰了我一周多的时间,可以说是十分崩溃了,尝试了各种方法:百度、Google、GitHub、StackOverflow,只能搜出来一堆非常相近但是毫无帮助的解答。这个函数名称告诉我这一定是cuDNN的问题,但不知道问题出在哪。我还一度以为是cuDNN版本的问题。
并且我看这个问题少有人提出,无奈之下只能依靠自己。https://blog.csdn.net/Eliudragon/article/details/78315135是有讲这个问题的,但是那个解决方法我实在没看懂
直到我搜到了这篇帖子https://blog.csdn.net/u010158659/article/details/77276000,虽然浏览人数不多,但绝对称得上是精品!感觉就像是沙漠里面找到了甘霖!
这篇帖子说:“较常见的问题是.so等待链接的符号没有定义。”、“可以使用命令 ‘cmake ./’ 来进行依赖项完整性的检查”简直一针见血地指出了问题所在。
于是我就用 cmake ./ 检查了一下,终于发现了问题:
– Found cuDNN: v??? (include: /usr/include, library: /usr/lib/x86_64-linux-gnu/libcudnn.so) CMake Error
果然!问题就出在/usr/lib/x86_64-linux-gnu/libcudnn.so的引用上。
为什么是这么奇怪的文件夹/usr/lib/x86_64-linux-gnu/,因为在Makefile.config里面,路径LIBRARY_DIRS := $(PYTHON_LIB) /usr/lib/x86_64-linux-gnu,所以会在这里面去找。
那么把/usr/local/cuda/lib64加入到LIBRARY_DIRS里面去行不行呢?我试了,不行。
那么就陷入了另一个问题,/usr/lib/x86_64-linux-gnu/libcudnn.so这个问题该怎么改?
帖子https://www.cnblogs.com/phillee/p/11173316.html说到了这个问题,解释得比较清楚,但是对我没用,我按照他的方法试了一下,发现连前面的make all都跑不通了
又困扰了我几天时间,我自己瞎搞的时候发现,/usr/lib/x86_64-linux-gnu/libcudnn.so ← /etc/alternatives/libcudnn_so ← /usr/lib/x86_64-linux-gnu/libcudnn.so.8 ← /usr/lib/x86_64-linux-gnu/libcudnn.so.8.0.1,有这么一条软链接
意思就是 /usr/lib/x86_64-linux-gnu/libcudnn.so 根本就没有链接到 /usr/local/cuda/lib64 里面去嘛,这根本就行不通。
于是我自己瞎试了一下,直接将 /usr/local/cuda/lib64/libcudnn.so.7.0.4 链接到 /usr/lib/x86_64-linux-gnu/libcudnn.so,发现 make all 居然直接跑通了!!

4、make runtest的时候ERROR: something wrong with flag ‘flagfile’ in file ‘XXXX/gflags-master/src/gflags.cc’. One possibility: file ‘XXXX/gflags-master/src/gflags.cc’ is being linked both statically and dynamically into this executable
解决方法:https://blog.csdn.net/xiaxiazls/article/details/52042385

至此,我自己遇到的一些重大问题全都解决了。其他问题正如我前言所说,百分之九十都是路径配置,或者 .so 文件的链接问题,遇到报错,百度又搜不到,多想想路径、依赖库有没有问题,基本都可以迎刃而解。

编译Matlab接口的Matcaffe时出现的错误:
1、MEX 文件 ‘/home/wangjiyao/caffe/matlab/+caffe/private/caffe_.mexa64’ 无效: /usr/lib/libgdal.so.20: symbol TIFFReadRGBATileExt version LIBTIFF_4.0 not defined in file libtiff.so.5 with link time reference
出错 caffe.set_mode_cpu (line 5)
caffe_(‘set_mode_cpu’);
出错 caffe.run_tests (line 6)
caffe.set_mode_cpu();

原理就是Matlab自带的matlabpath/bin/glnxa64/libtiff.so.5里面没有LIBTIFF_4.0这个定义。
因此我输入命令$locate libtiff.so.5,找到系统自带的libtiff.so.5,在目录/usr/lib/x86_64-linux-gnu下。
网上的解决方法是在~/.bashrc中export一下,但是不太好。我自己选择建立软链接,将/usr/lib/x86_64-linux-gnu/libtiff.so.5文件软链接到matlabpath/bin/glnxa64/libtiff.so.5

2、警告: 执行 ‘caffe.Net’ 类析构函数时,捕获到以下错误:
错误使用 caffe_
Could not convert handle to pointer due to invalid init_key. The object might have been cleared.
出错 caffe.Net/delete (line 73)
caffe_(‘delete_net’, self.hNet_self);
警告: 执行 ‘caffe.Solver’ 类析构函数时,捕获到以下错误:
错误使用 caffe_
Could not convert handle to pointer due to invalid init_key. The object might have been cleared.
出错 caffe.Solver/delete (line 40)
caffe_(‘delete_solver’, self.hSolver_self);
警告: 执行 ‘caffe.Net’ 类析构函数时,捕获到以下错误:
错误使用 caffe_
Could not convert handle to pointer due to invalid init_key. The object might have been cleared.
出错 caffe.Net/delete (line 73)
caffe_(‘delete_net’, self.hNet_self);
警告: 执行 ‘caffe.Net’ 类析构函数时,捕获到以下错误:
错误使用 caffe_
Could not convert handle to pointer due to invalid init_key. The object might have been cleared.
出错 caffe.Net/delete (line 73)
caffe_(‘delete_net’, self.hNet_self)

【注意】:这个错误涉及到了源代码的修改,在我第一段说的90%之外,因此直接按照网上教程即可
原理就是,caffe很久没有更新,已经很老了,难免有点bug。因此直接按照教程修改即可。

Copyright © 2002-2019 某某自媒体运营 版权所有