gke-tpu-metrics-monitoring について
GKE TPU ワークロード向けのモニタリングガイドです。GKE システムメトリクスでアクセラレータ、ノード、ノードプールを調べ、中断や性能問題を分析します。
主な機能
- 01TPU ランタイムメトリクス設定の確認
- 02アクセラレータ使用率とメモリの監視
- 03ノードとノードプール状態の照会
- 04ノード中断と原因の分析
- 05復旧・中断間隔指標の算出
活用シーン
- 01TPU ワークロード中断の調査
- 02ノードの Ready 状態の確認
- 03マルチホスト TPU ノードプール可用性の監視
- 04アクセラレータの復旧と中断状況の評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ google/ skills --skill gke-tpu-metrics-monitoringインストール後、Claude Code で/gke-tpu-metrics-monitoringを入力して読み込まれたか確認します。
同梱ファイルreferences/failure_signatures.mdscripts/validate_queries.sh
詳細
GKE TPU メトリクスのモニタリングガイド
このスキルを使用すると、GKE システムメトリクスを使用して、GKE の TPU ワークロード、ノード、ノードプールをモニタリングできます。ワークロードの中断やパフォーマンスの問題が、基盤インフラストラクチャに起因するかどうかの診断に役立ちます。
ステップ 0:必須コンテキスト
利用可能な GKE ツールや Cloud ツールを使用して必要なコンテキスト(クラスターの詳細やノードプール名など)を個別に収集するか、指定された {variable} プレースホルダーを使用してください。
{project_id}:GCP プロジェクト ID。{cluster_name}:GKE クラスター名。{location}:GKE クラスターのロケーション(リージョンまたはゾーン)。{node_name}:(任意)特定の GKE ノード名。{node_pool_name}:(任意)GKE ノードプール名。
診断手順
ステップ 1:TPU ランタイムメトリクスの構成を確認する[低リスク][自動]
ランタイムメトリクスを分析する前に、ワークロードがメトリクスをエクスポートするように構成されていることを確認してください。
- アクション:TPU ワークロードの Pod 仕様に以下が含まれていることを確認します。
containerPort: 8431- JAX バージョン
0.4.14以降(JAX を使用する場合)。 - GKE バージョンが
1.27.4-gke.900以降。 - クラスターで GKE システムメトリクスが有効になっていること。
ステップ 2:TPU ランタイムメトリクスをモニタリングする[低リスク][自動]
正しく構成されている場合、Cloud Monitoring で以下のメトリクスを利用できます(モニタリング対象リソースは k8s_node と k8s_container です)。
- コンテナメトリクス:
kubernetes.io/container/accelerator/duty_cycle:過去のサンプリング期間(60 秒)において、TPU チップ上の TensorCore が処理を実行していた時間の割合。kubernetes.io/container/accelerator/memory_used:割り当てられたアクセラレータメモリの量(バイト単位)。kubernetes.io/container/accelerator/memory_total:アクセラレータメモリの合計量(バイト単位)。
- ノードメトリクス:
kubernetes.io/node/accelerator/duty_cyclekubernetes.io/node/accelerator/memory_usedkubernetes.io/node/accelerator/memory_total
ステップ 3:ノードのステータス条件を確認する[低リスク][自動]
GKE ノードのステータス条件をクエリします(GKE バージョン 1.32.1-gke.1357001 以降)。
- PromQL クエリ(特定のノードが Ready かどうかを確認):
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", node_name="{node_name}", condition="Ready", status="True"} - PromQL クエリ(Ready 以外の条件が True であるノードを一覧表示):
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition!="Ready", status="True"} - PromQL クエリ(Ready ではないノードを一覧表示):
kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition="Ready", status="False"} - PromQL クエリ(フリート全体のノードステータス):
avg by (condition,status)(avg_over_time(kubernetes_io:node_status_condition{monitored_resource="k8s_node"}[5m]))
ステップ 4:ノードプールのステータスを確認する[低リスク][自動]
マルチホスト TPU ノードプールのステータスをクエリします。
- PromQL クエリ(特定のノードプールが Running かどうかを確認):
kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}", node_pool_name="{node_pool_name}", status="Running"} - PromQL クエリ(ステータス別にグループ化したノードプールをモニタリング):
考えられるステータス:count by (status)(count_over_time(kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool"}[5m]))Provisioning、Running、Error、Reconciling、Stopping。
ステップ 5:ノードプールの可用性を確認する[低リスク][自動]
マルチホスト TPU ノードプール内のすべてのノードが利用可能かどうかをクエリします。
- PromQL クエリ(時間の経過に伴う可用性を確認):
値:avg by (node_pool_name)(avg_over_time(kubernetes_io:node_pool_multi_host_available{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}"}[5m]))1(True、すべてのノードが利用可能)または0(False、一部のノードが利用不可)。
ステップ 6:ノードの中断を分析する[低リスク][自動]
GKE ノードの中断回数をクエリします。
- PromQL クエリ(中断と原因の内訳):
中断タイプ:sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node"}[5m]))TerminationEvent、MaintenanceEvent、PreemptionEvent。 中断理由:HostError、Eviction、AutoRepair。 - PromQL クエリ(ホストメンテナンスイベントでフィルタリング):
sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node", interruption_reason="HW/SW Maintenance"}[5m])) - PromQL クエリ(ノードプールごとに集計した中断回数):
sum by (node_pool_name,interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_pool_interruption_count{monitored_resource="k8s_node_pool", interruption_reason="HW/SW Maintenance", node_pool_name="{node_pool_name}"}[5m]))
ステップ 7:復旧と中断のメトリクスを計算する[低リスク][自動]
過去 7 日間の平均復旧時間(MTTR)と平均中断間隔(MTBI)を計算します。
- PromQL クエリ(MTTR - 平均復旧時間):
sum(sum_over_time(kubernetes_io:node_pool_accelerator_times_to_recover_sum{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}"}[7d])) / sum(sum_over_time(kubernetes_io:node_pool_accelerator_times_to_recover_count{monitored_resource="k8s_node_pool",cluster_name="{cluster_name}"}[7d])) - PromQL クエリ(MTBI - 平均中断間隔):
sum(count_over_time(kubernetes_io:node_memory_total_bytes{monitored_resource="k8s_node", node_name=~"gke-tpu.*|gk3-tpu.*", cluster_name="{cluster_name}"}[7d])) / sum(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node", node_name=~"gke-tpu.*|gk3-tpu.*", cluster_name="{cluster_name}"}[7d]))
ステップ 8:TPU ホストのメトリクスを監視する[低リスク][自動]
GKE バージョン 1.28.1-gke.1066000 以降では、TPU ホストのパフォーマンスを監視します。
- コンテナのメトリクス:
kubernetes.io/container/accelerator/tensorcore_utilization:現在の TensorCore 使用率。kubernetes.io/container/accelerator/memory_bandwidth_utilization:アクセラレータのメモリ帯域幅が現在使用されている割合。
- ノードのメトリクス:
kubernetes.io/node/accelerator/tensorcore_utilizationkubernetes.io/node/accelerator/memory_bandwidth_utilization