よくある質問

Cloud TPU でサポートされているモデルにはどのようなものがありますか?サポートされているモデルのリストについては、サポートされている公式モデルをご覧ください。

Compute Engine は推定に使用できますか?TPUEstimator で予測モードを使用すると、Compute Engine でトレーニングされたモデルで推定を行うことができます。TPUEstimator の予測メソッドをご覧ください。

Compute Engine では利用できない組み込みの TensorFlow 演算はありますか?

現在の Compute Engine では使用できない組み込みの TensorFlow 演算がいくつかあります。現時点での回避策については、利用可能な TensorFlow 演算をご覧ください。

Compute Engine ではプレースホルダとフィード辞書を使用できますか?

この使用パターンは Compute Engine で技術的に可能ですが、使用しないことを強くおすすめします。プレースホルダとフィード辞書を使用すると、1 つの Compute Engine コアに制限されるため、オーバーヘッドが大きくなります。

代わりに、TPUEstimator API と Dataset API を使用して、トレーニング パイプラインを作成してください。ResNet チュートリアルに、TPUEstimatorDataset を使用して単純なトレーニング ループを作成する例が記載されています。

Compute Engine で強化学習(RL)モデルをトレーニングできますか?

強化学習は幅広い技術をカバーしていますが、そのうちのいくつかは、現在は TPU のソフトウェア抽象化と互換性がありません。一部の強化学習構成では、トレーニング ループの一部として CPU を使用してブラックボックス「シミュレーション環境」を実行する必要があります。こうした構成では Compute Engine に追いつけないため、かなり非効率的であることがわかっています。

Compute Engine では単語埋め込みを使用できますか?

はい。tf.nn.embedding_lookup() は Compute Engine でサポートされていますが、これは単に Compute Engine 上に実装がある tf.gather() のラッパーです。ただし、tf.nn.embedding_lookup_sparse() は、Compute Engine ではサポートされていません。トレーニング時に、tf.embedding_lookup() への入力 ID テンソルは静的形状でなければならないことに注意してください(つまり、バッチサイズとシーケンス長はすべてのバッチで同じでなければなりません)。これは、Compute Engine の使用時に、すべてのテンソルに対して全般的に適用される制約です。

Compute Engine では可変長シーケンスを使用できますか?

TensorFlow で可変長シーケンスを表すには、パディング、tf.while_loop()、推定されるテンソル ディメンション、バケット化など、いくつかの方法があります。現在の Compute Engine の実行エンジンでは、これらのサブセットのみがサポートされます。可変長シーケンスは、tf.while_loop()tf.dynamic_rnn()、バケット化、パディング、シーケンスの連結を使用して実装する必要があります。

Compute Engine で反復性ニューラル ネットワーク(RNN)をトレーニングできますか?

tf.static_rnn()tf.dynamic_rnn() は、構成によっては現在の TPU 実行エンジンとの互換性があります。より一般的に言うと、TPU では tf.while_loop()TensorArray の両方がサポートされており、これらは tf.dynamic_rnn() の実装に使用されます。CuDNN などの特殊なツールキットは、GPU 固有のコードが含まれているため、TPU ではサポートされていません。TPU で tf.while_loop() を使用するには、TPU 実行エンジンがメモリ使用量を静的に決定できるように、ループ反復回数の上限を指定する必要があります。

Compute Engine で敵対的生成ネットワーク(GAN)をトレーニングできますか?

GAN のトレーニングは、通常、ジェネレータのトレーニングと弁別子のトレーニングを頻繁に交互に切り替える必要があります。現在の TPU 実行エンジンでは、1 つの実行グラフのみがサポートされます。グラフを交互に切り替えるには完全な再コンパイルが必要で、これには 30 秒以上かかる場合があります。

考えられる回避策の 1 つは、ジェネレータと弁別子の両方の損失の合計を常に計算し、これらの損失に 2 つの入力テンソル(g_wd_w)を乗算することです。ジェネレータをトレーニングするバッチでは、g_w=1.0d_w=0.0 を渡すことができ、弁別子をトレーニングするバッチについては逆もまた同様です。

Compute Engine でマルチタスク学習モデルをトレーニングできますか?

タスクを集約損失関数を持つ 1 つの大きなグラフとして表すことができる場合、マルチタスク学習に特別なサポートは必要ありません。ただし、TPU 実行エンジンでは現在、1 つの実行グラフのみがサポートされています。したがって、変数を共有しているが構造が異なる複数の実行グラフをすばやく交互に切り替えることはできません。実行グラフを変更するには、グラフ コンパイル ステップの再実行が必要で、これには 30 秒以上かかる場合があります。

Compute Engine で eager モードはサポートされますか?

いいえ。Compute Engine では。実行グラフの静的コンパイルが行われる XLA が使用されますが、eager モードでは新しい動的実行エンジンが使用されます。

Compute Engine ではモデルの並列処理はサポートされますか?

モデルの並列処理(つまり、単一の Compute Engine デバイスの複数のコアにおける、異なる複数のプログラムの実行)は、現在サポートされていません。

tf.Printtfdbg の場合と同様に、Compute Engine 上で中間テンソルの実際の値を調べるにはどうすればよいですか?

現在、この機能は Compute Engine ではサポートされていません。Compute Engine での開発に推奨される手順は、TPUEstimator フレームワークを使用してモデルを実装することです。この場合、TPU と CPU / GPU の移行(use_tpu フラグ)に手間がかかりません。標準の TensorFlow ツールを使用して CPU / GPU 上でモデルをデバッグし、モデルでフルスケールのトレーニングを行う準備ができてから Compute Engine に切り替えることをおすすめします。

マイ トレーニング スキームが TPUEstimator API には複雑または専門的すぎます。使用できる明細レベル (個別的)の API はありますか?

TPUEstimator は、Cloud TPU でのトレーニングの主要なフレームワークです。ただし、TPUEstimator によってオープンソースの TensorFlow の一部である tpu API がラップされているので、明細レベルの tpu API を直接使用することは技術的には可能です(サポートはされていません)。トレーニング パイプラインで Compute Engine と CPU 間の通信が頻繁に必要となる場合や、実行グラフを頻繁に変更する必要がある場合、Compute Engine で計算を効率的に実行できません。