【泡咖啡1】linux下caffe編譯以及python環境配置手記
caffe是一個深度學習的庫,相信搞深度學習的話,不是用這個庫就是用theano吧。要想使用caffe首先第一步就是要配置好caffe的環境。在這裡,我主要說的是在debian的linux環境下如何配置好caffe的庫。因為python編寫程式比較方便,在文章最後,我還會具體說明如何配置python環境。本文章為本人原創,部分內容整理自網路,若有不妥之處請聯絡本人刪除。非盈利性質網站轉載請在文章開頭處著名本文作者:77695,來源http://www.cnblogs.com/cj695/。盈利性質網站轉載請與作者聯絡,聯絡方式在文章後面。如未聯絡,本人將通過一切可能且合法的途徑追繳相應稿酬。請在轉載時保留此宣告。
1、前期準備
使用這一句話建立一個makefile.config的副本
接下來就是修改makefile.config,在這個檔案裡面對應的註釋講的很清楚,需要哪一項,吧對應那一項前面“#”去掉就好了
先拿make all測試,提示錯誤如下:
make: protoc:命令未找到
make: *** [.build_release/src/caffe/proto/caffe.pb.h] 錯誤 127
2、編譯以及安裝protoc
執行
$ ./autogen.sh
原來先要安裝curl:額,貌似curl安裝不成功那就跳過吧。因為curl祈禱的作用就是下載檔案,但https://googletest.googlecode.com/files/gtest-1.7.0.zip
下載好以後把壓縮包移動過去。
找到對應位置註釋掉curl
再次執行,提示錯誤
./autogen.sh: 40: ./autogen.sh: autoreconf: not found
原因是沒安裝 automake 工具
執行命令安裝:sudo apt-get install autoconf automake libtool
再一次./autogen.sh,成功!然後依次執行以下命令
$ ./configure
$ make
$ make check
$ make install
執行完make check以後出現:
就說明沒什麼問題了,就可以繼續執行make install
執行完以後切換到caffe目錄,先make clean一下,接著make all
還是提示找不到庫,
3、安裝一系列依賴庫
再執行安裝一些庫:sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev,稍等
再執行make clean,接著make all,提示:
./include/caffe/common.hpp:5:27: fatal error: gflags/gflags.h: 沒有那個檔案或目錄。說明protobuf的庫已經差不多了。
4、安裝gflags
cd gflags-master mkdir build && cd build export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1 make sudo make install在執行第三句話的時候可能會提示版本較低,直接在這裡
下載最新版本的cmake就好了(下載.sh的檔案直接執行就可以了)。要配置一下環境變數
然後接著執行下面兩條命令,就好了。弄完之後繼續切換到caffe目錄,先make clean一下,接著make all
./include/caffe/util/mkl_alternate.hpp:11:19: fatal error: cblas.h: 沒有那個檔案或目錄
compilation terminated.
說明gflag安裝成功了,
5、編譯安裝ATLAS
接下來開始搞定cblas的問題。BLAS(Basic Linear Algebra Subprograms,基礎線性代數程式集)是一個應用程式介面(API)標準。他的實現有很多,caffe用的是其中的三種實現ATLAS, MKL, or OpenBLAS.這裡我準備使用ATLAS:http://sourceforge.net/projects/math-atlas/files/ 先下載,解壓。按照官方文件寫的,依次執行如下命令
首先選擇高效能cpu模式:
/usr/bin/cpufreq-selector -g performance然後在ATLAS目錄下建立資料夾 mkdir Linux_C2D64SSE3 # create BLDdir cd Linux_C2D64SSE3 # enter BLDdir
../configure -b 64 -D c -DPentiumCPS=2800 -Fa
alg -fPIC --with-netlib-lapack-tarfile=/home/haiyu/Programs_Install/lapack-3.5.0.tgz --prefix=/usr/local/atlas
粗體引數需要根據個人系統修改:
-b 指定編譯出庫的型別(32位庫還是64位庫)
-D c -DPentiumCPS 是指定你的CPU的時鐘頻率,可以通過 grep MHz /proc/cpuinfo 得到
-Fa alg -fPIC 得到與位置無關的程式碼,生成動態的共享庫
--prefix 為安裝路徑
--with-netlib-lapack-tarfile 則是lapack壓縮包路徑
make build # tune & build lib make check # sanity check correct answer make ptcheck # sanity check parallel make time # check if lib is fast make install # copy libs to install dir
這裡還需要一個lapack的庫,在這裡下載http://www.netlib.org/lapack/,下載之後直接把/home/whaley/dload/lapack-3.4.1.tgz替換成對應的路徑就好了
在執行../configure的時候,會提示gfortran:命令未找到,直接用apt-get安裝即可。然後make build之後就可以休息去了。等一個小時再過來看吧。
ok。。現在是第二天。昨天晚上凌晨3點的時候終於看到它提示DONE了。這速度。太!“快”!了!繼續執行接下來的命令幾個可以忽略的就忽略了,然後再切換到CAFFE目錄make clean/all,依舊提示
但這個時候在atla的prefix指定的安裝路徑下已經有include/cblas.h
執行這兩條,新增目錄到include環境變數
6、安裝lmdb
接著make,提示錯誤lmdb沒裝
git clone git://gitorious.org/mdb/mdb.git
cd mdb/libraries/liblmdb
make && make install
執行完,再回到caffe目錄編譯
提示:
AR -o .build_release/lib/libcaffe.a
LD -o .build_release/lib/libcaffe.so
/usr/bin/ld: cannot find -lcblas
/usr/bin/ld: cannot find -latlas
collect2: error: ld returned 1 exit status
7、安裝其他依賴包
解決辦法:安裝這些包
apt-get install libatlas-dev
apt-get install liblapack-dev
apt-get install libatlas-base-dev
問題解決
又提示這個錯誤.build_release/lib/libcaffe.so: undefined reference to `google::protobuf,重新編譯protobuf
make uninstall
make clean
./configure --prefix=/usr
make
make check
make install
搞定,返回caffe,編譯成功!!!!!!!!!!!!!此處有掌聲!!!!!
然後把目錄新增到PYTHON環境變數就行了
export PYTHONPATH=$PYTHONPATH:/home/cj695/protobuf/python/
最後還要找到protobuf的Python目錄
python setup.py build
python setup.py test
python setup.py install
安裝一下
激動人心的一顆來了!!!!!!!!!!!開啟python,import caffe。。這一刻,我哭了!!!!!!!!!!!!!
8、總結一下
耗費兩天時間,卡時間比較多的主要有兩個地方,首先查錯一定要從上往下查。基本上最上面的錯誤才是最根本的錯誤;其次,在安裝過程中對配置做過的修改一定要記清楚,別自己把安裝路徑改了結果還不知道是怎麼回事。
另外,如果在安裝gflags的時候出現問題,可以實驗一下用apt-get安裝gflag,命令如下:
sudo apt-get install python-gflags
caffe的配置大概也就這些內容,希望這篇文章能夠對你有所幫助