TensorFlowのインストール
TensorFlowとは
TensorFlowはGoogleの開発したオープンソースの数値計算ソフトウェアライブラリです。
”機械学習のための”、という枕詞がつかないのは、機械学習に限定されない様々な用途で利用できるためです。
TensorFlowは他の多くの科学数値計算ライブラリと同様にPython上で動作します。(Python以外の言語で利用できないわけではありません。詳細はこちら。)
私も現在のところTensorFlowを勉強中なので、説明ができるレベルで理解ができ次第この項目に文章を追加していこうと思います。
TensorFlowのインストール
TensorFlowのインストール方法はオフィシャルサイトで詳しく説明されています。 ちなみにTensorFlowは現在はWindowsにネイティブで(仮想環境を介さずに)インストールできるようになりましたが、2016年11月までWindowsネイティブでの動作がサポート対象外だったこともあり、 Ubuntu Linuxでの実行をおすすめします。 私はUbuntu Linux OS上でTensorFlowを実行しています。
一点、私の環境では上記オフィシャル手順ではスムーズにインストールが完了しませんでした。
私と同じ環境でTensorFlowを実行したい方は、私の環境、および実施したインストール手順を下記に記載しますので参考にしてください。
OS | Ubuntu 16.04 64bit | Ubuntu Desktop |
Python | 3.5.2 | sudo apt-get install python3 |
TensorFlow | r1.0 | https://github.com/tensorflow/tensorflow/tree/r1.0 |
私の環境ではTensorFlowをソースインストールしています。 理由は、ソースからのインストール以外の方法でTensorFlowをインストールすると、私の環境では下記のようなワーニングが毎回コンソールに出力されてしまうためです。
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
メッセージは、SSE3やAVXなどの拡張命令セットが利用できる環境であるにもかかわらず、これらの拡張命令を使用するようにTensorFlowがビルドされていないと言っているようです。 プリコンパイル済みTensorFlowをインストールすると毎回このワーニングがコンソールに出力されてしまいます。
インストール手順
Ubuntu 16.04/Python3.5/GPUサポート無し/ソースインストール/virtualenv利用 の構成でのインストール手順を紹介します。
ちなみにこの手順は2017/3/2に検証した手順であり、将来同じ手順で正しくTensorFlowをインストールできない可能性があります。
Bazelのインストール
参考URL:https://bazel.build/versions/master/docs/install.html
BazelはGoogle製のビルドツールです。TensorFlowをソースからビルドする際に必要になります。
bazelがJDK1.9に対応していないため、JDK1.9がOSにインストールされていると上記手順途中でエラーが発生します。
私は下記のようにしてJava9/JDK1.9をアンインストールしました。
* 利用している他のソフトウェアがJava1.9を利用している場合はそのソフトウェアが動作しなくなる可能性があります。
コマンドの意味や影響がわからなければ実行しないでください。
次にJDK1.8をインストールします。
Bazelの配布用URIとパッケージソースの追加
Bazelのインストール
PythonのVirtualenv環境のセットアップ
TensorFlow専用のPython実行環境を作成します。Virtualenvを使うとプロジェクト専用のPythonバージョン、Pythonソフトウェアパッケージ を構築できるようになります。Virtualenv環境を切り替えるとPythonのバージョンや利用できるパッケージも自由に切り替えられるようになります。
pip3をインストールします。
virtualenvをインストールします。
TensorFlow用のvirtualenv環境を作成し、環境を有効にします。下記のコマンドを実行すると/home/<ユーザ名> ディレクトリ直下に 新たにtensorflowというディレクトリを作成します。
環境が有効になっていればプロンプトが下記のように変化しているはずです。
この状態でpip installを実行すると、このvirtualenv環境にのみpipパッケージがインストールされます。
※ちなみに環境を抜けたい場合は下記を実行すればOKです。
次にTensorFlowで必要なパッケージをvirtualenv環境にインストールします。
TensorFlowのソースをダウンロード/ビルド構成を設定する。
まずはGithubのTensorFlowのレポジトリからソースコードをダウンロードします。
ソースのビルド構成を設定します。全てそのままEnterを押してデフォルトの設定を使います。
ちなみに私の環境ではここで下記のようなエラーが出力されてしまいました。
ERROR: /home/ユーザ名/projects/tensorflow/tensorflow/python/BUILD:2275:1: every rule of type _py_wrap_cc implicitly depends upon the target '@swig//:templates', but this target could not be found because of: no such package '@swig//': Error downloading [http://bazel-mirror.storage.googleapis.com/ufpr.dl.sourceforge.net/project/swig/swig/swig-3.0.8/swig-3.0.8.tar.gz, http://ufpr.dl.sourceforge.net/project/swig/swig/swig-3.0.8/swig-3.0.8.tar.gz, http://pilotfiber.dl.sourceforge.net/project/swig/swig/swig-3.0.8/swig-3.0.8.tar.gz] to /home/ユーザ名/.cache/bazel/_bazel_ユーザ名/3f6df72b6e217920e9a8b0ddfd37c24d/external/swig/swig-3.0.8.tar.gz: All mirrors are down: [].
ERROR: Evaluation of query "deps((//tensorflow/... - //tensorflow/examples/android/...))" failed: errors were encountered while computing transitive closure.
私が確認した限りでは、tensorflowの外部依存パッケージ'swig'のダウンロードタイムアウトが原因のエラーのようです。
curlコマンドで上記エラー内の"bazel-mirror.storage.googleapis.com"と"pilotfiber.dl.sourceforge.net"および"pilotfiber.dl.sourceforge.net"
に対してswig-3.0.8.tar.gzのダウンロードを試してみたところ、"bazel-mirror.storage.googleapis.com"以外の2つのミラーサイトの反応が遅いことがわかりました。
(数秒待てばダウンロード自体は始まります)。
おそらくbazelはパッケージのダウンロードに対するレスポンスタイムアウトの閾値が厳しく設定されており、
パッケージの配信サーバがもたつくとサーバがダウンしていると判断してしまうようです。
この問題を解決するため、 tensorflow/tensorflow/workspace.bzl ファイルを下記のように修正し、
レスポンスが遅い2つのサーバをダウンロードリストから外して再度./configure
コマンドを実行したところ、無事エラーなくコマンドが完了しました。
"http://ufpr.dl.sourceforge.net/project/swig/swig/swig-3.0.8/swig-3.0.8.tar.gz", ←この行を削除
"http://pilotfiber.dl.sourceforge.net/project/swig/swig/swig-3.0.8/swig-3.0.8.tar.gz", ←この行を削除
], strip_prefix = "swig-3.0.8", build_file = str(Label("//third_party:swig.BUILD")), )
同じようなエラーが発生した方は上記の方法を試してみてください。./configure
コマンドの実行が完了したあとは、ソースコードをgit reset --hard
で戻しておきましょう。
TensorFlowのソースをビルドする。
bazel buildでソースをビルドします。
ちなみに私のマシン(CPU: i5-4570S@2.9GHz, 4core, RAM: 8GB)では23分かかりました。
CPU使用率もほとんどの時間で4コアとも使用率100%、メモリも見ていた限り最大で8GBの99.7%、スワップも3.5GB使用していました。
他の作業と同時並行でビルドするのはやめたほうが良いです。他のアプリを閉じたうえでビルドしましょう。
上記のコマンドが完了すると、bazel-bin/tensorflow/tools/pip_package/build_pip_packageというファイルが作成されます。 そのファイル名の通り、TensorFlowのpipパッケージを作成するツールです。
※上記のコマンドはAVX/AVX2/FMA/SSE4.2の拡張命令セットが使えるCPUでのみ有効です。(ビルドは成功しますがプログラム実行時にエラーが発生します。)
古いCPU(Intel Core i7 2600Kなど)ではAVX2とFMAはサポートされていないため、そのようなCPUを使っている場合はAVX2/FMAに関するオプションを削除した上で実行する必要があります。
自分の使っているマシンのCPUがAVX/AVX2/FMA/SSE4.2が利用可能か事前に調べておいてください。
TensorFlowのpipパッケージを作成し、インストールする。
カスタムビルドしたTensorFlowをpipパッケージ化します。 下記のコマンドを実行すると、/tmp/tensorflow_pkgディレクトリ直下にpipパッケージファイル(~.whl)を生成します。 このコマンドは先程までとは違い、20秒ほどで完了します。
生成された.whlファイルでpipインストールします。
これでTensorFlowのソースインストールは完了です。
インストールの検証
TensorFlowが正しくインストールされたか確認します。