Cloud TPU ノードのモニタリング

このガイドでは、Google Cloud Monitoring を使用して Cloud TPU ノードをモニタリングする方法について説明します。Google Cloud Monitoring は、Cloud TPU とそのホスト Compute Engine から指標ログを自動的に収集します。これらのデータは、Cloud TPU と Compute Engine の正常性のモニタリングに使用できます。

指標を使用すると、CPU 使用率、ネットワーク使用量、MXU 使用率など、時間の経過に伴う数値を追跡できます。ログは特定の時点のイベントをキャプチャします。ログエントリは、独自のコード、Google Cloud サービス、サードパーティ アプリケーション、Google Cloud インフラストラクチャによって作成されます。ログベースの指標を作成して、ログエントリに存在するデータから指標を生成することもできます。指標の値やログエントリに基づいてアラート ポリシーを設定することもできます。

このガイドでは、Google Cloud Monitoring について説明し、次の方法を示します。

  • Cloud TPU の指標を表示する
  • Cloud TPU の指標アラート ポリシーを設定する
  • Cloud TPU ログをクエリする
  • ログに基づく指標を作成し、アラートを設定してダッシュボードを可視化する。

前提条件

このドキュメントでは、Google Cloud Monitoring の基本的な知識があることを前提としています。Google Cloud Monitoring の生成と操作を開始する前に、Compute Engine VM リソースと Cloud TPU リソースを作成する必要があります。詳細については、Cloud TPU のクイックスタートをご覧ください。

指標

Google Cloud の指標は、Compute Engine VM と Cloud Cloud TPU ランタイムによって自動的に生成されます。Cloud TPU ノードによって生成される指標は次のとおりです。

  • cpu/utilization
  • memory/usage
  • network/received_bytes_count
  • network/sent_bytes_count
  • tpu/mxu/utilization
  • tpu/tensorcore/idle_duration

CPU 使用率

cpu/utilization 指標は、Cloud TPU ワーカーの現在の CPU 使用率を追跡し、割合として示します。値は通常、0.0~100.0 ですが、100.0 を超える場合もあります。60 秒ごとにサンプリングされます。値が生成されてから表示されるまでに 180 秒ほどかかる場合があります。

メモリ使用量

memory/usage 指標は、Cloud TPU VM が現在使用しているメモリをバイト単位で追跡します。この指標は 60 秒ごとにサンプリングされます。値が生成されてから表示されるまでに 180 秒ほどかかる場合があります。

ネットワーク受信バイト数

network/received_bytes_count 指標は、Cloud TPU VM がネットワーク経由で特定の時点で受信したデータの累積バイト数を追跡します。 値が生成されてから表示されるまでに 180 秒ほどかかる場合があります。

ネットワーク送信バイト数

network/sent_bytes_count 指標は、Cloud TPU VM がネットワーク経由で特定の時点で送信した累積バイト数を追跡します。値が生成されてから表示されるまでに 180 秒ほどかかる場合があります。

TensorCore のアイドル時間

tpu/tensorcore/idle_duration 指標は、各 TPU チップの TensorCore がアイドル状態である秒数を追跡します。この指標は、使用しているすべての TPU の各チップで利用できます。TensorCore が使用されている場合、アイドル期間の値はゼロにリセットされます。TensorCore が使用されなくなった場合、アイドル期間の値が増え始めます。

次のグラフは、1 つのワーカーを持つ v2-8 Cloud TPU VM の tpu/tensorcore/idle_duration 指標を示しています。各ワーカーには 4 つのチップがあります。この例では、4 つのチップすべてが tpu/tensorcore/idle_duration に同じ値を持つため、グラフは相互に重ね合わされます。

イメージ

MXU 使用率

tpu/mxu/utilization 指標は、TPU ワーカーの現在の MXU 使用率を追跡し、割合として示します。値は通常、0.0~100.0 の数値です。60 秒ごとにサンプリングされます。サンプリング後、データは最長 180 秒間表示されません。

Cloud TPU によって生成される指標の完全なリストについては、Cloud TPU の指標をご覧ください。

指標の表示

指標は、Google Cloud コンソールの Metrics Explorer を使用して表示できます。

Metrics Explorer で、[指標を選択] をクリックして Cloud TPU Worker を検索します。[アクティブなリソースと指標のみを表示] がオンになっている場合は、現在生成されている指標のみが表示されます。[Cloud TPU ワーカー] をクリックして、使用可能な指標を表示します。

curl HTTP 呼び出しを使用して指標にアクセスすることもできます。

projects.timeSeries.query ドキュメントの [試してみる] ボタンを使用して、指定した期間内の指標の値を取得します。

  1. 名前を projects/{project-name} の形式で入力します。
  2. [リクエストの本文] セクションにクエリを追加します。次は、特定のゾーンにおける過去 5 分間 fetch tpu_worker | filter zone = 'us-central2-b' | metric tpu.googleapis.com/tpu/tensorcore/idle_duration | within 5m" のアイドル時間指標を取得するサンプルクエリです。
  3. [実行] をクリックして HTTP POST メッセージの結果を取得します。

このクエリをカスタマイズする方法については、Monitoring Query Language リファレンスのドキュメントをご覧ください。

条件が満たされたときにアラートを送信するように Google Cloud Monitoring に指示するアラート ポリシーを作成できます。

アラートの作成

このセクションの手順は、TensorCore のアイドル期間指標のアラート ポリシーを追加する方法の例を示しています。この指標が 24 時間を超えると、Cloud Monitoring は登録されたメールアドレスにメールを送信します。

  1. Monitoring Console に移動
  2. ナビゲーション パネルで [アラート] をクリックします。
  3. [通知チャネルの編集] をクリックします。
  4. [メール] で [新規追加] をクリックします。
  5. メールアドレス、表示名を入力し、[保存] をクリックします。
  6. [CREATE POLICY] をクリックします。
  7. [指標を選択] をクリックして、[TensorCore のアイドル期間] を選択し、[適用] をクリックします。
  8. [次へ]、[しきい値] の順にクリックします。
  9. [アラート トリガー] で [任意の時系列の違反] を選択します。
  10. [しきい値の位置] で [しきい値を下回っています] を選択します。
  11. [Tしきい値] に「86400000」と入力します。
  12. [次へ] をクリックします。
  13. [通知チャネル] でメール通知チャネルを選択し、[OK] をクリックします。
  14. アラート ポリシーの名前を入力します。
  15. [次へ]、[ポリシーを作成] の順にクリックします。

TensorCore のアイドル期間が 24 時間を超えると、指定したメールアドレスにメールが送信されます。

ロギング

ログエントリは、Google Cloud サービス、サードパーティのサービス、ML フレームワーク、またはコードによって記述されます。ログビューアまたは Logs API を使用してログを表示できます。Google Cloud Logging の詳細については、Google Cloud Logging をご覧ください。

ログ エクスプローラでは、リソースタイプを選択できます。

  • [Cloud TPU ワーカー] -> [ゾーン] -> [ノード ID]
  • [監査対象リソース] -> [Cloud TPU] -> [API](google.cloud.tpu.v1.Tpu.CreateNodegoogle.cloud.tpu.v1.Tpu.DeleteNodegoogle.cloud.tpu.v1.Tpu.UpdateNode

Cloud TPU ワーカーのログには、特定のゾーン内の特定の Cloud TPU ワーカーに関する情報(Cloud TPU ワーカーで使用可能なメモリ量(system_available_memory_GiB)など)が含まれます。

監査対象リソースログには、特定の Cloud TPU API の呼び出し日時と呼び出しを行ったユーザーに関する情報が記録されます。たとえば CreateNodeUpdateNodeDeleteNode などが該当します。

ML フレームワークは、stdoutstderr へのログを生成できます。これらのログは環境変数で制御され、トレーニング スクリプトによって読み取られます。

Google Cloud Logging にコードでログを書き込むことができます。詳細については、標準ログを書き込む構造化ログを書き込むをご覧ください。

Cloud TPU ログの表示

  1. Google Cloud ログビューアに移動
  2. [リソース] プルダウンをクリック
  3. [Cloud TPU ワーカー] をクリック
  4. ゾーンを選択
  5. 関心のある Cloud TPU を選択
  6. [適用] をクリックします。ログはクエリ結果に表示されます

監査対象リソースログを表示するには:

  1. Google Cloud ログビューアに移動
  2. [リソース] プルダウンをクリック
  3. [監査対象リソース]、[Cloud TPU] の順にクリック
  4. 関心のある Cloud TPU API を選択
  5. [適用] をクリックします。ログはクエリ結果に表示されます
  6. google.cloud.tpu.v1.Tpu で始まる API を選択します

Google Cloud ログをクエリする

Google Cloud コンソールでログを表示すると、ページでデフォルトのクエリが実行されます。クエリを表示するには、Show query 切り替えスイッチを選択します。デフォルト クエリを変更することも、新しいクエリを作成することもできます。詳細については、ログ エクスプローラでクエリを作成するをご覧ください。

監査対象リソースログのログ出力について

任意のログエントリをクリックして展開すると、protoPayload という名のフィールド表示されます。 protoPayload を展開すると、いくつかのサブフィールドが表示されます。

  • logName: ログの名前
  • protoPayload -> @type: ログの種類
  • resourceName: Cloud TPU の名前。
  • methodName: 呼び出されたメソッドの名前(監査ログのみ)
  • request -> @type: リクエストの種類
  • request -> node: Cloud TPU ノードの詳細
  • request -> node_id: TPU の名前
  • severity: ログの重大度

Cloud TPU ワーカーログのログ出力について

任意のログエントリをクリックして展開すると、jsonPayload という名のフィールド表示されます。 jsonPayload を展開すると、いくつかのサブフィールドが表示されます。

  • accelerator_type: アクセラレータ タイプ
  • consumer_project: Cloud TPU が存在するプロジェクト
  • evententry_timestamp: ログが生成された時刻
  • system_available_memory_GiB: Cloud TPU ワーカーで使用可能なメモリ(0 ~ 350 GB)

ログベースの指標を作成する

このセクションでは、モニタリング ダッシュボードとアラートの設定に使用するログベースの指標を作成する方法について説明します。プログラムでログベースの指標を作成する方法については、Cloud Logging REST API を使用してプログラムでログベースの指標を作成するをご覧ください。

次の例では、system_available_memory_GiB サブフィールドを使用して、Cloud TPU ワーカーで利用できるメモリをモニタリングするためのログベースの指標を作成する方法を示します。

  1. ログ エクスプローラに移動します。
  2. クエリボックスに次のクエリを入力して、プライマリ Cloud TPU ワーカー用に定義された system_available_memory_GiB を持つすべてのログエントリを抽出します。

    resource.type=tpu_worker
    resource.labels.project_id=your-project
    resource.labels.zone=your-tpu-zone
    resource.labels.node_id=your-tpu-name
    resource.labels.worker_id=0
    logName=projects/your-project/logs/tpu.googleapis.com%2Fruntime_monitor
    jsonPayload.system_available_memory_GiB:*
    
  3. [指標を作成] をクリックして、[指標エディタ] を表示します。

  4. [指標タイプ] で [ディストリビューション] を選択します。

  5. 指標の名前、説明(省略可)、測定単位を入力します。[名前] フィールドと [説明] フィールドにそれぞれ「matrix_unit_utilization_percent」と「MXU 使用率」を入力します。

  6. フィルタには、ログ エクスプローラに入力したスクリプトが事前に入力されています。

  7. [指標を作成] をクリックします。

  8. [指標を見る] をクリックして、新しい指標を表示します。指標が表示されるまでに数分かかることがあります。

Cloud Logging REST API を使用してプログラムでログベースの指標を作成する

Cloud Logging API を使用して、ログベースの指標を作成することもできます。詳細については、分布指標の作成をご覧ください。

ログベースの指標を使用してダッシュボードとアラートを作成する

ダッシュボードは指標を可視化するのに役立ちます(最大 2 分遅れ)。アラートは、エラーの発生時に通知を送信するのに役立ちます。詳細については、カスタム ダッシュボードを管理する指標ベースのアラート ポリシーを作成するをご覧ください。

ダッシュボードの作成

Cloud Monitoring で Tensorcore のアイドル期間指標のダッシュボードを作成するには、次の手順を実施します。

  1. Monitoring Console に移動
  2. ナビゲーション パネルで [ダッシュボード] をクリックします。
  3. [ダッシュボードを作成]、[グラフを追加] の順にクリックします。
  4. 追加するグラフの種類を選択します。この例では、[折れ線] を選択します。
  5. ダッシュボードのタイトルを入力します。
  6. [リソースと指標] の下にあるボタンをクリックします。
  7. リソース/指標のリストを下にスクロールし、[Cloud TPU ワーカー] -> [TPU] -> [TensorCore のアイドル期間] を選択します。
  8. [適用] をクリックします。
  9. ダッシュボードのコンテンツをフィルタリングするには、[ダッシュボード フィルタを作成] をクリックします。
  10. [ラベル] フィールドで、[project_id] をプロジェクトに設定します
  11. [追加] をクリックして、[ゾーン] を TPU を作成したゾーンに設定します
  12. node_id に対して別のフィルタを追加して、Cloud TPU 名を指定します