LoginSignup
71
66

More than 5 years have passed since last update.

OS X 10.10(Yosemite)にCaffeをインストールする(libstdc++問題解決)

Last updated at Posted at 2015-03-15

Caffeって?

Caffeは、アメリカのカリフォルニア大学バークレー校が開発している、ディープラーニングのフレームワークです。

  • マルチプラットフォーム(LinuxやMax OS X)で動く
  • C++やPythonで実装できる
  • 数ある機械学習のフレームワークの中で開発が活発で、処理速度が速い
  • いろいろな研究成果が報告されている

などなど

Macにインストールする

Ubuntuでのインストールはすごく簡単でしたが、Mac、特に10.9と10.10(MavericsとYosemite)にインストールするのが厄介です。その理由がlibstdc++問題(勝手に自分が命名)です。

libstdc++は、C++の標準ライブラリです。
Caffeに必要な、ソフトウェアをインストールするのに必要なオプションです。
しかし、libstdc++は、OS X 10.9と10.10では対応しておりません。libc++のようです。

ネットで公開されている手順を参考に、10.9 & 10.10にでもCaffeをインストール(ビルド)することはできますが、C++で実装したディープラーニングのプログラムは動きません(これがlibstdc++問題)。

じゃ、Ubuntuで実装すればイイじゃん!ってなります。
しかし、ローカル環境がMacだったりするんで、やっぱりMacにインストールしたいですよね。

ネットの情報を色々さらってたんですが、正しい方法がきちんと取りまとめてなかったので、ここでまとめてみました。

インストール環境

  • マシン:MacBook Pro (Retina, Mid 2012)
  • CPU:2.6 GHz Intel Core i7
  • メモリ:16 GB
  • OSバージョン:10.10.2

事前にインストールしておくもの

Caffeのリポジトリをクローンする

まず、CaffeのリポジトリをGitHubからクローンしときましょう。
ココにアクセスするか、以下のコマンドを端末で叩く。

git clone https://github.com/BVLC/caffe.git

クローンするディレクトリ先は、各自、お好みで。

Python

本家のサイトからインストールする。
バージョンは、2.7.9。
Anacondaとかが推奨されていますが、実験環境用の構築やら、あまりオープンなイメージを感じなかったので自分は、避けました。

必要なPythonライブラリをpipでインストールする。
必要なライブラリは、クローンしたCaffeのディレクトリに移動して、以下を端末で叩く。

pip install -r python/requirements.txt

pipは、本家サイトのでPythonをインストールしてればデフォルトでインストールされてます。なかったら入れてください。

Cuda 7.0

libstdc++問題を解決するのに最重要事項です。
ほとんどのサイトでは、Cuda6.5をインストールすることを前提にしてます。
しかし、Cuda6.5は、libstdc++しか対応しておりません。
結果、Caffeをビルドしても動きません。

そこで必要なのがCuda7.0です。しかし、まだ正式リリースされてません。リリース候補版となっているため、ユーザ登録しないとインストーラを手に入れることができません。
ちなみにインストーラのダウンロードはココ
登録するには、何に使うのかとか英語で記入しないといけませんが、"Caffe使いたいから"とか適当に書いたら1日でアカウント発行してくれました。

その他のソフトウェア

残りは、Homebrewを使ってインストールします。
Homebrewは、rubyで開発されてるMacのパッケージ管理ソフトなんですかね。
従来のMacPortsと比べて軽量とか。
Homebrewのインストールは、以下のコマンドを端末で叩きます。

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

残りのソフトウェア
残りもインストールするのですが、その中のboostとboost-pythonは、Caffeでは、バージョン1.55でしか対応していません。

以下のコマンドを端末で叩いて、インストーラ設定ファイルを修正して、バージョンをダウングレードします。

brew edit (boost or boost-python)

boostの場合は、28行目らへん。boost-pythonは25行目らへんです。urlとsha1の行を修正します。

class Boost < 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'

以下のコマンドを端末で叩いてインストールします。

for x in snappy leveldb gflags glog szip lmdb homebrew/science/opencv; do brew install --build-from-source --fresh -vd $x; done
brew install --build-from-source --with-python --fresh -vd protobuf
brew install --build-from-source --fresh -vd boost boost-python

余談ですが、OpenCVをPythonから操作したい時、ヘッダーやライブラリファイルのシボリックリンクの作成や、Homebrewで別途Pythonをインストールする必要があります。

以下のコマンドを端末で叩きます。でないとPythonからimport cvとかやると、Segmentation errorが出てきてPythonが落ちます。

sudo ln -s /usr/local/Cellar/opencv/2.4.10.1/lib/python2.7/site-packages/ /Library/Python/2.7/site-packages/

brew install python

HomebrewでPythonをインストールしても問題ありません。

Makefileの修正

Makefileの修正です。何気にココでつまづきます。
ココで何度も何度も失敗して、Macをひっくり返したくなりました。
修正するファイルは、MakefileとMakefile.configの2つです。

cp Makefile.config.example Makefile.config

修正箇所は以下。
行頭の -- はデフォルトで記述されているもので、コメントアウトするか、行を削除してください。
++は、新たに記述するものです。
なので、-- と ++ 実際に記入しないでください。
もしかしたら、個人の環境で違うかもしれませんが、柔軟に対応してください。

Makefile.config
-- # CUSTOM_CXX := g++4.9
++ CUSTOM_CXX := /usr/bin/clang++

-- #CXXFLAGS := -stdlib=libstdc++
++ CXXFLAGS := -stdlib=libc++

-- #CUDA_DIR := /usr/local/cuda
++ CUDA_DIR := /Developer/NVIDIA/CUDA-7.0

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
 -gencode arch=compute_20,code=sm_21 \
 -gencode arch=compute_30,code=sm_30 \
 -gencode arch=compute_35,code=sm_35 #\
 -gencode arch=compute_50,code=sm_50 \
 -gencode arch=compute_50,code=compute_50

-- #BLAS := atlas
++ BLAS := open

-- # BLAS_INCLUDE := /path/to/your/blas
-- # BLAS_LIB := /path/to/your/blas
++ BLAS_INCLUDE := /usr/local/Cellar/openblas/0.2.13/include
++ BLAS_LIB := /usr/local/Cellar/openblas/0.2.13/lib

-- #PYTHON_INCLUDE := /usr/include/python2.7 \
/usr/lib/python2.7/dist-packages/numpy/core/include
++ PYTHON_INCLUDE := /Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 \
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/core/include

-- #PYTHON_LIB := /usr/lib
++ PYTHON_LIB := /Library/Frameworks/Python.framework/Versions/2.7/lib

++ INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

++ LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib \
 /Developer/NVIDIA/CUDA-7.0/lib

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10
Makefile
-- ifeq ($(shell echo $(CUDA_VERSION) \< 6.5 | bc), 1)
-- CXXFLAGS += -stdlib=libstdc++
-- LINKFLAGS += -stdlib=libstdc++

++ ifeq ($(shell echo $(CUDA_VERSION) \< 7.0 | bc), 1)
++ CXXFLAGS += -stdlib=libc++
++ LINKFLAGS += -stdlib=libc++

# 何か2行あったので、両方とも修正しとく
-- #BLAS_INCLUDE ?= /System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Headers/
++ BLAS_INCLUDE ?= /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/System/Library/Frameworks/Accelerate.framework/Versions/Current/Frameworks/vecLib.framework/Headers/

こんな感じでしょうか。
自分は試し試しでやっていたので、何がどれに効いてくるのか、本当に必要かきちんと把握できてないかもしれません。。。
間違い、不足があったら、修正します。

ビルドする

いよいよビルドです。
ビルドは、Caffeのリポジトリをクローンしたディレクトリ先で、以下のコマンドを端末で叩きます。

make all -j10

-j は、ビルドする際の並列数です。オプションなしでやると、シングルで行いますが、ビルドには結構時間がかかります。
並列数を指定したほうが、速度はダンチです。自分の環境では、-j10で行いました。
もし、ビルドが上手くいかなかったらエラーが返ってきますが、並列数の数だけメッセージが返ってくるのでご注意を。

エラーが出てきたら、対応してください。
だいたい、必要なソフトが入ってなかったり、パスが通ってなかったりです。~/.bashrc.~/.bash_profileにパスをきちんと記述してください。

上手く行ったら、テストです。以下のコマンドを端末で叩く。

# テストのビルド
make test

# テスト実行
make runtest

テスト実行をしたら約1,000のテストが実行されます。
最後の表示は、こんな感じです。

スクリーンショット 2015-03-15 13.05.58.png

YOU HAVE 2 DISABLED TESTS と出てますが、無視して問題ないようです。
FAIL が出て、途中で止まらなければ問題ありません。

これで完了です!

この手順でCaffeをビルドすると、コチラのC++のデモは動きました。
Cuda6.5をインストールして、libstdc++でその他ソフトをインストールすると、動きません。

pycaffe

CaffeをPythonで使いたい場合、またビルドが必要です。
Caffeディレクトリ内で、以下のコマンドを端末で叩く。

make pycaffe

こいつはすぐです。

~/.bashrc~/.bash_profileに環境パスを書き込みます。

export PYTHONPATH=(path to caffe)/caffe/python:$PYTHONPATH

source ~/.bashrc or ~/.bash_profile

を実行するか、新しい端末を開いて設定を反映させます。

pythonをインタラクティブモードで実行し、

import caffe

とやって、無事に通ったら成功です。


他にも困ったことがあったら、Githubに投げてみたら良いかもしれません。ただし英語で。

71
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
66