ubuntu16.04安裝caffe以及各種問題彙總
前言:
本文是基於已經成功安裝了python各種常用包、opencv、cuda
安裝過程
1、首先安裝各種更新包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y build-essential cmake git pkg-config
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install -y libatlas-base-dev
sudo apt-get install -y --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install -y python-pip
sudo apt-get install -y python-dev
sudo apt-get install -y python-numpy python-scipy
sudo apt-get install -y libopencv-dev
2、下載caffe
cd ~
mkdir git //在home下新建一個git資料夾,用來存放那些從github上git下來的文zong件
git clone https://github.com/BVLC/caffe.git //從github上git caffe
3、開始安裝
cd caffe //開啟到剛剛git下來的caffe
cp Makefile.config.example Makefile.config //將Makefile.config.example的內容複製到Makefile.config
//因為make指令只能make Makefile.config 檔案,而Makefile.config.example是caffe給出的makefile例子
gedit Makefile.config //開啟Makefile.config檔案
仔細閱讀makefile中的註釋語句其實就知道該怎麼操作了,為了方便理解,筆者還是介紹一各個配置說明。
在開啟的Makefile.config修改如下內容:
//如果你不使用GPU的話,就將
# CPU_ONLY := 1
修改成:
CPU_ONLY := 1
//若使用cudnn,則將
# USE_CUDNN := 1
修改成:
USE_CUDNN := 1
//若使用的opencv版本是3的,則將
# OPENCV_VERSION := 3
修改為:
OPENCV_VERSION := 3
//若要使用python來編寫layer,則需要將
# WITH_PYTHON_LAYER := 1
修改為
WITH_PYTHON_LAYER := 1
//重要的一項
將# Whatever else you find you need goes here.下面的
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
修改為:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
//這是因為ubuntu16.04的檔案包含位置發生了變化,尤其是需要用到的hdf5的位置,所以需要更改這一路徑
4、為hdf5之類的檔案建立新的連結
\\首先執行下面兩句話:
find . -type f -exec sed -i -e 's^"hdf5.h"^"hdf5/serial/hdf5.h"^g' -e 's^"hdf5_hl.h"^"hdf5/serial/hdf5_hl.h"^g' '{}' \;
cd /usr/lib/x86_64-linux-gnu
\\然後根據情況執行下面兩句:
sudo ln -s libhdf5_serial.so.10.1.0 libhdf5.so
sudo ln -s libhdf5_serial_hl.so.10.0.2 libhdf5_hl.so
\\注意:這裡的10.1.0和10.0.2根據不同的系統可能對應的數字會不同,比如在ubuntu15.10中其數字就是8.0.2.
\\具體的數字可以在開啟的檔案中檢視對應檔案後面跟的數字
5、執行python資料夾下的指令
\\現在將目錄cd到你之前git的caffe資料夾下:
cd python
for req in $(cat requirements.txt); do pip install $req; done
\\如果發現執行上述程式碼後,終端中有很多紅字,一堆的錯誤之類的,那不管是什麼錯誤都執行下面一句話:
for req in $(cat requirements.txt); do sudo -H pip install $req --upgrade; done
\\執行完上面這句話後應該就不會有很多紅字錯誤了
6、make 各種檔案
cd .. \\此時位置應該處於caffe資料夾下
make all -j8 //j8代表計算機cpu有8個核,因此可以多執行緒一起make,這樣make的速度會快很多。一般常用的還有j4
make test -j8
make runtest -j8
make pycaffe //如果以後用python來開發的話必須執行這一句,一般不管你是否用python,都會執行這一句
make distribute
至此,安裝caffe差不都就已經完成了。但是筆者在安裝的過程中,遇到了各種各樣問題,有時候解決了這個問題,那個問題又出現了,幾近崩潰的邊緣,究其原因還是對ubuntu這個系統熟悉。筆者在遇到問題google的時候都將介面留存了下來,下面羅列一下遇到問題以及解決方式。
caffe安裝錯誤集錦
1
在make all 的時候出現如下錯誤
Error 'fatal error: pyconfig.h: No such file or directory' when executing 'make pycaffe' on dev-branch #410
解決方案:
make clean
export CPLUS_INCLUDE_PATH=/usr/include/python2.7
make all -j8
2
string.h ‘memcy’ was not declared in this scope
解決方案:開啟makefile搜尋並替換
NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
為
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
儲存退出
重新make
3
類似以下情況的錯誤:
.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
這種問題很有可能是你的系統中使用的是opencv3,但是你的Makefile.config中沒有將OPENCV_VERSION := 3這一句取消註釋。
4
出現各種undefined referenceserrors,比如:
undefined reference togoogle::base::CheckOpMessageBuilder::NewString()'
這類問題往往是因為gcc和g++編譯器版本的問題,在ubuntu16.04中,其預設的gcc編譯器版本是gcc 5,但是cuda目前又不支援高於4.9的編譯器,因此會出現不相容的情況。
解決方法:
這裡有一種比較暴力的解決方法,不確定是否安全。編輯/usr/local/cuda/include/host_config.h
,將其中的第115行註釋掉:
將
#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
改為
//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!
注意:檢視現在的gcc編譯器版本,可能有的人在之前安裝cuda的時候會將預設的gcc、g++版本改成4.8之類比較老的版本,在make caffe的時候最好將gcc和g++的版本改到最新的,這樣在make的時候才不會出現類似undefined references之類的錯誤。具體的修改方法可以google之。