プリエンプティブル TPU の使用

プリエンプティブル TPU は、通常のノードよりはるかに低価格で実行できる Cloud TPU ノードです。ただし、Cloud TPU が別のタスクのためにリソースにアクセスする必要がある場合に終了(プリエンプト)する可能性があります。

プリエンプティブル TPU の作成

プリエンプティブル TPU ノードは、Cloud Console、gcloud コマンドライン ツール、または ctpu ユーティリティを使用して作成できます。

コンソール

  1. メインページの Compute Engine の下にある TPU ページに移動します。
  2. [TPU ノードを作成] をクリックして、TPU ノードの作成ページを開きます。
  3. [Cloud TPU の作成] ページの下部にある [ラベルと説明] をクリックして、プリエンプティブ オプションを表示します。
  4. 新しい TPU ノードをプリエンプティブルにするには、プリエンプティブ オプションをクリックします。
  5. この TPU ノードの残りの属性を指定します。
  6. ページ下部にある [作成] をクリックして、TPU ノードを作成します。

gcloud

カスタム設定が必要な場合、ctpu ではなく gcloud コマンドを使用して TPU リソースを作成、管理することもできます。カスタム設定の詳細については、TPU の作成と削除をご覧ください。プリエンプティブル TPU を作成するには、通常の TPU を作成する場合と同じ gcloud compute tpus create コマンドを使用しますが、--preemptible フラグを追加します。

$ gcloud compute tpus create demo-tpu \
  --range=10.240.1.0 \
  --version=2.1 \
  --preemptible
  

ここで

  • demo-tpu は、作成する TPU を識別するための名前です。
  • --range は、作成される Cloud TPU リソースのアドレスを指定します。任意の値を 10.240.*.* の形式で指定します。この例では、10.240.1.0 を使用します。
  • --version は、TPU で使用する TensorFlow バージョンを指定します。
  • --preemptible は、Cloud TPU が TPU をプリエンプトできるようにします。

ctpu

プリエンプティブル TPU を作成するには、通常の TPU を作成する場合と同じ ctpu up コマンドを使用しますが、--preemptible フラグを追加します。

$ ctpu up --preemptible

プリエンプティブル TPU に対して ctpu up を実行するたびに --preemptible フラグを指定する必要があるので注意してください。コマンドライン フラグとそのデフォルト値は、個々のコマンド呼び出しに個別に適用されます。

TPU のプリエンプティブル ステータスは、VM インスタンスのプリエンプティブル ステータスとは関係ありません。以下のプリエンプティブル VM と TPU の説明をご覧ください。

プリエンプティブル TPU の料金と割り当て

プリエンプティブル TPU の料金は、通常の TPU の料金よりかなり低価格です。詳細については、料金ページをご覧ください。TPU を作成後、1 分以内にプリエンプトされた場合は課金されません。

プリエンプティブル TPU の割り当ては一般的に多く、通常の TPU の割り当てとは別のものです。割り当てページをご覧ください。

プリエンプティブル VM とプリエンプティブル TPU

クイックスタート ガイドで説明しているように、TPU に接続するには Compute Engine 仮想マシン(VM)が必要です。TPU のプリエンプティブル ステータスは、VM のプリエンプティブル ステータスとは関係ありません。TPU をプリエンプティブルとして定義し、VM を非プリエンプティブルとして定義できます。また、その逆も可能です。これら両方をプリエンプティブルとして定義することもできます。

可能性が高い組み合わせは、プリエンプティブ TPU非プリエンプティブ VM です。次の点に注意してください。

  • VM の料金は、TPU の料金よりも低くなる可能性があります。VM の料金は使用するマシンタイプによって異なります。相対的なコストの簡単な例については、料金ページをご覧ください。
  • Cloud TPU は VM と TPU のプリエンプトを調整しません。これら両方をプリエンプティブルとして定義すると、VM と TPU をそれぞれ別のタイミングでプリエンプトできます。
  • Compute Engine が VM をプリエンプトした場合でも、(TPU がプリエンプトされない限り)TPU の料金が発生します。VM がプリエンプトされている間、TPU はアイドル状態であるので注意してください。
  • Compute Engine VM と Cloud TPU インスタンスのプリエンプティブ インスタンスは、24 時間実行した後は常にプリエンプティブになります。 この 24 時間カウンタは、特定のアクションによってリセットされます。

プリエンプティブル VM を定義するには、ctpu コマンドまたは gcloud コマンドを使用できます。

ctpu

プリエンプティブル VM を作成するには、通常の VM で TPU を作成する場合と同じ ctpu up コマンドを使用しますが、--preemptible-vm フラグを追加します。

$ ctpu up --preemptible-vm

プリエンプティブル TPU に対して ctpu up を実行するたびに --preemptible-vm フラグを指定する必要があるので注意してください。コマンドライン フラグとそのデフォルト値は、個々のコマンド呼び出しに個別に適用されます。

gcloud

カスタム設定が必要な場合、ctpu ではなく gcloud コマンドを使用して TPU リソースを作成、管理することもできます。カスタム設定の詳細については、TPU の作成と削除をご覧ください。プリエンプティブル VM を作成するには、通常の VM を作成する場合と同じ gcloud compute instances create コマンドを使用しますが、--preemptible フラグを追加します。

$ gcloud compute instances create tpu-demo-vm \
  --machine-type=n1-standard-2 \
  --image-project=ml-images \
  --image-family=tf-1-15 \
  --scopes=cloud-platform \
  --preemptible

ここで

  • tpu-demo-vm は、作成する VM インスタンスを識別するための名前です。
  • --machine-type=n1-standard-2 は、4 個の仮想 CPU と 15 GB のメモリを備えた標準的なマシンタイプです。使用可能なマシンタイプをご覧ください。
  • --image-project=ml-images は、tf-1-15 イメージの使用を可能にするための、イメージの共有コレクションです。
  • --image-family=tf-1-15 は、TensorFlow に必要な pip パッケージを含むイメージです。
  • --scopes=cloud-platform により、VM が Google Cloud API にアクセスできます。
  • --preemptible は、Compute Engine が VM インスタンスをプリエンプトできるようにします。

プリエンプティブル VM インスタンスの作成については、Compute Engine のドキュメントをご覧ください。

TPU がプリエンプトされたかどうかの確認

Cloud TPU サービスが TPU をプリエンプトしたかどうかを確認するには、ctpu コマンドまたは gcloud コマンドを使用します。

ctpu

TPU のステータスを確認します。

$ ctpu status

上記のコマンドは、作成した TPU の詳細を出力します。出力された TPU プリエンプティブルの値は、TPU がプリエンプティブルかどうかを示します。出力された TPU の状態READY の場合、TPU はプリエンプトされていません。TPU がプリエンプトされた場合、ステータスは READY から PREEMPTED に変わります。

gcloud

使用可能な TPU を一覧表示します。

(vm)$ gcloud compute tpus list

上記のコマンドは、作成した TPU の詳細を出力します。出力された STATUSREADY の場合、TPU はプリエンプトされていません。TPU がプリエンプトされた場合、ステータスは READY から PREEMPTED に変わります。例:

NAME       ZONE           ACCELERATOR_TYPE  NETWORK_ENDPOINT   NETWORK  RANGE          STATUS
demo-tpu   us-central1-b  v2-8              10.240.1.2:8470    default  10.240.1.0/29  PREEMPTED

TPU がプリエンプトされている場合は、次のコマンドを使用して再起動します。

(vm)$ gcloud compute tpus start your-tpu-name --zone=your-zone

VM インスタンスがプリエンプトされたかどうかの確認

VM インスタンスがプリエンプトされたかどうかを確認するには、gcloud compute operations list コマンドを使用して最近のシステム オペレーションのリストを取得します。name フィルタを追加して実行中のインスタンスのみを表示するか、operationType フィルタを追加してプリエンプティブされているリソースのみを表示します。たとえば、次のコマンドを使用して、指定されたインスタンス名のインスタンスのみを表示します。

$ gcloud compute operations list--filter="name=( 'NAME' my-vm)"

次の例では、プリエンプトされたリソースのみが表示されます。

$ gcloud compute operations list --filter="operationType=compute.instances.preempted"

詳細については、Compute Engine ガイドをご覧ください。

プリエンプティブル TPU で実行する機械学習アプリケーションの設計

VM と TPU が再起動されてもアプリケーションを復元できるように、モデルのチェックポイントを定期的に保存し、再起動時に最新のチェックポイントから復元するようにアプリケーションを構成します。

TensorFlow TPUEstimator API が、モデルのチェックポイントの保存と復元を行います。TPUEstimator を使用すると、TPU や VM のチェックポイントの保存や復元について心配する必要がなくなります。詳しくは、Cloud TPU で TPUEstimator を使用する方法をご覧ください。

上記のように Cloud TPU で TPUEstimator を使用することをおすすめします。ただし、チェックポイントの保存機能と復元機能をモデルに記述する方法を確認したい場合は、TensorFlow tf.train モジュールの次のリソースをご覧ください。

次のステップ