Bazel で tensorflow のユティリティを build
AITensorFlow
2019-6-8 0:00 JST

TensorFlow をつかって作業をしようとすると、再度 TensorFlow を構築しようと思ったり、必要なツールが欲しかったりします。Bazel を使って幾つかのツールをコンパイルしてみます。

Bazel とはどんなものでしょう?

Bazel はビルド&テストツールです。Make, Maven, Gradle と似ているとドキュメントにあります。Bazel のウェブサイトに行くと「Build and test software of any size, quickly and reliably」と書いてあり、単なるビルドだけでなくテストもカバーしようとしているようです。そういえば ant ってありましたが、最早、だれも話題にしなくなりました。ビルドツールとしては CMake (機種依存をしないように設計されたビルドツールLinux gcc と Windows Visual C++ の両方に対応したオブジェクトを作るような時に便利) というのもあります。

ちょっと使ってみた感想は Yocto に影響を受けているのかなと思いました。Yocto のいいところはビルド環境をターゲットのソースだけでなく依存関係のあるソース、クロス・コンパイル・ツールごと持ってくる仕組みです。可能な限り依存関係によるビルドの失敗をさけ、さらにパッチを自動的にあてる仕組みも入れているため特殊事情にも対応できる柔軟さがあります。その分、中身は複雑でけっして使いやすいとは思えないインタフェースですが「実績のある手順であればほぼほぼミスなくその手順を再現できる」ため「中身を理解せずともコピペすれば目的のものが手に入る」という大きなメリットがあります。

Bazel のインストール

まずはその Bazel をインストールしましょう。ubuntu は bazel-0.26.0-installer-linux-x86_64.sh を使用します。最新の 0.26.1 を使おうと思ったら tensorflow の configure ではじかれました。(ダウングレードせよのメッセージ)
最初 sudo でインストールしたら /usr/local/bin にインストールされ、削除するのも大変になってしまいました。ドキュメント通り --userでインストールし、消す必要があった場合は ~/.bazel をディレクトリごと消せばいいでしょう。

wget https://github.com/bazelbuild/bazel/releases/download/0.26.0/bazel-0.26.0-installer-linux-x86_64.sh
chmod +x bazel-0.26.0-installer-linux-x86_64.sh
./bazel-0.26.0-installer-linux-x86_64.sh --user

tensorflow を clone

tensorflow を使いたければ pip3 でインストールすればよいのでビルドするという事は何かよっぽどの事情でしょう。私の場合は XLA の理解と幾つかのツール freeze_graph summarize_graph tocoを入手するのが目的でした。入手するだけならもっとほかの簡単な方法があるかもしれません(私は知らない)。ビルドに先立ち github から tensorflow のソース一式を clone しておきます。(使ったのは 55f9a917c404eb76ed584aa6d2632af2ac7ddfb5)。

git clone https://github.com/tensorflow/tensorflow

configure で python3 を指定

ビルドに先立ち tensorflow のトップディレクトリで configure を実行します。伝統的な名前ですがどうやら configure.py を起動しているようです。ここで重要なのは(重要だったのは)python3 を指定する事です(でした)。あとは XLA を Y にし、それ以外はプリセット値をそのまま使いました。

tensorflow$ ./configure

WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server 
                                                               using the command "bazel shutdown".
You have bazel 0.26.0 installed.
Please specify the location of python. [Default is /usr/bin/python]:/usr/bin/python3
Found possible Python library paths:
  /usr/local/lib/python3.5/dist-packages
  /usr/lib/python3/dist-packages
Please input the desired Python library path to use.  Default is [/usr/local/lib/python3.5/dist-packages]
Do you wish to build TensorFlow with XLA JIT support? [Y/n]:

XLA つきで tensorflow をビルド

さぁビルドです。あまりに時間がかかるので一晩 PC に任せてしまいました。この指定ですと GPU を使わないのに注意。出来るのは pip のパッケージ。

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package --verbose_failures

その他ツールをビルド

Windows Subsystem for Linux 上でもビルドしてみます。かかる時間が恐ろしいのでツールだけ。注意点があるとするなら toco。ディレクトリが変わってます。

bazel build tensorflow/python/tools:freeze_graph
bazel build tensorflow/tools/graph_transforms:summarize_graph

toco で出たエラー。

ERROR: no such package 'tensorflow/contrib/lite/toco': BUILD file not found on package path

contrib/lite/toco から lite/toco にディレクトリが変わった。次のようにするのが(現時点の!!)正解。

bazel build tensorflow/lite/toco:toco

リンク集