動かざることバグの如し

近づきたいよ 君の理想に

CaffeをUbuntuにインストールしてサンプル動かすまで

環境

CUDAのインストール

CUDAとはNVIDIAが提供するGPU向けのC言語統合開発環境とのこと。

Ubuntu側が提供しているバージョンはウンコなのでCUDA公式サイトよりdebパッケージをダウンロード。(バージョン変化が激しい)

wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.0-28_amd64.deb

このパッケージはapt/sources.list.d/cuda.listレポジトリを追加するだけのやつなので

sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
sudo apt-get update
sudo apt-get install cuda

パスを通してインストールできているか確認 バージョンは適宜合わせること

export PATH=/usr/local/cuda-7.0/bin:$PATH

nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Mon_Feb_16_22:59:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.27

Caffeのコンパイル

まずは依存ライブラリのインストール

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler git libopenblas-dev

大きいので--depth 1付けると吉。 以下ホームディレクトリ上で実行したものとする

git clone --depth 1 https://github.com/BVLC/caffe.git
cd caffe

Makefile.configの設定を行う cp Makefile.config.example Makefile.configを行い、以下変更

# GPUを使わない場合はコメントアウト
CPU_ONLY := 1

# Caffeではデフォルトの行列計算用ライブラリが「ATLAS」である
# CPUで作動するなら「OpenBLAS」のほうがマルチコア対応で早くなる
#BLAS := atlas
BLAS := open

コンパイル

make all -j4
make test
make runtest

CaffeをPythonで使えるように

依存ライブラリのインストール

sudo apt-get install python-pip gfortran python-dev python-numpy python-skimage
sudo pip install -r ~/caffe/python/requirements.txt

コンパイル

make pycaffe

パスを通す .bashrcに以下追記 & source ~/.bashrc

export PYTHONPATH=~/caffe/python/:$PYTHONPATH

確認

 python
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>> 

サンプル

有名な手書き数字のやつ(MNIST)をやってみる

cd /path/to/caffe
./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh
./examples/mnist/train_lenet.sh
  • get_mnist.sh MNISTデータをcaffe/data/mnist/にダウンロードして展開
  • create_mnist.sh データをLMDB形式に変換(CaffeはLevelDBかLMDB形式でないと読み込めない模様)
    • example/mnistmnist_train_lmdbmnist_test_lmdbが生成される
  • train_lenet.sh lenet_train_test.prototxtlent_solver.prototxtを読み込んで学習
    • ./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxtと同義
    • CPU_ONLYの場合はexamples/mnist/lenet_solver.prototxt内のsolver_mode: GPUCPUに書き換えること

最終的にlenet_iter_10000.caffemodel