新聞中心
最近開始學習Caffe,準備工作就是要把Caffe的開發(fā)環(huán)境建立起來,首先就是要能成功編譯Caffe,買了一本Caffe入門書:《深度學習:21天實戰(zhàn)Caffe》,上面有詳細的Caffe編譯說明。原本以為照著說明步驟一步步往下走就能一輕松完成編譯,實際情況卻比我想象的復雜了。
先說明一下我的電腦環(huán)境:

創(chuàng)新互聯(lián)擁有10余年成都網(wǎng)站建設(shè)工作經(jīng)驗,為各大企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)服務(wù),對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、成都APP應(yīng)用開發(fā)、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名申請等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項目的能力。
操作系統(tǒng)是Linux centos6.5(虛擬機),原生的gcc編譯器版本是4.4.7(/usr/bin),為了編譯C++11代碼我又安裝了支持C++11的版本5.2.0(/usr/local/bin),無Nvidia顯卡。
安裝Caffe的依賴庫
先用yum安裝Caffe的依賴庫:
sudo yum install protobuf-devel leveldb-devel snappy-devel OpenCV-devel boost148-devel hdf5-devel atlas-devel numpy
說明:
執(zhí)行yum list boost*會顯示有boost-devel和boost148-devel兩個版本可用,但boost-devel版本是1.41,不滿足Caffe的要求(1.47)所以安裝boost148-devel。
//不要同時安裝1.41,否則有可能產(chǎn)生大量如下編譯錯誤:
‘boost::shared_ptr >’到‘const boost::shared_ptr’的轉(zhuǎn)換有歧義
然后安裝gflags,glog,lmdb
sudo yum install gflags-devel glog-devel lmdb-devel
出問題了,yum list并沒有找到glog…
于是我索性去github下載了gflags和glob重新編譯
gflags下載地址:https://github.com/gflags/gflags
glog下載地址:https://github.com/google/glog
編譯gflags
build_gflags.sh
#!/bin/sh
gflags_folder=gflags-master
if [ -d $gflags_folder ]
then
rm -fr $gflags_folder
fi
# 從 https://github.com/gflags/gflags 下載gflags源碼 gflags-master.zip解壓縮
unzip gflags-master.zip
pushd $gflags_folder
# 執(zhí)行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCMAKE_CXX_FLAGS=-fPIC ..
# 開始編譯 24線程
make -j 24
sudo make install
cd ..
popd
說明:這里用CMAKE_CXX_COMPILER,CMAKE_C_COMPILER指定使用CentOS6.5原生的編譯器4.4.7,不能使用C++11編譯器,否則在后續(xù)編譯Caffe鏈接階段會報錯:
Undefined reference to xxxx(…std::__cxx11::basic_string … )
同時還要在用CMAKE_CXX_FLAGS指定編譯選項-fPIC否則后續(xù)編譯Caffe過程中也會報錯。
編譯glog
build_glog.sh
#!/bin/sh
glog_folder=glog-master
if [ -d $glog_folder ]
then
rm -fr $glog_folder
fi
# 從 https://github.com/google/glog 下載glog源碼 glog-master.zip解壓縮
unzip glog-master.zip
pushd $glog_folder
# 執(zhí)行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_FLAGS=-fPIC ..
# 開始編譯 24線程
make -j 24
sudo make install
cd ..
popd
說明:這里用CMAKE_CXX_FLAGS指定編譯選項-fPIC否則后續(xù)編譯Caffe過程中會報錯。
編譯Caffe
build_caffe.sh:
#!/bin/sh
caffe_folder=caffe-master
if [ -d $caffe_folder ]
then
rm -fr $caffe_folder
fi
# 從 https://github.com/BVLC/caffe 下載Caffe源碼 caffe-master.zip解壓縮
unzip caffe-master.zip
pushd $caffe_folder
# 執(zhí)行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++ -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc -DCPU_ONLY=ON -DBUILD_Python=OFF -DBUILD_python_layer=OFF -DBoost_INCLUDE_DIR=/usr/include/boost148 -DBoost_LIBRARY_DIR=/usr/lib64/boost148 ..
# 開始編譯 24線程
make install -j 24
cd ..
popd
說明:
-DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++
-DCMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc
如前述指定使用操作系統(tǒng)原生的4.4.7編譯器,
如果不加這個參數(shù)也能找到原生的編譯器,那么這兩個參數(shù)就可以不加
-DCPU_ONLY=ON
因為我的電腦上沒有Nvidia顯卡也沒有安裝cuDNN,所以這里只編譯CPU版本
-DBUILD_python=OFF
-DBUILD_python_layer=OFF
不編譯Python相關(guān)代碼
Centos6.5默認安裝的python版本(2.6.6)也不滿足Caffe的要求(2.7),生成Makefile時會有警告并報錯,如果你暫時用不到python相關(guān)的特性,可以像我一樣把BUILD_python,BUILD_python_layer禁用,否則你就要去安裝一個2.7以上版本的python,參見我的另一篇文章《CentOS6.5下為編譯Caffe升級python2.6.6到2.7》
-DBoost_INCLUDE_DIR=/usr/include/boost148
-DBoost_LIBRARY_DIR=/usr/lib64/boost148
指定Boost的include和library路徑
安裝boost148-devel時,boost148的頭文件并沒有安裝在/usr/include/boost,而是安裝在/usr/include/boost148/boost下
同樣的道理安裝boost148-devel時
libboost-*.so文件(比如/usr/lib64/下libboost-filesystem-mt.so)的軟連接都安裝在/usr/lib64/boost148下而非默認的/usr/lib64下
所以這里要指定boost include文件和library文件路徑
-j 代表多線程編譯,后面的數(shù)字指開啟多少個線程進行編譯,我編譯用的電腦是24核服務(wù)器所以設(shè)置為24,使用多線程編譯可以大大加快編譯速度。
網(wǎng)站名稱:CentOS6.5編譯Caffe過程記錄(系統(tǒng)存在多個編譯器)
文章源于:http://m.fisionsoft.com.cn/article/dhgsccg.html


咨詢
建站咨詢
