Path: blob/master/site/ja/xla/tutorials/compile.ipynb
25118 views
Copyright 2018 The TensorFlow Authors.
XLAコンパイラAPI
TensorFlowとXLAライブラリをインポートします。XLAには、一部または全てのモデルを XLA でコンパイルする実験的なAPIである xla.compile()
が含まれています。
必要ないくつかの定数を定義し、 MNISTのデータセットを用意します。
モデルを構築する関数の定義
以下のコードブロックは、順伝搬と逆伝搬の両方を行う、1つのdenseレイヤーを持つ簡単なモデルを構築する関数を含みます。
コードが呼ばれたとき、2つの値を返します。 y
は、それぞれのターゲットのクラスの予測確率を表す tf.Tensor
です。 train_step
は global_step
の値を増加し、変数の更新を行う tf.Operation
です。
XLA の有効化
XLA を有効化するには build_mnist_model
関数を xla.compile
に渡します。以下のコードブロックは、モデルを xla.compile()
関数でラップします。これにより、提供された入力を持つターゲット関数をXLAで実行できます。
グラフをコンパイルするとき、XLAはターゲット関数によって構築されたグラフの全てのノードを、いくつかのXLAのオペレータで置き換えます。
xla.compileは、生成されたXLAのオペレータから独立して実行できる tf.Operation
を返しません 代わりに、ターゲット関数から返された tf.Operation
ノードは、返された全ての tf.Tensor
の値との制御依存関係として追加されます。これにより、 返されたテンソルが評価されるときに、 tf.Operation
ノードの実行をトリガします。
擬似コードによるxla.compileの実装は、以下のようになります:
xla.compile()は常に tf.Tensor
のリスト(1要素しか無かったとしても)を返します。
もしあなたが構築したグラフを今表示したら、通常のTensorFlowのグラフとそれほど変わらないことがわかり、前に述べたXLAのオペレータを見つけることができないでしょう。これは、あなたが sess.run()
でグラフを実行しようとしても、実際のコンパイルは後ほど発生するからです。後ほど、TensorFlowは実際にXLAオペレータを生成する一連のグラフ書き換えパスをトリガーします。これは、すべての入力がそろったときに、計算をコンパイルして実行します。
モデルの学習とテスト
以下のコードブロックはモデルを学習します。 y
の評価は、制御依存関係がある train_step
をトリガします。これは、モデル変数を更新します。