クイックスタート

概要: このクイックスタートでは、Cloud TPU の操作について簡単に説明します。このクイックスタートでは、Cloud TPU を使用して MNIST を実行します。これは、新しい機械学習アプローチのテストでよく使用される、手書きの数字の標準データセットです。

このトピックは、Cloud TPU を初めて使用する方を対象としています。Cloud TPU の詳細については、Google の colabs のいずれかをお試しください。また、チュートリアル セクションには、さまざまなサンプルが掲載されています。

始める前に

このチュートリアルを開始する前に、Google Cloud Platform プロジェクトが正しく設定されていることを確認してください。

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP Console のプロジェクト セレクタのページで、GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. このチュートリアルでは、Google Cloud Platform の課金対象となるコンポーネントを使用します。費用を見積もるには、Cloud TPU の料金ページを確認してください。不要な課金を回避できるよう、このチュートリアルを完了したら、作成したリソースを必ずクリーンアップしてください。

リソースを設定する

このセクションでは、チュートリアルで使用する Cloud Storage のストレージ、VM、Cloud TPU の各リソースを設定する方法を説明します。

Cloud Storage バケットを作成する

モデルのトレーニングに使用するデータとトレーニング結果を格納するには、Cloud Storage バケットが必要です。このチュートリアルで使用する ctpu up ツールは、Cloud TPU サービス アカウントのデフォルトの権限を設定します。権限の詳細な設定が必要な場合は、アクセスレベル権限をご覧ください。

バケットのロケーションは、仮想マシン(VM)および TPU ノードと同じリージョンにする必要があります。VM と TPU ノードは、リージョン内のサブディビジョンである特定のゾーンに配置されます。

  1. GCP Console の Cloud Storage ページに移動します。

    Cloud Storage ページに移動

  2. 次のオプションを指定して新しいバケットを作成します。

    • 任意の一意な名前
    • デフォルトのストレージ クラス: Standard
    • ロケーション: TPU ノードを作成する予定のリージョンと同じリージョンにバケットのロケーションを指定します。各種の TPU タイプをどこで使用できるかについては、TPU タイプとゾーンをご覧ください。

ctpu ツールを使用する

このセクションでは、Cloud TPU プロビジョニング ツールctpu)を使用して Cloud TPU プロジェクトのリソースを作成、管理する方法を説明します。リソースは、同じ名前が付けられた仮想マシン(VM)と Cloud TPU リソースで構成されます。これらのリソースは、作成したバケットと同じリージョン / ゾーンに存在する必要があります。

VM リソースと TPU リソースを設定するには、gcloud コマンドまたは Cloud Console を使用することもできます。Compute Engine VM と Cloud TPU リソースの設定から管理までのすべての手順については、TPU の作成と削除ページをご覧ください。

ctpu up を実行してリソースを作成する

  1. Cloud Shell ウィンドウを開きます。

    Cloud Shell を開く

  2. gcloud config set project <Your-Project> を実行して Cloud TPU を作成するプロジェクトを使用します。

  3. Cloud TPU デバイスまたは Pod スライスのいずれかを示すフラグを指定して ctpu up を実行します。フラグのオプションと説明については、CTPU リファレンスをご覧ください。

  4. Cloud TPU デバイスを設定します。

    $ ctpu up 

    構成に関する次のメッセージが表示されます。

    ctpu will use the following configuration:
    
    Name: [your TPU's name]
    Zone: [your project's zone]
    GCP Project: [your project's name]
    TensorFlow Version: 1.14
    VM:
     Machine Type: [your machine type]
     Disk Size: [your disk size]
     Preemptible: [true or false]
    Cloud TPU:
     Size: [your TPU size]
     Preemptible: [true or false]
    
    OK to create your Cloud TPU resources with the above configuration? [Yn]:
    

    y キーを押して、Cloud TPU リソースを作成します。

ctpu up コマンドにより、仮想マシン(VM)と Cloud TPU サービスが作成されます。

これ以降、接頭辞 (vm)$ は Compute Engine VM インスタンスでコマンドを実行する必要があることを意味します。

Compute Engine VM を確認する

ctpu up コマンドの実行が終了したら、shell プロンプトが username@project から username@tpuname に変更されたことを確認します。変更されていれば、Compute Engine VM にログインしていることになります。

データを取得する

MNIST データセットは MNIST データベース サイトでホストされています。次の手順に従って、データをダウンロードして必要な形式に変換し、変換したデータを Cloud Storage にアップロードします。

MNIST データをダウンロードして変換する

convert_to_records.py スクリプトは、データをダウンロードし、サンプルの MNIST モデルが待ち受ける TFRecord 形式に変換します。

次のコマンドを使用して、スクリプトを実行し、ファイルを解凍します。

(vm)$ python /usr/share/tensorflow/tensorflow/examples/how_tos/reading_data/convert_to_records.py --directory=./data
(vm)$ gunzip ./data/*.gz

Cloud Storage にデータをアップロードする

Cloud Storage バケットにデータをアップロードして、TPU サーバーがデータにアクセスできるようにします。以下のコマンドで変数を設定する場合は、YOUR-BUCKET-NAME を使用する Cloud Storage バケットの名前に置き換えます。

(vm)$ export STORAGE_BUCKET=gs://YOUR-BUCKET-NAME
(vm)$ gsutil cp -r ./data ${STORAGE_BUCKET}

MNIST TPU モデルを実行する

MNIST TPU モデルは、Compute Engine VM の次のディレクトリにプリインストールされています。

/usr/share/models/official/mnist/

MNIST TPU モデルのソースコードは GitHub でも入手できます。モデルは Cloud TPU 上で実行できます。また、ローカルマシンでモデルを実行する方法もあります。

Cloud TPU でモデルを実行する

次の手順で、コマンドに接頭辞 (vm)$ が含まれている場合、そのコマンドは Compute Engine VM で実行する必要があります。

  1. MNIST モデルを実行します。

    (vm)$ python /usr/share/models/official/mnist/mnist_tpu.py \
      --tpu=$TPU_NAME \
      --data_dir=${STORAGE_BUCKET}/data \
      --model_dir=${STORAGE_BUCKET}/output \
      --use_tpu=True \
      --iterations=500 \
      --train_steps=2000
    
    • --tpu は、Cloud TPU の名前を指定します。ctpu はこの名前を環境変数(TPU_NAME)として Compute Engine VM に渡します。ただし、VM との接続が切断された場合は、もう一度 ctpu up を実行すると再接続できます。gcloud compute ssh を実行して VM に接続した場合、TPU_NAME は設定されません
    • --data_dir は、トレーニング入力用の Cloud Storage のパスを指定します。
    • --model_dir は、モデルのトレーニングの際にチェックポイントとサマリーが保存されるディレクトリを指定します。フォルダがない場合は、プログラムによって作成されます。Cloud TPU を使用する場合、model_dir は Cloud Storage のパス(gs://...)である必要があります。既存のフォルダを再利用して、現在のチェックポイント データを読み込み、追加のチェックポイントを保存できます。
    • --iterations は、制御を python に返す前に呼び出しごとに TPU で実行されるトレーニング ステップの数を指定します。この数値が小さすぎる(100 未満など)場合、通信オーバーヘッドが過剰になり、パフォーマンスが低下する可能性があります。
    • --train_steps は、トレーニングを実行するためのステップ(バッチ)の合計数を指定します。

ローカル(TPU 以外の)マシンでモデルを実行する

TPU 以外のマシンでモデルを実行するには、--tpu フラグを省略し、次のフラグを設定します。

--use_tpu=False

これにより、GPU が存在する場合は計算が GPU に届きます。GPU が存在しない場合、計算は CPU にフォールバックします。

期待される動作

デフォルトの場合、tf.estimator モデルは損失値とステップ時間を次の形式で報告します。

    INFO:tensorflow:Calling model_fn.
    INFO:tensorflow:Create CheckpointSaverHook.
    INFO:tensorflow:Done calling model_fn.
    INFO:tensorflow:TPU job name tpu_worker
    INFO:tensorflow:Graph was finalized.
    INFO:tensorflow:Running local_init_op.
    INFO:tensorflow:Done running local_init_op.
    INFO:tensorflow:Init TPU system
    INFO:tensorflow:Start infeed thread controller
    INFO:tensorflow:Starting infeed thread controller.
    INFO:tensorflow:Start outfeed thread controller
    INFO:tensorflow:Starting outfeed thread controller.
    INFO:tensorflow:Enqueue next (500) batch(es) of data to infeed.
    INFO:tensorflow:Dequeue next (500) batch(es) of data from outfeed.
    INFO:tensorflow:Saving checkpoints for 500 into gs://ctpu-mnist-test/output/model.ckpt.
    INFO:tensorflow:loss = 0.08896458, step = 0
    INFO:tensorflow:loss = 0.08896458, step = 0
    INFO:tensorflow:Enqueue next (500) batch(es) of data to infeed.
    INFO:tensorflow:Dequeue next (500) batch(es) of data from outfeed.
    INFO:tensorflow:Enqueue next (500) batch(es) of data to infeed.
    INFO:tensorflow:Dequeue next (500) batch(es) of data from outfeed.
    INFO:tensorflow:global_step/sec: 242.829
    INFO:tensorflow:examples/sec: 248715
    INFO:tensorflow:Enqueue next (500) batch(es) of data to infeed.
    INFO:tensorflow:Dequeue next (500) batch(es) of data from outfeed.
    INFO:tensorflow:Saving checkpoints for 2000 into gs://ctpu-mnist-test/output/model.ckpt.
    INFO:tensorflow:Stop infeed thread controller
    INFO:tensorflow:Shutting down InfeedController thread.
    INFO:tensorflow:InfeedController received shutdown signal, stopping.
    INFO:tensorflow:Infeed thread finished, shutting down.
    INFO:tensorflow:Stop output thread controller
    INFO:tensorflow:Shutting down OutfeedController thread.
    INFO:tensorflow:OutfeedController received shutdown signal, stopping.
    INFO:tensorflow:Outfeed thread finished, shutting down.
    INFO:tensorflow:Shutdown TPU system.
    INFO:tensorflow:Loss for final step: 0.044236258.

クリーンアップ

このトピックで使用したリソースについて GCP アカウントに課金されないようにする手順は次のとおりです。

  1. Compute Engine VM との接続を解除します。

    (vm)$ exit
    

    プロンプトが user@projectname に変わります。これは、現在、Cloud Shell 内にいることを示しています。

  2. Cloud Shell で、Cloud TPU の設定時に使用した --zone フラグを指定して ctpu delete を実行し、Compute Engine VM と Cloud TPU を削除します。

    $ ctpu delete [optional: --zone]
    
  3. TPU の使用に対して不要な料金が発生しないように、ctpu status を実行してインスタンスが割り当てられていないことを確認します。削除には数分かかることがあります。次のようなレスポンスは、割り当てられたインスタンスがないことを示します。

    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. 次に示すように gsutil を実行します。YOUR-BUCKET-NAME の部分は、このチュートリアルで作成した Cloud Storage バケット名に置き換えてください。

    $ gsutil rm -r gs://YOUR-BUCKET-NAME
    

次のステップ

このクイックスタートでは、Cloud TPU の操作について簡単に説明しました。これにより、以下に取り組む準備ができました。

  • Cloud TPU の詳細を確認する
  • 独自のアプリケーション用に Cloud TPU を設定する

詳細情報

Keras と MNIST colab 環境で MNIST モデルを実行して、Cloud TPU の機能を試すことができます。
サービスの概要 Cloud TPU の主な機能とメリットについて確認します。
Cloud Tensor Processing Unit(TPU) Cloud TPU の機能とそのメリットについて確認します。
料金 Cloud TPU の料金を確認します。

設定

TPU のサービスの選択 Compute EngineGoogle Kubernetes EngineAI Platform など、Cloud TPU で使用するさまざまなオプションについて理解を深めます。
TPU タイプとゾーン 各ゾーンで使用できる TPU タイプを確認します。
TPU のバージョン さまざまな TPU のバージョンを理解し、アプリケーションに適した TPU の選択方法を確認します。