CentOS 6.7下Caffe的编译安装过程

      访问: 1,142 次      评论    

Caffe,来自伯克利的深度学习框架。本文记录和整理了一下其在CentOS 6.7下的编译安装过程,因其依赖比较多,且大多需要手工编译安装,期间遇到较多编译失败,特整理下来供有需要的人参考,少走一些弯路。

环境:CentOS release 6.7 (Final),Python 2.7

1. Prerequisites

Caffe has several dependencies:

  ● CUDA is required for GPU mode.(CUDA for GPU,暂时没用GPU

      ○ library version 7+ and the latest driver version are recommended, but 6.* is fine too

      ○ 5.5, and 5.0 are compatible but considered legacy

  ● BLAS via ATLAS, MKL, or OpenBLAS.

  ● Boost >= 1.55(!!不要使用yum安装,yum安装的 boost-1.41 版本过低!!

  ● protobuf, glog, gflags, hdf5(!!前三个同样不要使用yum安装,版本过低!!

Optional dependencies:

  ● OpenCV >= 2.4 including 3.0(!! yum安装的版本是2.0,也不够!!

  ● IO libraries: lmdb, leveldb (note: leveldb requires snappy)

  ● cuDNN for GPU acceleration (v5)

Pycaffe and Matcaffe interfaces have their own natural needs.

  ● For Python Caffe: Python 2.7 or Python 3.3+, numpy (>= 1.7), boost-provided boost.python

  ● For MATLAB Caffe: MATLAB with the mex compiler.


1.1 General dependencies

1.1.1 下面这些包可以使用 yum 安装:
$ sudo  yum install  cmake leveldb-devel snappy-devel hdf5-devel lmdb-devel


1.1.2 yum安装Python 2.7 

我们主要使用Python Caffe,所以需要先安装Python 2.7

$ sudo  yum install python27 python27-devel

注意安装完并没有替换系统默认的python 2.6,最好也不要替换,因为 yum 本身需要python 2.6:


1.1.3 手工编译安装OpenCV

临时修改 python 命令的指向:

$ cd /usr/bin/
$ sudo mv python python.bak
$ sudo cp -a python2.7 python


下载、编译安装opencv:

$ wget -O opencv-2.4.13.zip https://github.com/Itseez/opencv/archive/2.4.13.zip
$ unzip opencv-2.4.13.zip
$ cd opencv-2.4.13
$ mkdir release
$ cd release
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
$ make
$ sudo make install


1.1.4 编译安装 gflags、glog、google-protobuf

yum安装的gflags和protobuf 版本都过低,需要手工编译安装。

gflags:

$ wget -O gflags-master.zip https://github.com/schuhschuh/gflags/archive/master.zip
$ unzip gflags-master.zip
$ cd gflags-master
$ mkdir build && cd build
$ export CXXFLAGS="-fPIC" && cmake .. && make VERBOSE=1
$ sudo make && make install

# 编译时只产生了静态库,需要增加动态库:

$ cd lib/
$ ls
libgflags.a  libgflags_nothreads.a

$ gcc -shared libgflags.a -o libgflags.so.0
$ sudo cp libgflags.so.0 /usr/local/lib/


glog:

$ wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/google-glog/glog-0.3.3.tar.gz
$ tar zxvf glog-0.3.3.tar.gz
$ cd glog-0.3.3
$ ./configure
$ sudo make && make install
$ cd /etc/ld.so.conf.d/
$ sudo vi glog.conf
# 增加一行
/usr/local/lib

$ sudo ldconfig -v


google-protobuf:我选择了2.7版本。

$ wget -O google-protobuf-2.7.zip https://github.com/google/protobuf/archive/2.7.0.zip
$ cd protobuf-2.7.0/
$ ./autogen.sh
# 报错,因为autogen.sh 里的 gmock 下载地址已失效,且缺失gtest 的下载)
$ mv autogen.sh autogen.sh.bak
# 从master版本下载新的脚本:
$ wget https://raw.githubusercontent.com/google/protobuf/master/autogen.sh

$ ./autogen.sh
$ ./configure
$ make -j4
$ make check
$ sudo make install
$ sudo ldconfig    # refresh shared library cache.


1.2 CUDA

没有使用GPU,暂不安装;


1.3 BLAS

install ATLAS by yum:

$ sudo yum install atlas-devel


1.4 Python相关依赖

1.4.1 这么多的python库,用pip安装比较方便:
Cython>=0.19.2
numpy>=1.7.1
scipy>=0.13.2
scikit-image>=0.9.3
matplotlib>=1.3.1
ipython>=3.0.0
h5py>=2.2.0
leveldb>=0.191
networkx>=1.8.1
nose>=1.3.0
pandas>=0.12.0
python-dateutil>=1.4,<2
protobuf>=2.5.0
python-gflags>=2.0
pyyaml>=3.10
Pillow>=2.3.0(依赖 libjpeg-turbo-devel)
six>=1.1.0


先安装pip:

$ sudo curl  https://bootstrap.pypa.io/get-pip.py | python2.7 -


再用pip安装插件库:

$ sudo yum install python-pip libjpeg-turbo-devel
$ wget https://github.com/BVLC/caffe/raw/master/python/requirements.txt
$ sudo for req in $(cat requirements.txt); do pip2.7 install $req; done


1.4.2 编译安装Boost.Python

我选择了 1.60 版本(Anaconda Python 2.7 集成的就是1.60)

$ wget -O boost_1_60_0.tar.gz https://sourceforge.net/projects/boost/files/boost/1.60.0/boost_1_60_0.tar.gz/download
$ tar zxvf boost_1_60_0.tar.gz
$ cd boost_1_60_0
$ ./bootstrap.sh --with-python=/usr/bin/python2.7
Detecting Python version... 2.7
Detecting Python root... /usr

$ sudo ./b2 install


2. 开始编译安装Caffe

2.1 编译

$ wget https://github.com/BVLC/caffe/archive/master.zip
$ unzip master.zip
$ cd caffe-master

# 修改必要的Makefile参数
$ vi Makefile.config

# CPU-only switch (uncomment to build without GPU support).
CPU_ONLY := 1
# NOTE: this is required only if you will compile the python interface.
# We need to be able to find Python.h and numpy/arrayobject.h.
PYTHON_INCLUDE := /usr/include/python2.7 \
                /usr/lib64/python2.7/site-packages/numpy/core/include
# We need to be able to find libpythonX.X.so or .dylib.
PYTHON_LIB := /usr/lib64
# BLAS choice:
# atlas for ATLAS (default)
# mkl for MKL
# open for OpenBlas
BLAS := atlas
# Custom (MKL/ATLAS/OpenBLAS) include and lib directories.
# Leave commented to accept the defaults for your choice of BLAS
# (which should work)!
BLAS_INCLUDE := /usr/include
BLAS_LIB := /usr/lib64/atlas

# Compilation with Make:
$ make -j4 all
$ make -j4 test
$ make -j4 runtest

# Compile the Python wrappers:
$ make pycaffe


2.2 测试一下编译完成的 python 模块

$ export PYTHONPATH=/home1/nonoban/pkgs/caffe-master/python
$ python2.7
Python 2.7.3 (default, Feb 12 2013, 14:01:46)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe    #没有报错则说明编译成功
>>> quit()


2.3 安装(分发)


1)先安装到 /opt 目录下:

# backto caffe-master directory
$ make distribute
$ tar zcvf caffe-distribute.tar.gz distribute/
$ cd /opt
$ sudo tar zxvf /your/build/dir/caffe-master/caffe-distribute.tar.gz
$ sudo mv distribute caffe


2)为使用python caffe的用户

设置环境变量:

$ vi .bash_profile

export CAFFE_HOME=/opt/caffe
export PATH=$CAFFE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CAFFE_HOME/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$CAFFE_HOME/python

测试一下:

$ python2.7
Python 2.7.3 (default, Feb 12 2013, 14:01:46)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe    #没有报错则说明模块加载成功
>>> quit()


Done. Good luck!

-----------

参考:http://caffe.berkeleyvision.org/install_yum.html




添加新评论