在centos7上配置caffe所遇到的一些问题

时间:2021-08-07 19:20:05

之前在Ubuntu上配置过一次caffe,还算顺利,并没有遇到什么特别大的问题,但那是一台普通的台式机,并不能担负起跑数据的重担,于是换到了一台服务器上。


服务器上的系统是centoOS,之前并没有接触过centOS,听很多人告诉我,在centOS上配caffe是十分麻烦的,我还不太懂,但在后面的配置过程中,我才真正体会到了什么叫做生不如死。


有人推荐我不要看网上乱七八糟的博客,看官方的安装配置文档才是王道,但是因为英语水平有限,看官方文档总是觉得很难受,于是还是打算看网上的配置教程。打开百度一搜才发现,大部分的配置教程都是在Ubuntu系统上的,而少有的几个centOS上配置caffe的教程,也说的不怎么详细,看得似懂非懂。但考虑到Ubuntu和centOS都是Linux系统,差别应该不大,所以就照着Ubuntu上的配置教程来装caffe。结果在安装依赖项上就出现了问题。


事实上整个安装过程,大部分的时间也是浪费在了依赖项的安装上,许多时候安装错误,会造成很大的麻烦。

依赖项的安装

centOS安装是不用apt-get的,而是用yum,但作为门都没有入的新手,自然是摸不着头脑。而依赖项的名字,也和Ubuntu上不太一样。

比如在Ubuntu上,安装语句是

$ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev
$ sudo apt-get install libboost-all-dev

但是到了centOS上,就要使用

sudo yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel
而在我的centOS上,leveldb-devel和hdf5-devel是不能使用yum install直接安装的,因此就不得不手动安装了

HDF5的安装

在安装leveldb的时候,出了不少问题,但都还算容易解决,但装hdf5的时候,遇到的问题都比较棘手。

首先hdf5我不知道去哪里下载!(╯‵□′)╯︵┻━┻

后来发现其实是有官方网站的,hdf5网站但上了官方网站,我又懵逼了,因为我实在不知道究竟该下什么东西。(╯‵□′)╯︵┻━┻

后来我费了很大力气找到了这个链接hdf5-1.8.17,在里面下载hdf5-1.8.17.tar.gz,然后就可以正常安装了。其他版本的安装包也可以通过修改链接里面的版本找到。

当然,推荐还是用rpm安装,但是当时我不仔细没看到有提供rpm的下载。

但是不知道什么原因,我的HDF5装了两个不同的版本,结果在caffe make runtest的时候,就报错

Warning! ***HDF5 library version mismatched error***
The HDF5 header files used to compile this application do not match
the version used by the HDF5 library to which this application is linked.
Data corruption or segmentation faults may occur if the application continues.
This can happen when an application was compiled by one version of HDF5 but
linked with a different version of static or shared HDF5 library.
You should recompile the application or check your shared library related
settings such as 'LD_LIBRARY_PATH'.
You can, at your own risk, disable this warning by setting the environment
variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
Setting it to 2 or higher will suppress the warning messages totally.
Headers are 1.8.17, library is 1.8.11<pre name="code" class="plain">......
(省略)
......
runtest Aborted(core dumped)

应该是我不小心装了1.8.17和1.8.11两个版本的HDF5,而且电脑默认的是HDF5-1.8.11,于是我又把hdf5-1.8.11的东西全都删掉,重新安装了一遍1.8.17版本,并将 

caffe重新编译,最后解决了问题。

这里可以看看这位同学写的博客,很有帮助!点击打开链接

gflags的安装

另外,还需要安装glog,gflags和lmdb这几个依赖库,而这几个依赖库在我的系统上也是需要手动安装的。

lmdb和glog的安装都还算顺利,但是在安装gflags的时候出现了问题。装gflags一定要记得加上-fPIC,否则在后面配置caffe时,make 会出错,提示Bad value。

wget https://github.com/schuhschuh/gflags/archive/master.zip 
unzip master.zip
cd gflags-master
mkdir build && cd build
export CXXFLAGS=”-fPIC” && cmake .. && make VERBOSE=1
make && make install

或者在gflags文件夹中,修改CMakeCache.txt文件,在CMAKE_CXX_FLAGS:STRING=后面加上"-fPIC"。

但是不知道为什么,我的gflags仍然安装的有问题,所以我又装了一边gflags,这一下可除了大问题了,在配置caffe时,make all和make test都没有问题,但make runtest的时候,出现了如下错误

ERROR: flag ‘flagfile’ was defined more than once (in files '/path/gflags-master/gflags.cc' and '/path/gflags-2.1.2/gflags.cc')
这个问题明显是因为我装了两次gflags导致的,但是我先删除了gflags-master,又删除了gflags-2.1.2,重新安装,又重新下载了caffe重新编译,尝试了各种各样的方法,都不奏效,这个问题在网上也有人遇到过,但讨论来讨论去,似乎都没什么奏效的方法,但在github上见有人说装了一个低版本的gflags就好了,于是我又重新下载了一个gflags-2.1.1版本,结果问题居然奇迹般的解决了,关于这一点我一直没想明白,也不知道这个解决方法是不是普适的。

make pycaffe

最后是make matcaffe和make pycaffe,前者还比较顺利,但之前需要再caffe的Makefile.config文件中修改路径,make pycaffe的时候,却出现了错误,原因是缺少python-devel,这个直接yum install python-devel即可,很好解决。

后来又出现了这个问题
# make pycaffeCXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory
#include <numpy/arrayobject.h>
^
compilation terminated.
^[[A^[[Amake: *** [python/caffe/_caffe.so] Error 1
这是因为缺少numpy,只要安装就好了
# yum install numpy

最后

# make pycaffe
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
touch python/caffe/proto/__init__.py
PROTOC (python) src/caffe/proto/caffe.proto
python 也配置好了!

.
.
.

To be continued..