Cloud TPU VM のモニタリング

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

指標を使用すると、CPU 使用率、ネットワーク使用量、TensorCore のアイドル期間など、時間の経過に伴う数値を追跡できます。ログは特定の時点でのイベントをキャプチャします。ログエントリは、独自のコード、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 TPU ランタイムによって自動的に生成されます。Cloud TPU VM によって、次の指標が生成されます。

  • memory/usage
  • network/received_bytes_count
  • network/sent_bytes_count
  • cpu/utilization
  • tpu/tensorcore/idle_duration
  • /accelerator/tensorcore_utilization
  • /accelerator/memory_bandwidth_utilization

指標値が生成されて Metrics Explorer に表示されるまで、最大で 180 秒かかることがあります。

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

メモリ使用量

memory/usage 指標は TPU Worker リソースに対して生成され、TPU VM によって使用されるメモリをバイト単位で追跡します。この指標は 60 秒ごとにサンプリングされます。

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

network/received_bytes_count 指標は TPU Worker リソースに対して生成され、TPU VM がネットワーク経由で特定の時点で受信したデータの累積バイト数を追跡します。

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

network/sent_bytes_count 指標は TPU Worker リソースに対して生成され、TPU VM がネットワーク経由で特定の時点で送信した累積バイト数を追跡します。

CPU 使用率

cpu/utilization 指標は TPU Worker リソース用に生成され、TPU ワーカーの現在の CPU 使用率を追跡します。これは、1 分ごとにサンプリングされ、割合として示されます。値は通常、0.0~100.0 ですが、100.0 を超える場合もあります。

TensorCore のアイドル期間

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

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

画像

TensorCore の使用率

/accelerator/tensorcore_utilization 指標は GCE TPU Worker リソースに対して生成され、使用されている TensorCore の現在の割合を追跡します。サンプル期間に実行された TensorCore オペレーションの数を、同じサンプル期間に実行できるオペレーションの最大数で割ることによって計算されます。値が大きいほど、使用率が高いことを意味します。TensorCore 使用率の指標は、v4 以降の TPU 世代でサポートされています。

メモリ帯域幅の使用率

/accelerator/memory_bandwidth_utilization 指標は GCE TPU Worker リソース用に生成され、使用されているアクセラレータ メモリ帯域幅の現在の割合を追跡します。この指標は、サンプル期間で使用されていたメモリ帯域幅を、同じサンプル期間でサポートされている最大帯域幅で割ることによって計算されます。値が大きいほど、使用率が高いことを意味します。 メモリ帯域幅の使用率の指標は、v4 以降の TPU 世代でサポートされています。

指標の表示

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

Metrics Explorer で [指標を選択] をクリックし、関心のある指標に応じて TPU Worker または GCE TPU Worker を検索します。[アクティブなリソースと指標のみを表示] がオンになっている場合は、アクティブなリソースの指標のみが表示されます。[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 リファレンスのドキュメントをご覧ください。

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

アラートの作成

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

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

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

ロギング

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

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

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

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

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

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

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.v2alpha1.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: ログの重大度

TPU ワーカーログ

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

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

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

このセクションでは、モニタリング ダッシュボードとアラートの設定に使用するログベースの指標を作成する方法について説明します。プログラムでログベースの指標を作成する方法については、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. [指標を選択] プルダウン メニューをクリックして、フィルタ フィールドに「TensorCore のアイドル期間」と入力します。
  7. 指標のリストで、[TPU ワーカー] -> [TPU] -> [Tensorcore のアイドル期間] を選択します。
  8. ダッシュボードのコンテンツをフィルタリングするには、[フィルタ] プルダウン メニューをクリックします。
  9. [リソースラベル] で [project_id] を選択します。
  10. 比較演算子を選択して、[] フィールドに値を入力します。
  11. [適用] をクリックします。