本文記錄從零開始在CentOS7.x系統上搭建Caffe深度學習平台,並配置pycaffe環境。(由於在虛擬機上搭建,所以為CPU_ONLY模式)
1.選擇CentOS7 mini版鏡像安裝虛擬機
鏡像版本:CentOS-7-x86_64-Minimal-1511.iso
安裝好虛擬機后,配置網卡,本文采用橋接模式接入局域網,能夠正常訪問互聯網。


2.更新yum源
安裝wget、net-tools等常用工具:
yum install wget net-tools -y
更換國內yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all yum makecache yum update -y
安裝epel-release源:
yum install epel-release -y
3.安裝依賴
按照caffe官方文檔,安裝依賴包:
yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel -y yum install gflags-devel glog-devel lmdb-devel -y yum install openblas-devel atlas-devel -y
安裝其他需要的工具包:
yum install git gcc gcc-c++ bzip2 unzip -y
4.安裝Anaconda3
從Anaconda Install Archive中下載:Anaconda3-5.2.0-Linux-x86_64.sh(對應python3.6)
安裝Anaconda,安裝目錄在/usr/local/anaconda3
bash Anaconda3-5.2.0-Linux-x86_64.sh
根據提示,依次Enter、yes、輸入安裝位置,等待安裝完成。結束不選擇不添加.bashrc,不安裝VSCode。
使用/usr/local/anaconda3/bin/pip安裝protobuf==3.6.0和protobuf-py3
cd /usr/local/anaconda3/bin ./pip install protobuf==3.6.0 ./pip install protobuf-py3
5.下載caffe
選擇從github上下載caffe,本文下載的是caffe的zip格式包,名為master,解壓:
unzip ~/master
進入caffe-master目錄:
cd ~/caffe-master
將配置文件復制一份:
cp Makefile.config.example Makefile.config
修改配置文件Makefile.config:
CPU_ONLY := 1 BLAS := open
BLAS_INCLUDE := /usr/include/openblas ANACONDA_HOME := /usr/local/anaconda3 PYTHON_INCLUDE := $(ANACONDA_HOME)/include \ $(ANACONDA_HOME)/include/python3.6m \ $(ANACONDA_HOME)/lib/python3.6/site-packages/numpy/core/include PYTHON_LIBRARIES := boost_python36 python3.6m PYTHON_LIB := $(ANACONDA_HOME)/lib
6.添加環境變量
將各個動態庫加入環境變量:
vi /etc/profile
在末尾添加:
LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/lib:/lib64:/usr/local/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/anaconda3/lib
生效:
source /etc/profile
7.編譯caffe
進入~/caffe-master目錄:
make all -j8 make test make runtest
8.編譯libboost_python36.so(編譯pycaffe時依賴)
下載 boost_1_70_0.tar.gz載/root下。
要編譯libboost_python36版本,需要將/usr/bin下的python軟連接指向Anaconda3中的python
cd /usr/bin mv python python.bak ln -s /usr/local/anaconda3/bin/python3.6 python
注意,此時盡量不要使用yum,因為yum默認使用python2.7,修改了python軟連接會導致報錯,解決方法如下:
vi /usr/bin/yum
將第一行的#!/usr/bin/python 修改為:
#!/usr/bin/python2.7
同樣修改/usr/libexec/urlgrabber-ext-down文件。
解壓boost壓縮包:
tar zxvf ~/boost_1_70_0.tar.gz
進入解壓后的boost_1_70_0目錄:
./bootstrap.sh --with-python=/usr/local/anaconda3/bin/python3 --with-python-version=3.6 --with-python-root=/usr/local/anaconda3/lib/python3.6
./b2 cflags='-fPIC' cxxflags='-fPIC' --with-python include="/usr/local/anaconda3/include/python3.6m/"
./b2 install
9.編譯pycaffe
進入~/caffe-master目錄
make pycaffe
10.添加環境變量
vi /etc/profile
添加:
export PYTHONPATH=/root/caffe-master/python:$PYTHONPATH
export PYTHONPATH=/usr/local/anaconda3/lib/python3.6/site-packages:$PYTHONPATH
11.python導入caffe
運行python3.6.5
import caffe
此時會報錯:
>>> import caffe Failed to include caffe_pb2, things might go wrong! Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/root/caffe-master/python/caffe/__init__.py", line 4, in <module> from .proto.caffe_pb2 import TRAIN, TEST File "/root/caffe-master/python/caffe/proto/caffe_pb2.py", line 4, in <module> from google.protobuf.internal import enum_type_wrapper ModuleNotFoundError: No module named 'google'
這是需要更新protobuf的版本,從2.5.0版本更新為2.6.1。
12.升級protobuf
下載protobuf-2.6.1.tar.gz在/root下
卸載protobuf-2.5.0版本:
yum remove protobuf -y
這里的yum可能會報錯:
[root@leocaffe lib]# yum remove protobuf File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid syntax
這是因為我們將python軟連接指向了python3.6,我們可以使用前面所講的解決錯誤的方法,修改/usr/bin/yum和/usr/libexec/urlgrabber-ext-down文件(參照8.編譯libboost_python36.so)
解壓:
cd ~
tar zxvf ~/protobuf-2.6.1.tar.gz
執行:
cd /usr/local mkdir protobuf cd ~/protobuf-2.6.1 ./configure --prefix=/usr/local/protobuf
然后編譯:
cd ~/protobuf-2.6.1
make
make install
13.添加protobuf環境變量
vi /etc/profile
添加以下內容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib/ export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib/ export PATH=$PATH:/usr/local/protobuf/bin/ export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/protobuf/include/ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/ export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
檢查以下安裝是否成功:
protoc --version
[root@leocaffe lib]# protoc --version libprotoc 2.6.1
打印版本號說明安裝成功。
14.python再次導入caffe
為保險,可以重新對caffe進行編譯:
cd ~/caffe-master make clean make all -j8 make pycaffe
然后導入caffe:
import caffe
成功:
[root@leocaffe bin]# ./python Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) [GCC 7.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import caffe >>>
總結:
從本文可以看出,部署caffe平台坑還是挺多,主要集中在所依賴的動態庫,環境變量以及軟件版本問題。特別注意boost的編譯安裝、protobuf的版本更新、以及profile環境變量的修改。
