1. 程式人生 > >在centos7上配置caffe所遇到的一些問題

在centos7上配置caffe所遇到的一些問題

之前在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 pycaffe
CXX/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..