首頁 > 軟體

CentOS6.5編譯Caffe過程記錄(系統存在多個編譯器)

2020-06-16 17:18:21

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

作業系統是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

說明:

執行yum list boost*會顯示有boost-devel和boost148-devel兩個版本可用,但boost-devel版本是1.41,不滿足Caffe的要求(1.47)所以安裝boost148-devel。

//不要同時安裝1.41,否則有可能產生大量如下編譯錯誤:
‘boost::shared_ptr<boost::error_info<boost::tag_original_exception_type, const std::type_info*> >’到‘const boost::shared_ptr<boost::exception_detail::error_info_base>’的轉換有歧義

然後安裝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
# 執行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編譯器,否則在後續編譯Caffe連結階段會報錯:

Undefined reference to xxxx(…std::__cxx11::basic_string … )

同時還要在用CMAKE_CXX_FLAGS指定編譯選項-fPIC否則後續編譯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
# 執行cmake生成Makefile
mkdir build && cd build
cmake -DCMAKE_CXX_FLAGS=-fPIC ..
# 開始編譯 24執行緒
make -j 24
sudo make install
cd ..
popd

說明:這裡用CMAKE_CXX_FLAGS指定編譯選項-fPIC否則後續編譯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
# 執行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
如前述指定使用作業系統原生的4.4.7編譯器,
如果不加這個引數也能找到原生的編譯器,那麼這兩個引數就可以不加
-DCPU_ONLY=ON
因為我的電腦上沒有Nvidia顯示卡也沒有安裝cuDNN,所以這裡只編譯CPU版本
-DBUILD_python=OFF
-DBUILD_python_layer=OFF
不編譯Python相關程式碼
Centos6.5預設安裝的python版本(2.6.6)也不滿足Caffe的要求(2.7),生成Makefile時會有警告並報錯,如果你暫時用不到python相關的特性,可以像我一樣把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 代表多執行緒編譯,後面的數位指開啟多少個執行緒進行編譯,我編譯用的電腦是24核伺服器所以設定為24,使用多執行緒編譯可以大大加快編譯速度。

Ubuntu 15.04 下Caffe + + CUDA 7.0 安裝設定指南  http://www.linuxidc.com/Linux/2016-11/137497.htm

Caffe 深度學習入門教學  http://www.linuxidc.com/Linux/2016-11/136774.htm

Ubuntu 16.04下Matlab2014a+Anaconda2+OpenCV3.1+Caffe安裝 http://www.linuxidc.com/Linux/2016-07/132860.htm

Ubuntu 16.04系統下CUDA7.5設定Caffe教學 http://www.linuxidc.com/Linux/2016-07/132859.htm

Caffe在Ubuntu 14.04 64bit 下的安裝 http://www.linuxidc.com/Linux/2015-07/120449.htm

深度學習框架Caffe在Ubuntu下編譯安裝  http://www.linuxidc.com/Linux/2016-07/133225.htm

Caffe + Ubuntu 14.04 64bit + CUDA 6.5 設定說明  http://www.linuxidc.com/Linux/2015-04/116444.htm

Ubuntu 16.04上安裝Caffe http://www.linuxidc.com/Linux/2016-08/134585.htm

Caffe設定簡明教學 ( Ubuntu 14.04 / CUDA 7.5 / cuDNN 5.1 / OpenCV 3.1 )  http://www.linuxidc.com/Linux/2016-09/135016.htm

Ubuntu 16.04上安裝Caffe(CPU only)  http://www.linuxidc.com/Linux/2016-09/135034.htm

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-03/142239.htm


IT145.com E-mail:sddin#qq.com