TensorFlowをソースからインストールしてみる(Mac)

MacでTensorFrowを試してから暫く時間がたちました。改めて環境を構築しようとしたら色々あり、ソースからビルドすることにしました。その手順を記録します。

0. pyenv + pyenv-virtualenvで構築したTensorFlow環境を削除する

かつて構築したTensorflow用環境を無かったことにします。
これからTensorFlow環境を構築する人はスルーで。

pyenvとpyenv-virtualenvでMacのPython環境を整える。

pyenv + pyenv-virtualenvでtensorflow環境を作ったはいいけど、TensorFlowのインストールを忘れていた。

 

1. pipでTensorFlowをインストールする(Python 3.6.3)

pyenvでインストールしたPython環境を見てみると…

Python 3.6.3と、この前構築したOpenCV環境がありますね。

 

pyenv-virtualenvで、TensorFlow環境を構築します。名前はtensorflow。

 

環境に切り換えて、pipでTensorFlowをインストール。

 

Pythonを対話モードで起動します。続けてTensorFlowをimportするとRuntimeWarningが…
3.5でコンパイルされたモジュールをPython 3.6で使ったからみたい。

一旦、quit()でPythonから脱出。

 

2. pipでTensorFlowをインストールする(Python 3.5.4)

今度はPython 3.5ベースでTensorFlow環境を構築してみます。

まず既存の環境を捨てます。

 

3.5.4ベースのTensorFlowの環境(tensorflow)を構築し、切り換えます。
異なるバージョンを自由に使い分けられて素敵ですね。

 

確認してみました。切り替わってます。

 

pipでTensorFlowをインストールします。

 

Pythonを対話モードで起動してTensorFlowをimportしてみます。
RuntimeWarningが消えました。

 

簡単なTensorFlowのコードを実行してみます。
tf.Session()を実行したときにInformationが出力されました。TensorFlowのバイナリが、CPUの拡張命令セット(SSE4.1、SSE4.2、AVX)を使わない設定でコンパイルされたものらしい。
ちなみに、これはmac mini (Late 2012)の場合です。MacBook Proの場合はさらに2個(AVX2、FMA)多かったです。CPUの違いで拡張命令セットに差がある模様。

動作に支障はありませんが、いちいちメッセージが出て邪魔だし、どうせならCPUの機能をフルに使って高速化を図りたいので、TensorFlowをソースコードからビルドしてみます。

 

3. TensorFlowをビルド&インストール

Python 3.6.3で動作し、かつCPU拡張命令セットが有効なTensorFlowバイナリをビルドしてみます。

まず、今の環境を捨てて3.6.3ベースの環境(tensorflow)を新たに構築します。

 

必要なPython パッケージをインストールします。

 

Bazelというツールも必要です。インストールします。

 

適当なディレクトリで次のコマンドを実行し、TensorFlowのソースを入手します。

 

ディレクトリを移動してブランチを確認します。現在、公式ページで公開されているAPIはr1.4。それより0.1だけ新しいr1.5を使ってみたいと思います。まずはr1.5をcheckout。

 

コンフィグレーションを行います。コンフィグ中の質問は全てデフォルト、つまりReternキーを叩いて進めればOKです。

 

コンパイルします。時間がかかるので気長に待ちます。
CPU拡張命令のオプション指定は、例えばSSE4.1の場合には--copt=-msse4.1となります。CPUに応じたオプションを指定しましょう。

 

Wheelパッケージを任意のディレクトリ、例えば/tmp/tensorflow_pkgに作ります。

 

パッケージ名を確認。それをpipでインストール。

ビルド&インストールは以上です。

 

動作を確認してみます。
importするときにcurlライブラリを初期化するとのInformationが出るが、他の警告は無し(Mac mini)。
ちなみにMacBook Proでは警告もinfoも一切無しでした。

 

4. 参考にした情報

Installing TensorFlow from Sources

TensorFlow公式より

 

拡張命令セットでTensorFlowをコンパイルする方法

Wang Yi-Jyunさん (Qiita)

Leave a Comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください