Keep In Mind

織りのやわらかい混じりけのないアイルランド麻のハンカチーフ(手ふき)

【完全版】MacOSX(10.9.5)にCaffeをインストール

 前回の記事は,各種ライブラリのインストールがまとまって書かれており,CUDAのインストールも行っていなかったので,インストールをやり直しました.

 また,サンプルプログラムのコンパイル&実行まで行いましたので,新たに【完全版】として残しておきたいと思います.

 Pythonのインストール方法やCUDAのインストール,その他ライブラリのインストールや設定ファイルの内容,パスの追加など,かなり変更があります.

 

はじめに

Caffeは,カリフォルニア大学バークレー校のBerkeley Vision and Learning Centerで開発されたOSSのDeep Learning Frameworkです.今回は,CPUモードで設定しますが,CUDAのインストールも行います.

 

 

参考サイト

  1. Caffe本家サイトのOSXインストレーションページ
  2. GitHubのBVLC/caffeサイト
  3. caffeのGoogleGroup
  4. OSX10.10でCaffeをインストール
  5. CaffeをOS X 10.10にインストールした
  6. Mac OS X 10.9.5でCaffeする
  7. 流行りの深層学習フレームワークCaffeをC++から使ってみた
  8. 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

 

 

OpenCVPythonから使う設定

インクルード,ライブラリファイルへのリンク作成(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.
などと出れば成功かな?

 

 

c++でのコンパイル&実行

参考サイト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