tkm2261's blog

研究員(OR屋) → データ分析官 → MLエンジニア → ニート → 米国CS PhDが諸々書いてます

もう迷わない Caffe入門 その1

皆様お久しぶりです。

今回から深層学習(ディープラーニング)フレームワークのcaffeの環境構築使い方について解説していこうと思います。

インストールに難ありと言われるcaffeに対して、AWSインスタンスを立てる所から、
cuDNNでのコンパイル、pycaffe等の使用方法、出来ればDIGITSまで話せると良いなと思っています。

理論的なところに触れる予定は一切ありません。その辺りが気になる方は以下をご参照下さい。

www.amazon.co.jp

www.slideshare.net

www.slideshare.net

www.slideshare.net

ディープラーニングにもう振り回されない

最近は、営業先のお客様からもディープラーニングという単語を聞くようになりました。 我々としては営業機会が増えて良いことなんですが、人工知能ブームと相まって若干加熱しすぎな感もあったり。

会社の上司から「これからはディープラーニングだ!」との号令の元、途方に暮れている方もおられるかと想像しています。

どこまで助けになるか微妙ですが、とりあえず回して精度評価できるとこまでは解説しようと思っています。

一度皆で回した上で、「じゃあ何が出来るの?」といった議論のフェーズに世の中がなって行けば良いなって感じです。

デモを触ってみる

caffeの配布元が既にデモサイトを用意しているので、触ってみる。

demo.caffe.berkeleyvision.org

適当な画像を入れると、1000クラスの所属スコアを出してくれます。

f:id:tkm2261:20150605032825p:plain

確かに、食べ物なので合っていそうです。
困った上司にとりあえず教えておけば、時間が稼げます。

環境構築

サーバの用意

GPUの刺さったLinux機を個人で持ってる方はほぼいないと思うので、AWSで構築します。
設定はデフォルトで大丈夫ですが、今後のことを考えてインスタンスストレージをつけといた方が良いかも。

項目 内容
インスタンスタイプ g2.2xlarge
OS Ubuntu 14.04 LTS

f:id:tkm2261:20150603173621j:plain

g2.2xlargeは定価では時間100円($0.89)と高額なインスタンスなのでスポットインスタンスの利用をオススメします。

スポットインスタンスもちょっと前は時間10円($0.1)ぐらいで借りれましたが、最近は高騰してるので時間30円($0.3)程度は覚悟したほうが良さ気です。

f:id:tkm2261:20150603175707j:plain

※最近はオンデマンド価格を上回るぐらい高騰してます。

CUDAとcuDNNの準備

CUDA7.0とcuDNN v2を入れていきます。

とりあえず、依存ライブラリを入れとく

$ sudo apt-get update
$ sudo apt-get install -y build-essential git libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev libatlas-base-dev
$ sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

カーネルパッケージも追加しておく。詳細は不明

$ sudo apt-get install -y linux-image-extra-`uname -r` linux-headers-`uname -r` linux-image-`uname -r`

次にcudaのインストール。今回はcuda7を入れます。 最新バージョンが出たら適宜コチラをみて変えて下さい。

CUDA 7 Downloads

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1404/x86_64/cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo apt-get update
$ sudo apt-get install -y cuda
$ echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ sudo reboot

cuDNNを以下から調達する。色々登録あるけど頑張って下さい。
NVIDIA® cuDNN – GPU Accelerated Deep Learning

インストールはcudaのところにヘッダとライブラリをぶち込みます。

$ tar zxvf cudnn-6.5-linux-x64-v2.tgz
$ cd cudnn-6.5-linux-x64-v2
$ sudo cp cudnn.h /usr/local/cuda/include
$ sudo  sudo cp libcudnn.so libcudnn_static.a /usr/local/cuda/lib64
$ sudo ldconfig /usr/local/cuda/lib64

caffeのインストール

やっとcaffeを入れます。

$ git clone https://github.com/BVLC/caffe.git
$ cd caffe/
$ cp Makefile.config.example Makefile.config

↑でコピーしたMakefile.configを編集して、4行目のUSE_CUDNNのオプションを有効にする。

USE_CUDNN := 1

コンパイルしてテストしてみる。ここでmodprobeしないと失敗するので要注意

$ sudo modprobe nvidia
$ make all -j8
$ make runtest

pycaffeのインストール

ここまでで一応caffeは動くけど、需要ありそうなのでpycaffeも入れておく。

numpy等はコンパイルすると時間がかかるのでバイナリで入れておく。

BLASにこだわりたい人は、各自お願い致します。

$ sudo apt-get install python-pip python-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib cython python-pandas python-skimage

残りの依存ライブラリはcaffeのrequirements.txtで入れる

$ cd python/
$ sudo pip install -r requirements.txt

あとはpycaffeをコンパイルしてPYTHONPATHを通しておく。別の場所に入れた人は適宜変えて下さい。

$ cd ../
$ make pycaffe
$ echo 'export PYTHONPATH=~/caffe/python/:$PYTHONPATH' >> ~/.bashrc
$ source ~/.bashrc

とりあえず動かしてみる

ipython notebookのサンプルが付いているので動かしてみる。

動かすためにライブラリを幾つか入れる。

$ sudo apt-get install libzmq-dev python-tornado ipython ipython-notebook
$ sudo pip install pyzmq jinja2 jsonschema

ここを参考にipython notebookをセットアップ

ipython notebookをリモートサーバ上で動かす。 - 忘れないようにメモっとく

セキュリティグループのポートも開けなとローカルからは見えない。IPは適宜制限して下さい。

f:id:tkm2261:20150605030835p:plain

そんでもって実行

$ ipython notebook caffe/examples/ --profile=myserver

試しにclassification.ipynbを開いて以下が表示されれば成功

f:id:tkm2261:20150605031050p:plain

せっかくcuDNNまで入れたので、2セル目のcaffe.set_mode_cpu()をcaffe.set_mode_gpu()にして実行して下さい。

次回予告

reference model(caffeで配布されているトレーニング済みモデル)を使ったサンプルとか、
何か例を使って解説予定

流石にMNISTは飽きた感があるので、何か面白いものを用意したいところ