TPU VM をモニタリングする

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

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

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

TPU 指標にアクセスする

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

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

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

TPU 指標

Google Cloud Cloud TPU の 指標は、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
メンテナンスのために DISABLED ではなく、HEALTHY である 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 接続の最新の平均データ転送速度です。データ転送速度のサンプルは 20 秒ごとに Linux TCP カーネルから取得されるため、すべての 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 テレメトリー コレクタは、Compute Engine API を使用して作成された TPU の compute.googleapis.com 名前空間で TPU 指標を収集して公開します。 これらの指標は組み込みのシステム指標であり、健全性とパフォーマンスを可視化できます。

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

  • TPU ランタイム レシーバ: 機械学習ワークロードがアクティブな場合、ランタイム指標とワークロード指標(デューティ サイクルやメモリ使用量など)を 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 ファイルは、AI テレメトリー コレクタを構成して、オープンソースのシステム モニタリングおよび アラート ツールキットである Prometheusに指標を送信します。また、コンソール内に指標を出力するデバッグ オプションも有効にします。

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 の監査ロギングをご覧ください。