CaffeをOS X 10.10 にインストールした

はじめに

この記事は, Deep learning frameworkのCaffeをMac OS X 10.10にインストールした手順を記録したものです.

参考記事

以下の情報を参考にインストールした.

インストール手順

CUDA

GPUがIntel HD Graphics 4000なのでCUDAは使えない. CPU-onlyで使用する.

ATLAS

ソースコードを落としてビルドをしたら失敗して困っていたが, Caffe | Installationによると, すでにインストールされているらしい.

その他パッケージ

homebrewでインストールすれば良い. ただしOSX 10.10 は,リンクするライブラリの関係で,デフォルトのフォーミュラだと失敗する.

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++"

あとは

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

を実行すれば良い.

ところで,homebrewはgitで/home/local/を管理しているので,このままだとbrew updateがうまくいかない.

cd /usr/local
git checkout -b caffe
git add .
git commit -m "Update Caffe dependencies to use libstdc++"
cd /usr/local/Library/Taps/homebrew/homebrew-science
git checkout -b caffe
git add .
git commit -m "Update Caffe dependencies"

を実行して, updateしたいときは,

# Switch batch to homebrew master branches
cd /usr/local
git checkout master
cd /usr/local/Library/Taps/homebrew/homebrew-science
git checkout master

# Update homebrew; hopefully this works without errors!
brew update

# Switch back to the caffe branches with the forumlae that you modified earlier
cd /usr/local
git rebase master caffe
# Fix any merge conflicts and commit to caffe branch
cd /usr/local/Library/Taps/homebrew/homebrew-science
git rebase master caffe
# Fix any merge conflicts and commit to caffe branch

# Done!

を実行すれば良い. .zshrcに,関数を書いておいた.

Caffe

git clone https://github.com/BVLC/caffe
pip install -r caffe/python/requirement.txt
cp Makefile.config.example Makefile.config

Makefile.configを

CPU_ONLY := 1
CUSTOM_CXX := clang++

に修正してmakeする.

./include/caffe/util/mkl_alternate.hpp:11:10: fatal error: 'cblas.h' file not found

と言われたので原因を調べると,どうやらdevブランチでは修正されているようなので,

git checkout dev
make
./include/caffe/util/io.hpp:8:10: fatal error: 'hdf5.h' file not found

と言われたので,

brew install hdf5

する.

make test
make runtest

でテスト.

[  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

で失敗してしまう. どうやらこれと同じ現象. boost1.55.0に戻す必要がある

brew edit boost
brew edit boost-python

class BoostPython < Formula
   homepage "http://www.boost.org"
   -  url "https://downloads.sourceforge.net/project/boost/boost/1.57.0/boost_1_57_0.tar.bz2"
   -  sha1 "e151557ae47afd1b43dc3fac46f8b04a8fe51c12"
   +  url 'https://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2'
   +  sha1 'cef9a0cc7084b1d639e06cd3bc34e4251524c840'

に変更. brew uninstall boost boost-python && brew install --build-from-source --fresh -vd boost boost-python でインストール.

なんと,boost 1.55.0のコンパイルがうまくいかない.

gcc-atomic.hpp:961:64: error: no matching constructor for initialization of 'storage_type' (aka 'boost::atomics::detail::storage128_type')
    explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
...

しかたがないので,boost 1.54.0 をインストールするとうまくいった.

url 'https://downloads.sourceforge.net/project/boost/boost/1.54.0/boost_1_54_0.tar.bz2'
sha1 '230782c7219882d0fab5f1effbe86edb85238bf4'