20141211大幅改稿
DeepLearning関連の研究をしているので、様々な機械学習系ライブラリを試してみています。今回はCaffe。
CaffeはC++で実装され、GPUも使えるDeepLearning用ライブラリです。
このライブラリを知る切っ掛けになったYahooデベロッパーネットワークの記事によると、
大規模画像認識のコンテストILSVRCで2012年にトップとなった畳込みニューラルネットワークの画像分類モデル[1]がすぐに利用できるようになっています。
Caffeは、カリフォルニア大学バークレー校のコンピュータビジョンおよび機械学習に関する研究センターであるBVLCが中心となって開発しているOSSです。
ヤフージャパンは2014年6月から同センターのスポンサーになっており、Caffeの開発を含めたセンターの研究の支援を行っています。
とのこと。ふむふむ、結構使えそうじゃない。ということで、実行できる環境を作っていこうと思います。
Caffe自体はLinuxOS、OSXでの使用を推奨していますので、今回はMac OS X Mavericks上で環境を作ります。
Homebrewを多用していますので,Homebrewが未導入の場合は以下のコマンドでHomebrewを導入してください.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Caffeの公式インストールガイドはこちらから。
Caffe | Installation
CUDAのインストール
まずはCUDA6.5のインストール。
CUDA Toolkit 11.6 Update 1 Downloads | NVIDIA Developer
MacOSは10.8~10.10に対応しているようです。自分が使っているOSのバージョンに合わせてダウンロードしてください。
BLASのインストール
BLASですが、公式インストールガイドによると
・ATRAS
・Intel MKL
・OpenBLAS
この3つのうちどれかを落としてくる必要があるようです。
OSX10.9,10.10ではATLASが入っていないようです.CaffeではATLASを標準BLASとして採用しているようなので,ATLASをインストールします.OpenBLASのインストール方法も簡潔に残しておきます.
ソース:
https://groups.google.com/forum/#!topic/caffe-users/J5YlVnfoo4A
ATLASの導入
以下のURLからソースを落としてきて,適当な場所に展開します.
http://sourceforge.net/projects/math-atlas/files/Stable/
バージョンは3.10.2を選択しました.
展開したら,展開ファイルまで移動して以下のコマンドでインストールします.
$ mkdir build && cd build $ ../configure $ make
Pythonのインストール
caffeのルートディレクトリに移動して.以下のコマンドで必要パッケージを導入できます.Anacondaを使うと楽らしいですが,パス通したり何だりのことを考えると,以下の方法でインストールする方が簡単でいいと思います.
$ sudo pip install -r /path/to/python/requirements.txt
途中scikit-imageやmatplotlibでインストールが止まる場合は,numpyとscipyを先にインストールしておくと通ります.
$ brew install numpy $ brew install scipy
依存パッケージのインストール
brew install --build-from-source boost boost-python brew install --with-python protobuf for x in snappy leveldb gflags glog szip lmdb homebrew/science/opencv; do brew install $x; done
10.9以降のOSXはClangがCのデフォルトコンパイラで,libc++がスタンダードライブラリになっているけど,CUDAを使う場合はlibstdc++が必要だから,依存パッケージのformula書き換えてねって書いてあります.
以下のコマンドで依存パッケージのformulaを続々と開き,
for x in snappy leveldb protobuf gflags glog szip boost boost-python lmdb homebrew/science/opencv; do brew edit $x; done
以下の設定を付け加えます.
def install # ADD THE FOLLOWING: ENV.append "CXXFLAGS", "-stdlib=libstdc++" ENV.append "CFLAGS", "-stdlib=libstdc++" ENV.append "LDFLAGS", "-stdlib=libstdc++ -lstdc++" # The following is necessary because libtool likes to strip LDFLAGS: ENV["CXX"] = "/usr/bin/clang++ -stdlib=libstdc++" ...
すべてのformulaeを書き換えたら,
$ for x in snappy leveldb gflags glog szip lmdb homebrew/science/opencv; do brew uninstall $x; brew install --build-from-source --fresh -vd $x; done
ビルドしなおして,古いものをアンインストールします.
$ brew uninstall protobuf; brew install --build-from-source --with-python --fresh -vd protobuf $ brew install --build-from-source --fresh -vd boost boost-python
コンパイル
Caffeのルートディレクトリに移動し,
$ cp Makefile.config.example Makefile.config $ make all
Makeする前に,CPUのみでCaffeを行う場合は,Makefile.configにCPU_ONLY:=1の行をアンコメントしておくことを忘れずに.
なお,GPUを使う,つまりcuDNN演算を行う場合はUSE_CUDNN:=1をアンコメントしておきます.
makeが通ったら,
$ make test
$ make runtest
でエラーが無いことを確認します.
エラーが出る場合
hdf5.hがない!
homebrewで一発インストール.
$ brew install hdf5
make runtestで3つテストが通らない!
[----------] Global test environment tear-down [==========] 457 tests from 98 test cases ran. (25168 ms total) [ PASSED ] 454 tests. [ FAILED ] 3 tests, listed below: [ FAILED ] PowerLayerTest/0.TestPowerGradientShiftZero, where TypeParam = caffe::FloatCPU [ FAILED ] PowerLayerTest/1.TestPowerGradient, where TypeParam = caffe::DoubleCPU [ FAILED ] PowerLayerTest/1.TestPowerGradientShiftZero, where TypeParam = caffe::DoubleCPU
こんなかんじのやつ.
Makefile.configのBLASのフラグ設定が間違っているか,boost,boost-pythonのバージョンが1.56以上だとテストが通りません.
boost,boost-pythonのダウングレード方法は,
$ brew edit boost $ brew edit boost-python
formuraを以下のように書き換えます.
class BoostPython < Formula homepage "http://www.boost.org" url 'https://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2' sha1 'cef9a0cc7084b1d639e06cd3bc34e4251524c840' head "https://github.com/boostorg/boost.git"
書き直したらmake clean&make allしなおします.
同じようにすればYosemiteでも動くんじゃないかなぁ…後々試してみます.
これで公式チュートリアルも動くはず….