LoginSignup
2
3

More than 3 years have passed since last update.

macOSにおけるtensorflow 2.0 C++でビルド後にXcodeで使えるようにする

Last updated at Posted at 2019-10-03

事のきっかけ

macOSでもやりたくなった。
(Visual Studio 2017 build toolがchocoで取れるのを知って、今更ながらWindowsでのビルドが成功したのは内緒。)

更新履歴

  • 2019/10/16:macOS Catalinaベースに変更

事前準備

  • Homebrewのインストール

1./usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"を実行し、インストール。

  • vimのインストール(vim派以外の方はお好きなものを)

1.brew install vimを実行し、インストール。

  • pyenvのインストール

1.brew install pyenvを実行し、インストール。
2.vim ~/.bash_profileを実行し、以下全てを追記する。

PYENV_ROOT=/usr/local/var/pyenv
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

3.source ~/.bash_profileを実行し、変更点を反映させる。

  • python 3.7.4のインストール

1.pyenv install 3.7.4を実行し、インストール。
2.pyenv global 3.7.4を実行し、メインを3.7.4にする。
3.python -Vを実行し、バージョンが一致しているか確認する。

  • virtualenvのインストール

1.pip install virtualenvを実行し、インストール。

  • tf2.0用の仮想環境作成

1.mkdir virtualEnvで仮想環境作成専用のフォルダ作成。(任意)
2.cd virtualEnvで移動。
3.virtualenv tf2.0を実行し、仮想環境を作成。
4.source tf2.0/bin/activateを実行し、仮想環境を起動させる。

ビルド準備

  • ビルド用のpythonにパッケージをインストール

1.以下のコマンドを1行ずつ実行していく。

pip install -U pip six numpy wheel setuptools mock

pip install -U keras_applications==1.0.6 --no-deps

pip install -U keras_preprocessing==1.0.5 --no-deps
  • ビルドツールbazelのインストール

1.https://github.com/bazelbuild/bazel/releases/tag/0.26.1
にアクセスし、bazel-0.26.1-installer-darwin-x86_64.sh をダウンロード。
2.chmod +x bazel-0.26.1-installer-darwin-x86_64.shで実行可能にする。
3.sudo ./bazel-0.26.1-installer-darwin-x86_64.sh --userを実行し、インストール。
4.vim ~/.bash_profileを実行し、以下の一行を追記する。

export PATH="$PATH:$HOME/bin"

5.source .bash_profileを実行し、設定を反映。
6.bazel versionで確認し、0.26.1がインストールされているか確認する。

  • Xcode事前設定

1.AppStoreからXcodeをインストール。
2.以下のコマンドを1行ずつ実行する。

sudo xcodebuild -license accept

sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

sudo xcodebuild -license
  • ビルド前の下ごしらえ

1.brew install autoconf automake libtool cmakeを実行し、必要なものを揃える。

ビルド

  • tensorflowをビルド

1.git clone https://github.com/tensorflow/tensorflow.gitを実行し、取得する。
2.cd tensorflowを実行し、移動。
3.git checkout r2.0でTensorflow2.0系を作成。
4../configureを実行し、質問に答えていく。基本的にYes or No形式の質問は全てNOを選択し、[Default ...]といったYes or Noとは違う形式の質問は、基本的にエンターキーを押す。
5.sudo bazel build --verbose_failures --config=v2 //tensorflow:libtensorflow_cc.soを実行する。(めちゃ時間かかる。)
6.sudo bazel build --verbose_failures --config=v2 //tensorflow:libtensorflow_framework.soを実行する。(割とすぐ終わる。)

  • ビルド後

1../tensorflow/contrib/makefile/download_dependencies.shを実行する。
※ここで、プロキシ設定を通しておかないとうまくいかない。プロキシは、
export ALL_PROXY=hogehoge

  • protobufをシステムにインストール

1.下記のコマンドを1行ずつ実行していく。

cd tensorflow/contrib/makefile/downloads/protobuf/

brew install automake libtool

./autogen.sh

./configure

make

make check

sudo make install
  • 上記のフォルダがない場合

下記のコマンドを順に入力していく。

git clone https://github.com/protocolbuffers/protobuf.git

cd protobuf

git checkout xxx(tensorflow1.14は、3.7.x , tensorflow2.0は、多分3.8.xだったはず。)
git submodule update --init --recursive

./autogen.sh

./configure

make

make check

sudo make install

Xcodeで設定

  • Xcodeに導入

1.新規プロジェクトで、macOS->Command Line Toolを選択してプロジェクトを作成する。
2.以下のようにフォルダを作成する。

(新規フォルダ作成前)
[プロジェクトフォルダ]
|
|- [main.cppの入っているフォルダ]
|
|- [拡張子xcodeprjのファイル]

(新規フォルダ作成後)
[プロジェクトフォルダ]
|
|- [main.cppの入っているフォルダ]
|            |
|            |-[include](new!!)
|            |-[lib](new!!)
|- [拡張子xcodeprjのファイル]
  • ライブラリやヘッダファイル等々を揃える

1.以下に記載してあるようにコピー元からコピー先へコピーする。

cp  tensorflow/bazel-bin/tensorflow/libtensorflow_cc.so [プロジェクトフォルダ]/.../lib/

cp  tensorflow/bazel-bin/tensorflow/libtensorflow_framework.so [プロジェクトフォルダ]/.../lib/

cp  /usr/local/lib/libprotobuf.a [プロジェクトフォルダ]/.../lib/

cp -r tensorflow/bazel-genfiles/* [プロジェクトフォルダ]/.../include

cp -r tensorflow/tensorflow/cc [プロジェクトフォルダ]/.../include/tensorflow

cp -r tensorflow/tensorflow/core [プロジェクトフォルダ]/.../include/tensorflow

cp -r /usr/local/include/google/* [プロジェクトフォルダ]/.../include

cp -r tensorflow/tensorflow/contrib/makefile/downloads/absl/absl [プロジェクトフォルダ]/.../include

cp -r tensorflow/third_party [プロジェクトフォルダ]/.../include

cp -r tensorflow/bazel-tensorflow/external/eigen_archive/unsupported [プロジェクトフォルダ]/.../include

cp -r tensorflow/bazel-tensorflow/external/eigen_archive/Eigen [プロジェクトフォルダ]/.../include

  • Xcodeの設定

1.Xcodeの左端にあるプロジェクト名(青いアイコンがある)をクリックし、TARGETSの方にあるものをクリックし、Build Settings->ALL,Combinedにする。

  1. Search Pathsがあるところまでスクロールし、以下のように設定する。
Header Search Paths => $(PROJECT_DIR)/include
Library Search Paths =>$(PROJECT_DIR)/lib

3.先ほどBuild Settingsをクリックした場所の近くにある、Build Phasesをクリックし、Link Binary With Librariesを開く。そして、libtensorflow_cc.soとlibtensorflow_framework.soを追加する。以上で終了。

感想

macOSは、UNIXベースということもあって非常に楽に導入できた。

Catalinaで語リーナ。)

参考資料

「How to use your C++ muscle using TensorFlow 2.0 and XCode (without using Bazel builds)」
https://itnext.io/how-to-use-your-c-muscle-using-tensorflow-2-0-and-xcode-without-using-bazel-builds-9dc82d5e7f80
「protobuf/src at master」
https://github.com/protocolbuffers/protobuf/tree/master/src

2
3
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
2
3