CaffeをCPUモードでpyenvとAnacondaを使いUbuntu 14.04にインストールする


　[Caffe](http://caffe.berkeleyvision.org/)をクラウドにインストールするときは[GPUクラウド](http://www.nvidia.co.jp/object/gpu-cloud-computing-services-jp.html)を使うと高速に動作しますが、GPUや[CUDA](http://www.nvidia.co.jp/object/cuda-parallel-computing-platform-jp.html)がない環境でもCPUだけで動作するモードでビルドすることができます。今回は[IDCFクラウド](https://www.idcf.jp/cloud/)のUbuntu 14.04にインストールしてみます。

## 準備

　最初にbuild-essentialなどインストールして環境を準備します。

```bash
$ sudo apt-get update
$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install -y git vim
```

## pyenvとAnaconda

　[Anaconda](https://www.continuum.io/why-anaconda)はPythonでデータ分析をするときによく使うパッケージをまとめてインストールすることができます。Python環境を構築するときは、[pyenv](https://github.com/yyuu/pyenv)などのバージョン管理ツールを使うとシステムのPythonと分離できるので安心です。[データサイエンティストを目指す人のpython環境構築 2016](http://qiita.com/y__sama/items/5b62d31cb7e6ed50f02c)を参考にしてインストールしていきます。


　pyenvをインストールします。

```bash
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
```

　Python 2.7のAnacondaを調べます。最新版はanaconda2-4.0.0です。

```bash
$ pyenv install -l | grep anaconda2
  anaconda2-2.4.0
  anaconda2-2.4.1
  anaconda2-2.5.0
  anaconda2-4.0.0
```

　Anacondaをインストールしてグローバルに設定します。

```bash
$ pyenv install anaconda2-4.0.0
$ pyenv rehash
$ pyenv global anaconda2-4.0.0
```

　[pyenvとanacondaを共存させる時のactivate衝突問題の回避策3種類](http://qiita.com/y__sama/items/f732bb7bec2bff355b69)から、activateをフルパスで実行する方法を使います。


```bash
$ echo 'alias activate="source $PYENV_ROOT/versions/anaconda2-4.0.0/bin/activate"' >> ~/.bashrc
$ source ~/.bashrc
```

　Python 2.7.11がインストールされました。

```bash
$ python
Python 2.7.11 |Anaconda 4.0.0 (64-bit)| (default, Dec  6 2015, 18:08:32)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>>
```

## 必要なパッケージ

　Caffeの[Ubuntu Installation](http://caffe.berkeleyvision.org/install_apt.html)の手順に従ってインストールします。[OpenCV](http://opencv.jp/)の`libopencv-dev`だけcondaでインストールするので手順から除外します。


 [Protocol Buffers](https://developers.google.com/protocol-buffers/)、[LevelDB](https://github.com/google/leveldb)、[Snappy](https://github.com/google/snappy)、[HDF5](https://www.hdfgroup.org/HDF5/)をインストールします。

```bash
$ sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
```

　[OpenCV](http://opencv.jp/)はlibopencv-devをapt-getでインストールするとPyCaffeが`Failed to initialize libdc1394P`のエラーを出すので、condaからインストールします。

```bash
$ conda install opencv
$ conda list opencv
opencv                    2.4.10              np110py27_1
```

　OpenCVは2.4.10がインストールされました。チャンネルは[Binstar](https://conda.anaconda.org/binstar)でなくても良いみたいです。

　[Boost](http://www.boost.org/)とCaffeのデフォルトのBLASの[ATLAS](http://math-atlas.sourceforge.net/)をインストールします。condaからインストールすることもできます。

```bash
$ sudo apt-get install -y --no-install-recommends libboost-all-dev
$ sudo apt-get install -y libatlas-base-dev 
```

　[gflag](https://github.com/gflags/gflags)、[glog](https://github.com/google/glog)、[LMDB](https://symas.com/products/lightning-memory-mapped-database/)をインストールします。

```bash
$ sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev
```

## インストール

　Caffeはホームディレクトリ直下にインストールします。

```bash
$ git clone https://github.com/BVLC/caffe.git ~/caffe
$ cd ~/caffe
```

　Makefile.configを作成して編集します。

```bash
$ cp Makefile.config.example Makefile.config
```

　GPUを使わずCPUのみ使うので以下をアンコメントします。

```~/caffe/Makefile.config
CPU_ONLY := 1
```

　pyenvでインストールすると、`ANACONDA_HOME`は`$PYENV_ROOT/versions/anaconda2-4.0.0`になります。`PYTHON_INCLUDE`と`PYTHON_LIB`はコメントアウトしてAnacondaを使うようにします。
　

```~/caffe/Makefile.config
#PYTHON_INCLUDE := /usr/include/python2.7 \
#               /usr/lib/python2.7/dist-packages/numpy/core/include
ANACONDA_HOME := $(PYENV_ROOT)/versions/anaconda2-4.0.0
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
                $(ANACONDA_HOME)/include/python2.7 \
                $(ANACONDA_HOME)/lib/python2.7/site-packages/numpy/core/include
#PYTHON_LIB := /usr/lib
PYTHON_LIB := $(ANACONDA_HOME)/lib
```

　Caffeのビルド中に`libgtk-x11-2.0.so.0`が見つからないので[こちら]( http://forums.x-plane.org/index.php?/forums/topic/85919-libgtk-x11-20so0/
)を参考にインストールしておきます。

```bash
$ sudo apt-get install libgtk2.0-0
```



```~/.bashrc
$ echo "export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$PYENV_ROOT/versions/anaconda2-4.0.0/lib" >> ~/.bashrc
$ source ~/.bashrc
```


### ビルド

　Caffeをビルドします。CPUのコア数に応じてビルド時のスレッド数を変更します。今回は4コアなので`-j4`を追加します。

```bash
$ make all -j4
$ make test -j4
$ make runtest
```

　`make runtest`を実行してCaffeのインストールを確認します。


### PyCaffe

　CaffeのPython[インターフェース](http://caffe.berkeleyvision.org/tutorial/interfaces.html)のPyCaffeをビルドします。最初に必要なパッケージをpipでインストールしてからmakeします。

```bash
$ cd ~/caffe
$ pip install --upgrade pip
$ pip install -r ./python/requirements.txt
$ make pycaffe -j4
$ make pytest
```

　PyCaffeはパッケージからインストールしていないので、PYTHONPATHを追加します。

```bash
$ echo "export PYTHONPATH=$PYTHONPATH:$HOME/caffe/python" >> ~/.bashrc
$ source ~/.bashrc
```

　`import caffe`でエラーが出なければインストール成功です。

```bash
$ python -c 'import caffe'
```