在Ubuntu上編譯安裝caffe還是個比較蛋疼的事,有時候會莫名其妙的碰到很多庫的問題,這篇文章就把我在Ubuntu上編譯安裝caffe的過程和遇到的問題大致記錄一下。
1.安裝opencv
http://machinelearninguru.com/computer_vision/installation/opencv/opencv.html
建議參考這篇文章,過程寫得比較清晰
2.安裝Matlab
因為我要用到matcaffe所以需要裝matlab,這個過程可以參考:
http://blog.csdn.net/generallc/article/details/52793820
3.Python
建議安裝anaconda,可以省很多事
4.一些依賴庫安裝
openblas:
$ sudo apt update
$ apt search openblas
$ sudo apt install libopenblas-dev
$ sudo update-alternatives --config libblas.so.3
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
python 依賴庫
cd /home/zzh/caffe/python
apt-get install python-pip
pip install --upgrade pip
for req in $(cat requirements.txt); do pip install $req; done
5.caffe編譯
修改Makefile.config文件.
cd ~/caffe //進入你的caffe目錄
cp Makefile.config.example Makefile.config
我有用到gpu和opencv以及后面要matlab,所以我修改了下面這些:
USE_CUDNN:=1
USE_OPENCV:=1
MATLAB_DIR:=/home/liuhao/MATLAB/
python路徑用的是anaconda的目錄。
問題1: 這里需要修改一個地方,如果不改的話后面會碰到fatal error: hdf5.h:這個錯誤。
把INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 后面加上 /usr/include/hdf5/serial
把LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib /usr/lib/x86_64-linux-gnu 后面加上/usr/lib/x86_64-linux-gnu/hdf5/serial
開始編譯:
make all -j8
測試:
make runtest
python接口:
make pycaffe
Matlab接口:
make matcaffe
make mattest
6.可能遇到的問題
6.1 運行make mattest時可能會碰到下面這個錯誤:
MEX-file '/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64' 無效:
/usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:
version `GLIBCXX_3.4.21' not found (required by
/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64)
解決方式是將matlab的libstdc++.so.6鏈接到系統的庫文件。
sudo rm /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6
sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/Matlab/R2016a/sys/os/glnxa64/libstdc++.so.6
6.2 No module named google.protobuf.internal
這個問題會在python 中import caffe時遇到
sudo apt-get install python-protobuf
pip install protobuf
/home/username/anaconda2/bin/pip install protobuf
我的是用第一條命令搞定了
6.3 Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
這個也是在import caffe的時候碰到的。
conda install nomkl numpy scipy scikit-learn numexpr
conda remove mkl mkl-service
6.4 AttributeError: 'module' object has no attribute 'bool_'
這個就要把caffe/python目錄加到系統路徑里
export PYTHONPATH="/home/liuhao/framework/caffe/python:$PYTHONPATH"
可以把這個加到.bashrc里面
6.5 其他問題
Error 'fatal error: pyconfig.h: No such file or directory' when executing 'make pycaffe' on dev-branch
export CPLUS_INCLUDE_PATH=/usr/include/python2.7
中間還碰到過一個詭異問題,因為一個叫libharfbuzz.so.0的庫弄得vim和桌面都掛了,解決的方式是重裝了harfbuzz和freetype。可以參考 http://www.linuxfromscratch.org/blfs/view/svn/general/harfbuzz.html
還有個好像是cuda和gcc版本問題,直接注釋/usr/include/host_config.h里面檢測gcc版本的地方就可以了。
還有一些問題忘記了,具體再google吧一般都有人踩過的坑。
PS: 除了這種方式,還可以用cmake來裝,這樣就避免了手工去改Makefile.config文件。
10.27 update
支持多GPU要開啟NCCL,
NCCL安裝:
$ git clone https://github.com/NVIDIA/nccl.git
$ cd nccl
$ sudo make install -j4
在~/.bashrc中將NCCL加入
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/liuhao/framework/nccl/build/lib/"
遇到新問題:
caffe/proto/caffe.pb.h: No such file or directory
You need to generate caffe.pb.h manually using protoc as follows.
#In the directory you installed Caffe to
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto
不過我是直接運行下面的命令可以了:
sudo apt-get remove libprotobuf-dev
Python.h找不到,config 文件里的python path檢查一下
2017.11.1 update
error: /home/liuhao/anaconda2/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
解決方式:自行編譯zlib1.2.9
wget https://sourceforge.net/projects/libpng/files/zlib/1.2.9/
unzip xxx
cd xxx
./configure
make
sudo make install
歡迎關注公眾號:vision_home 共同學習,不定期分享論文和資源
