TPU をモニタリングする

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

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

TPU をモニタリングするには、キャパシティ プランナー(プレビュー)も使用できます。キャパシティ プランナーを使用すると、プロジェクト、フォルダ、組織の TPU の使用状況と予測データを表示できます。このデータは 24 時間ごとに更新され、使用状況の傾向を分析して、今後の容量ニーズを計画するために使用できます。詳細については、Capacity Planner の概要をご覧ください。

TPU 指標にアクセスする

Compute Engine は、TPU ランタイム指標と TPU VM インフラストラクチャ指標の 2 種類の TPU 指標を生成します。指標は次の 2 つの方法で取得できます。

  • TPU Monitoring ライブラリ: TPU Monitoring ライブラリを使用して、LibTPU SDK から TPU ランタイム指標を取得します。これにより、アプリケーションはゲスト環境内からリアルタイムのテレメトリーを取得できます。詳細については、TPU モニタリング ライブラリをご覧ください。

  • AI Telemetry Collector: AI Telemetry Collector を介して、ランタイム指標と VM インフラストラクチャ指標を取得します。AI テレメトリー コレクタは TPU VM 内で実行され、Cloud Monitoring または独自の Prometheus ベースのモニタリング パイプラインを介して指標にアクセスできます。詳細については、AI Telemetry Collector をご覧ください。

TPU 指標

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

次の表の指標タイプの文字列には、compute.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。ラベルをクエリする場合は、metric.labels 接頭辞を使用します(例: metric.labels.LABEL="VALUE")。

指標タイプリリース ステージ (リソース階層レベル)
表示名
種類、タイプ、単位
モニタリング対象リソース
説明
ラベル
instance/tpu/accelerator/duty_cycle ベータ版(プロジェクト)
アクセラレータのデューティ サイクル
GAUGEDOUBLE%
gce_instance
サンプル期間中にアクセラレータがアクティブに処理していた時間の割合。値の範囲は 0 ~ 100 です。
accelerator_id: アクセラレータのデバイス ID。
instance/tpu/accelerator/memory_bandwidth_utilization ベータ版(プロジェクト)
アクセラレータのメモリ帯域幅使用率
GAUGEDOUBLE%
gce_instance
使用されているアクセラレータ メモリ帯域幅の現在の割合。サンプル期間で使用されたメモリ帯域幅を、同じサンプル期間でサポートされる最大帯域幅で割って計算されます。
accelerator_id: アクセラレータのデバイス ID。
instance/tpu/accelerator/memory_total ベータ版(プロジェクト)
アクセラレータの合計メモリ
GAUGEINT64By
gce_instance
現在割り当てられているアクセラレータの合計メモリ量(バイト単位)。
accelerator_id: アクセラレータのデバイス ID。
instance/tpu/accelerator/memory_used ベータ版(プロジェクト)
使用されているアクセラレータ メモリ
GAUGEINT64By
gce_instance
現在使用されているアクセラレータの合計メモリ量(バイト単位)。
accelerator_id: アクセラレータのデバイス ID。
instance/tpu/accelerator/tensorcore_utilization ベータ版(プロジェクト)
アクセラレータ TensorCore 使用率
GAUGEDOUBLE%
gce_instance
使用されている TensorCore の現在の割合。サンプル期間に実行された Tensorcore オペレーションを、同じサンプル期間にサポートされている Tensorcore オペレーションの数で割って計算されます。
accelerator_id: アクセラレータのデバイス ID。
instance/tpu/active_chips ベータ版(プロジェクト)
アクティブ TPU チップ数
GAUGEINT641
gce_instance
現在アクティブに使用されている(つまり、アイドル状態ではない)チップの数。
accelerator_type: アクセラレータのタイプと世代。
reservation_id: 物理マシンの予約の ID。
provisioning_model: 関連付けられたプロビジョニング モデル。
protection_tier: 関連付けられた保護モデル。
block_id: VM をホストするクラスタ内のブロックの ID。
subblock_id: VM をホストするサブブロックの ID。
is_exr: (BOOL) チップが拡張予約の一部であるかどうかを示します。
instance/tpu/chip_state ベータ版(プロジェクト)
TPU チップの状態数
GAUGEINT641
gce_instance
正常、異常、不明などのさまざまな状態の TPU チップの数。
state: チップの状態。
accelerator_type: アクセラレータのタイプと世代。
block_id: VM をホストするクラスタ内のブロックの ID。
subblock_id: VM をホストするサブブロックの ID。
reservation_id: 物理マシンの予約の ID。
is_exr: (BOOL) チップが拡張予約の一部であるかどうかを示します。
instance/tpu/infra_health ベータ版(プロジェクト)
TPU インスタンスの健全性
GAUGEINT641
gce_instance
TPU インスタンスの全体的なヘルス ステータスを示します。指標ラベルは、主に TPU ハードウェアとシステムの健全性に焦点を当てて、パフォーマンスが低下した TPU インスタンスまたは異常な TPU インスタンスの特定の健全性ステータスと問題の原因を特定するのに役立ちます。この指標に反映されるまでに数分かかることがあります。60 秒ごとにサンプリングされます。サンプリング後、データは最長 420 秒間表示されません。
health_status: TPU インスタンスの全体的な健全性状態。有効な値: HEALTHY(想定どおりに動作)、UNHEALTHY(重大な問題が検出された)、DEGRADED(パフォーマンスに影響する問題)、UNKNOWN(ステータスを特定できない)。
unhealthy_category: 異常な VM ステータスの説明。このラベルは、指標の値が Unhealthy の場合にのみ入力されます。
machine_type: インスタンスのマシンタイプ(例: ct6e-standard-4t-tpu)。
machine_id: VM をホストする物理マシンの ID。
block_id: VM をホストするクラスタ内のブロックの ID。
cluster_id: VM をホストするクラスタの ID。
reservation_id: 物理マシンの予約の ID。
subblock_id: VM をホストするサブブロックの ID。
instance/tpu/runtime/uptime ベータ版(プロジェクト)
ランタイムの稼働時間
GAUGEINT64s
gce_instance
ML ジョブによるランタイム ライブラリ(libtpu.so)の初期化以降の ML ランタイムの稼働時間。この期間中、ランタイム ライブラリは ML ジョブで使用するために TPU デバイスをブロックします。
ml_framework_name: ML フレームワークの名前。
ml_framework_version: ML フレームワークのバージョン。
instance/tpu/scheduled_chips ベータ版(プロジェクト)
スケジュール設定された TPU チップの数
GAUGEINT641
gce_instance
メンテナンスのために無効になっていない、正常な VM に割り当てられているチップの現在の数。
accelerator_type: アクセラレータのタイプと世代。
reservation_id: 物理マシンの予約の ID。
provisioning_model: 関連付けられたプロビジョニング モデル。
protection_tier: 関連付けられた保護モデル。
block_id: VM をホストするクラスタ内のブロックの ID。
subblock_id: VM をホストするサブブロックの ID。
is_exr: (BOOL) チップが拡張予約の一部であるかどうかを示します。
instance/tpu/utilized_chips ベータ版(プロジェクト)
使用中の TPU チップ
GAUGEDOUBLE1
gce_instance
現在使用されている合計容量。アクティブなチップの有効数として表されます。これは、すべてのアクティブなチップの小数の使用率(0.0 ~ 1.0)の合計に相当します。
accelerator_type: アクセラレータのタイプと世代。
reservation_id: 物理マシンの予約の ID。
provisioning_model: 関連付けられたプロビジョニング モデル。
protection_tier: 関連付けられた保護モデル。
block_id: VM をホストするクラスタ内のブロックの ID。
subblock_id: VM をホストするサブブロックの ID。
is_exr: (BOOL) チップが拡張予約の一部であるかどうかを示します。
quota/tpus_per_tpu_family/exceeded アルファ版(プロジェクト)
TPU ファミリーあたりの TPU 数。割り当て超過エラー
DELTAINT641
compute.googleapis.com/Location
割り当て指標 compute.googleapis.com/tpus_per_tpu_family の上限超過の試行回数。サンプリング後、データは最長 150 秒間表示されません。
limit_name: 上限名。
tpu_family: TPU ファミリーのカスタム ディメンション。
quota/tpus_per_tpu_family/limit アルファ版(プロジェクト)
TPU ファミリーあたりの TPU 数。割り当て上限
GAUGEINT641
compute.googleapis.com/Location
割り当て指標 compute.googleapis.com/tpus_per_tpu_family の現在の上限。60 秒ごとにサンプリングされます。サンプリング後、データは最長 150 秒間表示されません。
limit_name: 上限名。
tpu_family: TPU ファミリーのカスタム ディメンション。
quota/tpus_per_tpu_family/usage アルファ版(プロジェクト)
TPU ファミリーあたりの TPU 数。割り当て使用量
GAUGEINT641
compute.googleapis.com/Location
割り当て指標 compute.googleapis.com/tpus_per_tpu_family の現在の使用量。サンプリング後、データは最長 150 秒間表示されません。
limit_name: 上限名。
tpu_family: TPU ファミリーのカスタム ディメンション。
tpu/multislice/accelerator/device_to_host_transfer_latencies ベータ版(プロジェクト)
デバイスからホストへの転送レイテンシ
CUMULATIVEDISTRIBUTIONus
gce_instance
データチャンクごとのデバイスからホストへの転送レイテンシの累積分布。レイテンシは、ホストに転送するデータのリクエストが発行されたときに始まり、データ転送が完了したという確認応答を受信したときに終わります。
buffer_size: バッファサイズ。
tpu/multislice/accelerator/host_to_device_transfer_latencies ベータ版(プロジェクト)
ホストからデバイスへの転送レイテンシ
CUMULATIVEDISTRIBUTIONus
gce_instance
マルチスライス トラフィックのデータチャンクごとの、ホストからデバイスへの転送レイテンシの累積分布。レイテンシは、デバイスに転送するデータのリクエストが発行されたときに始まり、データの転送が完了したという確認応答を受信したときに終わります。
buffer_size: バッファサイズ。
tpu/multislice/network/collective_end_to_end_latencies ベータ版(プロジェクト)
集合エンドツーエンド レイテンシ
CUMULATIVEDISTRIBUTIONus
gce_instance
マルチスライス トラフィックのエンドツーエンドの全体的なレイテンシの累積分布。レイテンシは、グループのリクエストが発行されると開始し、データの転送が完了したことを示す確認応答を受信すると終了します。
input_size: コレクティブ オペレーションの入力サイズ。
collective_type: コレクティブ オペレーションのタイプ。
tpu/multislice/network/dcn_transfer_latencies ベータ版(プロジェクト)
DCN 転送レイテンシ
CUMULATIVEDISTRIBUTIONus
gce_instance
マルチスライス トラフィックのネットワーク転送レイテンシの累積分布。レイテンシは、DCN 経由で転送されるデータのリクエストが発行されたときに開始され、データの転送が完了したことを示す確認応答が受信されたときに終了します。
buffer_size: バッファサイズ。
type: 型。
tpu/multislice/network/grpc_client_call_latencies ベータ版(プロジェクト)
gRPC クライアント呼び出しのレイテンシ
CUMULATIVEDISTRIBUTIONus
gce_instance
呼び出し元の観点から gRPC ライブラリが RPC を完了するのに要したネットワーク転送レイテンシの累積分布。
buffer_size: バッファサイズ。
tpu/multislice/network/grpc_server_call_latencies ベータ版(プロジェクト)
gRPC サーバー呼び出しのレイテンシ
CUMULATIVEDISTRIBUTIONus
gce_instance
トランスポートの観点から gRPC サーバーが RPC を完了するまでのネットワーク転送レイテンシの累積分布。
buffer_size: バッファサイズ。
tpu/multislice/network/grpc_tcp_delivery_rates ベータ版(プロジェクト)
gRPC TCP 配信率
CUMULATIVEDISTRIBUTIONMb/s
gce_instance
TCP 接続のデータ転送速度の累積分布。各サンプルは、最後の TCP ACK 間隔における特定の TCP 接続の最新の平均データ転送レートです。データ転送率のサンプルは、Linux TCP カーネルから 20 秒ごとに取得されるため、すべての TCP 接続で 60 秒間隔あたり約 3 つのサンプルが作成されることが予想されます。
tpu/multislice/network/grpc_tcp_min_round_trip_times ベータ版(プロジェクト)
gRPC TCP の最小ラウンド トリップ時間
CUMULATIVEDISTRIBUTIONus
gce_instance
TCP 接続あたりの最小ネットワーク転送レイテンシの累積分布。
tpu/multislice/network/grpc_tcp_packets_retransmitted_count ベータ版(プロジェクト)
gRPC TCP パケットの再送信数
CUMULATIVEINT641
gce_instance
再送信されたパケットの合計数。
tpu/multislice/network/grpc_tcp_packets_sent_count ベータ版(プロジェクト)
gRPC TCP パケットの送信数
CUMULATIVEINT641
gce_instance
TCP が送信するパケットの合計数。
tpu/slice/capacity/available_chips ベータ版(プロジェクト)
使用可能な TPU チップ数
GAUGEINT641
compute.googleapis.com/AcceleratorSlice
現在アクティブに使用可能な拡張予約の TPU チップの数。60 秒ごとにサンプリングされます。サンプリング後、データは最長 360 秒間表示されません。
accelerator_type: アクセラレータのタイプと世代。
reservation_id: 物理マシンの予約の ID。
block_id: スライスに関連付けられたブロック ID。
subblock_id: スライスに関連付けられているサブブロック ID。
provisioning_model: 関連付けられたプロビジョニング モデル。
protection_tier: 関連付けられた保護モデル。
tpu/slice/capacity/committed_chips ベータ版(プロジェクト)
購入した TPU チップの数
GAUGEINT641
compute.googleapis.com/AcceleratorSlice
拡張予約で購入した TPU チップの現在の数。60 秒ごとにサンプリングされます。サンプリング後、データは最長 360 秒間表示されません。
accelerator_type: アクセラレータのタイプと世代。
reservation_id: 物理マシンの予約の ID。
block_id: スライスに関連付けられたブロック ID。
subblock_id: スライスに関連付けられているサブブロック ID。
provisioning_model: 関連付けられたプロビジョニング モデル。
protection_tier: 関連付けられた保護モデル。

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

AI テレメトリー コレクタ

AI Telemetry Collector は、Compute Engine API を使用して作成された TPU の compute.googleapis.com 名前空間で TPU 指標を収集して公開します。これらの指標は組み込みのシステム指標であり、健全性とパフォーマンスを可視化します。

AI Telemetry Collector アーキテクチャは、軽量で特殊な OpenTelemetry(OTEL)Collector として設計されています。データをキャプチャするために、次の 2 つのプライマリ レシーバを使用します。

  • TPU ランタイム レシーバ: ML ワークロードがアクティブなときに、ランタイムとワークロードの指標(デューティ サイクルやメモリ使用量など)を TPU ランタイムから直接スクレイピングします。
  • TPU ホスト レシーバ: ワークロードが実行されているかどうかにかかわらず、TensorCore 使用率やメモリ帯域幅使用率などのハードウェア使用率指標をデバイスから直接取得します。

AI テレメトリー コレクタは、プロセッサを使用して必要なリソースタグ(project_idinstance_idzone など)を自動的に適用し、テレメトリーを Cloud Monitoring に直接安全にエクスポートします。

AI テレメトリー コレクタは、Google の TPU 最適化 Ubuntu LTS イメージにプリインストールされており、VM の起動時に自動的に実行されます。この設定を使用するには、TPU VM インスタンスまたはインスタンス テンプレートを作成するときに、Google の公式アクセラレータ イメージ プロジェクトとファミリーを指定します。VM が起動すると、AI テレメトリー コレクタは指標を Cloud Monitoring ダッシュボードに自動的に送信します。

カスタム オペレーティング システム イメージをビルドする場合は、ai-telemetry-collector Docker イメージをインストールして実行した後、AI テレメトリー コレクタを使用できます。詳細については、カスタム OS イメージを使用するをご覧ください。

構成

AI テレメトリー コレクタは、指標を Cloud Monitoring ダッシュボードに自動的に送信するため、追加の構成手順は必要ありません。ただし、Snap パッケージまたは Docker イメージを構成して、外部のエクスポート先を追加したり、指標収集間隔を変更したり、デバッグ オプションを含めたりできます。

デフォルトの構成を新しい構成ファイルに置き換えるか、既存のデフォルトの構成に追加の構成ファイルを追加できます。構成を追加すると、まだ存在しないキーは追加され、すでに存在するキーは上書きされます。ただし、配列とリストは加算できないため、新しいリストには既存の値と新しい値の両方を含める必要があります。

次の YAML ファイルは、オープンソースのシステム モニタリングとアラート ツールキットである Prometheus に指標を送信するように AI Telemetry Collector を構成します。また、デバッグ オプションも有効になり、コンソール内に指標が出力されます。

exporters:
  prometheus:
    endpoint: 0.0.0.0:8889

service:
  pipelines:
    metrics:
      exporters:
      -   prometheus # For more: https://prometheus.io/docs/introduction/overview/
      -   googlecloud # If you do not include this, you'll lose Google Cloud Monitoring
      -   debug # print metrics within the console

デフォルトの OS

Google の TPU 最適化 Ubuntu LTS イメージを使用している場合は、次の Snap コマンドを実行して、新しい構成ファイルを既存の構成に追加します。

sudo snap set \
  ai-telemetry-collector \
  extra-flags="--config /home/username/additional-config.yaml"

既存の構成を上書きして置き換える場合は、extra-flags ではなく config-path フラグを使用します。

sudo snap set \
  ai-telemetry-collector \
  config-path="/home/username/new-config.yaml"

snap set コマンドは、AI テレメトリー コレクタの自動再起動をトリガーします。コレクタが再起動し、構成が正常に適用されたことを確認するには、次のコマンドを使用してログを表示します。

sudo snap logs -f ai-telemetry-collector

カスタム OS

カスタム OS を使用している場合は、次の Docker コマンドを実行して、新しい構成ファイルを既存の構成に追加します。

# First apply the default configs via `--config=/etc/ai-telemetry-collector/config.yaml`
# Then apply your additional config by volume mount.

docker run --privileged --net=host                                                                   \
  -v <path>/additional-config.yaml:/etc/ai-telemetry-collector/additional-config.yaml \
  ai-telemetry-collector:latest                                                       \
  --config=/etc/ai-telemetry-collector/config.yaml                                    \
  --config=/etc/ai-telemetry-collector/additional-config.yaml

既存の構成を上書きして置き換える場合は、次の Docker コマンドを使用します。

# Mount a volume (your config file) to `/etc/ai-telemetry-collector/config.yaml`
# The binary automatically picks up this file.

docker run --privileged --net=host                                               \
  -v <path>/my-config.yaml:/etc/ai-telemetry-collector/config.yaml   \
  ai-telemetry-collector:latest

監査ログ

Google Cloud サービスは、 Google Cloud リソース内の管理アクティビティとアクセス アクティビティを記録する監査ログを生成します。詳細については、 Compute Engine の監査ロギングをご覧ください。