【完全版】MacOSX(10.9.5)にCaffeをインストール
前回の記事は,各種ライブラリのインストールがまとまって書かれており,CUDAのインストールも行っていなかったので,インストールをやり直しました.
また,サンプルプログラムのコンパイル&実行まで行いましたので,新たに【完全版】として残しておきたいと思います.
Pythonのインストール方法やCUDAのインストール,その他ライブラリのインストールや設定ファイルの内容,パスの追加など,かなり変更があります.
はじめに
Caffeは,カリフォルニア大学バークレー校のBerkeley Vision and Learning Centerで開発されたOSSのDeep Learning Frameworkです.今回は,CPUモードで設定しますが,CUDAのインストールも行います.
参考サイト
- Caffe本家サイトのOSXインストレーションページ
- GitHubのBVLC/caffeサイト
- caffeのGoogleGroup
- OSX10.10でCaffeをインストール
- CaffeをOS X 10.10にインストールした
- Mac OS X 10.9.5でCaffeする
- 流行りの深層学習フレームワークCaffeをC++から使ってみた
- DeepLearningライブラリ「Caffe」の実行環境をOSX10.9で作る
Homebrewのインストール
sudo ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
X CodeとCommand Line Toolが必要らしいですが,何もせずインストールできたので,事前にインストールしてたみたいです.
Open BLASのインストール
brew tap homebrew/science
brew install homebrew/science/openblas
memo
"==> make bootstrap"と表示されてから70分くらいかかった...
CUDAのインストール
cuda_7.0.29_mac.pkgをダウンロードしてインストール
Pythonのインストール(Anaconda利用)
#brewでpyenvをインストールして,pyenvでanacondaをインストール
brew install pyenv
pyenv install anaconda-2.0.1
#anacondaの各種設定
pyenv rehash
sudo pyenv local anaconda-2.0.1
sudo pyenv global anaconda-2.0.1
#.bash_profileにパスを通す
export PATH="$PATH:$HOME/.pyenv/shims"
source ~/.bash_profileで反映
echo $PATHで確認
#Python 2.7.10をインストール
pyenv install 2.7.10
memo
~/.pyenv/ 以下にAnaconda管理下のPythonが入る
~/.pyenv/versions/anaconda-2.0.1/がanacondaホーム
OpenCVのインストール
brew edit opencvで,Formulaファイルを修正(#{py_prefix}はよくわからんので,直接記述)
============
args << "-DPYTHON_LIBRARY=~/.pyenv/versions/anaconda-2.0.1/lib/libpython2.7.dylib"
args << "-DPYTHON_INCLUDE_DIR=~/.pyenv/versions/anaconda-2.0.1/include/python2.7"
============
.bash_profileに以下を追加
============
export PATH=$PATH:/opt/local/bin
============
source ~/.bash_profileで反映
echo $PATHで確認
brew tap homebrew/science
brew install opencv
インクルード,ライブラリファイルへのリンク作成(cv.pyやcv2.soへのリンク)
ln -sfn /usr/local/Cellar/opencv/2.4.11_1/lib/python2.7/site-packages/ ~/.pyenv/versions/anaconda-2.0.1/lib/python2.7/site-packages/
ipythonを実行し,import cvやimport cv2でエラーが出なければ成功.
memo
~/.pyenv/versions/anaconda-2.0.1/lib/python2.7/site-packages以下にcv.pyやcv2.soなどがすでに存在する場合は不要かも
boost,boost-pythonのインストール(念のため1.57にする)
brew edit boost
brew edit boost-python
============
url "https://downloads.sourceforge.net/project/boost/boost/1.57.0/boost_1_57_0.tar.bz2"
sha1 "e151557ae47afd1b43dc3fac46f8b04a8fe51c12"
============
brew install --build-from-source --fresh -vd boost boost-python
memo
結構時間がかかる.40分〜1時間くらい.
1.55にダウングレードするように解説されているページが多いが,1.57でもOKになった模様
1.58のままでもcaffeのmakeに成功したので,Formulaファイルの変更は不要かも
hdf5のインストール
hdf5はファイルの階層構造操作用のライブラリ(参考サイト6より)とのこと.
anacondaでPythonをインストールした場合は既にインストールされているはず.
以下に,hdf5のライブラリとインクルードファイルが入っているか確認して下さい.
============
$HOME/.pyenv/versions/anaconda-2.0.1/lib
$HOME/.pyenv/versions/anaconda-2.0.1/include
============
その他のライブラリのインストール
brew install --fresh -vd snappy leveldb gflags glog szip lmdb
brew install --build-from-source --with-python --fresh -vd protobuf
memo
各種ライブラリの説明(参考サイト6より大部分引用)
snappy;圧縮,leveldb;軽量データベース,gflags;コマンドラインのフラグ処理, glog;ログ取り,szip;圧縮,lmdb;RAM(インメモリ)上でのデータベース操作, protobuf;データの構造化
ライブラリパスの追加
.bash_profileに以下を追加
============
export DYLD_FALLBACK_LIBRARY_PATH="/usr/local/cuda/lib:$HOME/.pyenv/versions/anaconda-2.0.1/lib:/usr/local/lib:/usr/local/cuda/lib:/usr/local/lib"
============
source ~/.bash_profileで反映
echo $DYLD_FALLBACK_LIBRARY_PATHで確認
Caffeのリポジトリをクローン
git clone https://github.com/BVLC/caffe.git
Xcodeを使うのにライセンスに同意しろと言われるので,[space]キーでライセンス文章を全部見た後にagree [return]
configファイルの修正とmake
cp Makefile.config.example Makefile.config
vi Makefile.config
以下,修正した所の抜粋
============
CPU_ONLY := 1
CUSTOM_CXX := clang++
CUDA_DIR := /usr/local/cuda
#-gencode arch=compute_50,code=sm_50 \
#-gencode arch=compute_50,code=compute_50
BLAS:=open
BLAS_INCLUDE := /usr/local/Cellar/openblas/0.2.14_1/include
BLAS_LIB := /usr/local/Cellar/openblas/0.2.14_1/lib
#PYTHON_INCLUDE := /usr/include/python2.7 \
# /usr/lib/python2.7/dist-packages/numpy/core/include
ANACONDA_HOME := $(HOME)/.pyenv/versions/anaconda-2.0.1
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
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /Developer/NVIDIA/CUDA-7.0/lib
============
make all -j10
make test -j10
Caffeのテスト
make runtest
[==========] 755 tests from 123 test cases ran. (38555 ms total) [ PASSED ] 755 tests.
などと出れば成功かな?
参考サイト7に掲載されているサンプルを動かしてみる.
いろいろエラーが出たが,最終的にいくつかのincludeファイルへのパスとlibraryファイルへのパスを追加することで,コンパイル&実行ができた.
.bash_profileに以下の2つのパスを追加(既に下記パスが存在している場合は,不足しているものを追加して下さい)
============
export CPLUS_INCLUDE_PATH=“/usr/local/include:/usr/local/opt/boost/include:$HOME/.pyenv/versions/anaconda-2.0.1/include:$HOME/caffe/.build_release/src:/usr/local/Cellar/openblas/0.2.14_1/include"
export LD_LIBRARY_PATH=“$HOME/caffe/build/lib"
============
また,caffeコンパイルは,オプションがたくさん必要で長いので,.bash_profileにaliasを作る.尚,先の参照サイトには「-L/usr/local/opt/glog/lib」リンクが記載されていないが,私の環境では記述しないとエラーが出た.
============
alias cfc='clang++ -std=c++11 -DCPU_ONLY -I$HOME/caffe/include -I/System/Library/Frameworks/vecLib.framework/Versions/Current/Headers -L$HOME/caffe/build/lib -L/usr/local/opt/glog/lib $1 -lcaffe -lglog'
============
source ~/.bash_profileで反映
echo $CPLUS_INCLUDE_PATH $LD_LIBRARY_PATHで確認
コンパイル&実行
============
$ cfc caffe-sample.cpp
$ ./a.out
E0710 13:14:23.723459 2078970640 upgrade_proto.cpp:618] Attempting to upgrade input file specified using deprecated V1LayerParameter: netproto.txt
3.00199x + -1.99783y + 3.99781 = target
10a + 20b + c = -5.93897
============
できた〜(ToT).
感想
長かった...まず,caffeのmakeの時点でコンパイルエラーやらリンクエラーやら,実行時エラーやらが頻発した.
caffeのmakeに成功後も,サンプルプログラムのコンパイルで,コンパイルエラーやら 実行時エラーが頻発した.
うまく行くまで3日くらいかかった..何回make cleanをしたことか...
次は,pycaffeだな.
その他(作業中に役に立ったコマンドや情報)
ファイルの検索
find / -name 名前 -print 2> /dev/null
Homebrewで入れたもののアンインストール
brew uninstall 名前
HomebrewのFormulaファイル置き場
/usr/local/Library/Formula
HomebrewのFormulaを元に戻す
cd /usr/local
git checkout ファイル名
makeのやり直し(config等のファイルはそのまま)
make clean
config等のファイルの初期化
make mrproper