news 2026/9/14 13:12:13

GKE TPU 指标监控与故障排查指南:基于 GKE System Metrics 与 PromQL 的 TPU 工作负载观测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GKE TPU 指标监控与故障排查指南:基于 GKE System Metrics 与 PromQL 的 TPU 工作负载观测

GKE TPU 指标监控与故障排查指南:基于 GKE System Metrics 与 PromQL 的 TPU 工作负载观测

【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills

导读

本文基于开源仓库 gke-ai-troubleshooting-tpu-metrics-monitoring 技能文档,系统讲解如何借助 GKE System Metrics(GKE 系统指标)与 PromQL 查询,对 GKE 上的 TPU 工作负载、节点与节点池进行持续监控与故障排查。文章覆盖从「验证 TPU 运行时指标配置」到「计算 MTTR/MTBI 可靠性指标」的完整 8 步诊断流程,读者学完后将能够:确认集群是否具备 TPU 指标导出能力、识别 TensorCore 利用率与 TPU 内存水位、判定节点与多主机节点池的健康状态、按类型与原因分析节点中断事件,并基于指标签名快速定位基础设施层面的根因。

前置条件与适用边界

本技能适用于 GKE 上 TPU(Tensor Processing Unit)工作负载的指标驱动监控与排障,典型场景包括:

  • 监控 TensorCore 占空比(duty cycle)与 TPU 内存使用情况;
  • 检查节点就绪(Ready)状态与多主机 TPU 节点池可用性;
  • 分析主机维护(maintenance)或抢占(preemption)造成的中断;
  • 计算 MTTR(Mean Time to Recovery)与 MTBI(Mean Time Between Interruptions)等可靠性指标。

不适用场景:通用非 TPU 的 GKE 工作负载监控(应使用 gke-basics 等基础技能)、以及非指标驱动的 TPU 调试(如日志类排障可参考仓库中 gke-ai-troubleshooting-tpu-vbar-oom 等配套技能)。

必需上下文变量

在开始任何查询前,需要先独立收集(可通过现有 GKE 与 Cloud 工具获取)以下上下文,或直接使用占位符替换:

变量含义是否必填
{project_id}GCP 项目 ID必填
{cluster_name}GKE 集群名称必填
{location}GKE 集群所在地域或可用区必填
{node_name}具体 GKE 节点名称可选
{node_pool_name}GKE 节点池名称可选

Step 1:验证 TPU 运行时指标配置

在分析运行时指标之前,必须确认工作负载已正确配置以导出这些指标,从而保证集群与容器环境具备自动抓取能力,并可观测到加速器健康状况。需要核对的先决条件如下:

  • 容器端口:TPU 容器必须暴露containerPort: 8431(Prometheus 指标抓取所必需);
  • JAX 版本:若使用 JAX,版本需为0.4.14或更高(更早版本不会导出运行时指标);
  • GKE 版本:集群版本需为1.27.4-gke.900或更高(TPU 运行时指标支持的前提);
  • GKE System Metrics:集群需已启用 GKE 系统指标(供 Cloud Monitoring 摄取)。

这些版本门槛直接决定了后续查询能否取到数据,属于「先配置、后观测」的硬性前置条件。

Step 2:监控 TPU 运行时指标

配置正确后,以下指标即可在 Cloud Monitoring 中查询到,监控资源(monitored resources)为k8s_nodek8s_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_cycle节点维度 TensorCore 占空比
kubernetes.io/node/accelerator/memory_used节点维度已用加速器内存
kubernetes.io/node/accelerator/memory_total节点维度加速器总内存

低利用率签名解读

结合仓库中 failure_signatures.md 的故障签名定义:当duty_cycletensorcore_utilization在训练活跃期间长期低于0.2(20%),说明 TPU 严重利用不足,大概率是数据瓶颈或 batch size 过小所致,应从数据管线与训练配置层面排查,而非基础设施。

Step 3:检查节点状态条件

对于 GKE 版本1.32.1-gke.1357001或更高,可通过kubernetes_io:node_status_condition系列查询节点状态条件。

查询特定节点是否 Ready

kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", node_name="{node_name}", condition="Ready", status="True"}

列出处于非 Ready 条件且状态为 True 的节点

kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition!="Ready", status="True"}

列出 NOT Ready 的节点

kubernetes_io:node_status_condition{monitored_resource="k8s_node", cluster_name="{cluster_name}", condition="Ready", status="False"}

集群全域(Fleet-wide)节点状态概览

avg by (condition,status)(avg_over_time(kubernetes_io:node_status_condition{monitored_resource="k8s_node"}[5m]))

节点未就绪签名

根据 failure_signatures.md:

  • 指标kubernetes.io/node/status_condition
  • 签名condition="Ready"status="False"(或status="Unknown"
  • 含义:承载 TPU 的 GKE 节点不健康,该节点上的工作负载将被打断。

Step 4:检查节点池状态

针对多主机(multi-host)TPU 节点池,查询kubernetes_io:node_pool_status系列指标。

验证指定节点池是否 Running

kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool", cluster_name="{cluster_name}", node_pool_name="{node_pool_name}", status="Running"}

按状态分组的节点池监控

count by (status)(count_over_time(kubernetes_io:node_pool_status{monitored_resource="k8s_node_pool"}[5m]))

可能的节点池状态:ProvisioningRunningErrorReconcilingStopping

节点池错误签名

根据 failure_signatures.md:

  • 指标kubernetes.io/node_pool/status
  • 签名status="Error"
  • 含义:多主机 TPU 节点池遇到错误(例如置备失败)。

Step 5:检查节点池可用性

查询多主机 TPU 节点池中所有节点是否可用,使用kubernetes_io:node_pool_multi_host_available指标:

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,部分节点不可用)。多主机 TPU 通常依赖拓扑互联,任意一个节点不可用都可能拖垮整个切片训练,因此该指标是判断训练是否中断的关键信号。

Step 6:分析节点中断

通过kubernetes_io:node_interruption_countkubernetes_io:node_pool_interruption_count查询 GKE 节点的中断计数。

中断类型与原因明细

sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node"}[5m]))
  • 中断类型(Interruption Types)TerminationEvent(终止事件)、MaintenanceEvent(维护事件)、PreemptionEvent(抢占事件)
  • 中断原因(Interruption Reasons)HostError(主机错误)、Eviction(驱逐)、AutoRepair(自动修复)

仅过滤主机维护(Host Maintenance)事件

sum by (interruption_type,interruption_reason)(sum_over_time(kubernetes_io:node_interruption_count{monitored_resource="k8s_node", interruption_reason="HW/SW Maintenance"}[5m]))

按节点池聚合的中断计数

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]))

抢占与主机错误签名

结合 failure_signatures.md 对中断结果进行判读:

  • 节点抢占签名interruption_type="PreemptionEvent"—— 节点被抢占(常见于 Spot VM),工作负载需要重新调度;
  • 主机错误签名interruption_type="TerminationEvent"interruption_reason="HostError"—— 底层物理主机发生硬件错误,GKE 应触发 AutoRepair。

若查询结果中interruption_reason="HW/SW Maintenance"的计数大于 0,说明底层 Compute Engine VM 因计划内主机维护被中断。更详细的维护事件排查流程可参考仓库配套技能 gke-ai-troubleshooting-handle-disruption-gpu-tpu。

Step 7:计算恢复与中断可靠性指标

基于最近 7 天的数据,计算 MTTR(平均恢复时间)与 MTBI(平均中断间隔)。

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]))

该公式用「恢复时间总和 ÷ 恢复事件次数」计算节点池加速器的平均恢复时长。

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]))

该公式用「观测时间窗口内的采样次数 ÷ 中断次数」估算平均中断间隔,其中node_name=~"gke-tpu.*|gk3-tpu.*"正则用于限定 TPU 节点命名前缀(gke-tpugk3-tpu),避免把非 TPU 节点计入分母。

Step 8:监控 TPU 主机指标

对于 GKE 版本1.28.1-gke.1066000或更高,可进一步监控 TPU 主机(host)的性能表现。

容器级指标

指标说明
kubernetes.io/container/accelerator/tensorcore_utilization当前 TensorCore 利用率百分比
kubernetes.io/container/accelerator/memory_bandwidth_utilization当前加速器内存带宽利用率百分比

节点级指标

指标说明
kubernetes.io/node/accelerator/tensorcore_utilization节点维度 TensorCore 利用率
kubernetes.io/node/accelerator/memory_bandwidth_utilization节点维度内存带宽利用率

该组指标与 Step 2 的duty_cycle一起,构成判断「TPU 是否真正跑满」的双重视角:duty_cycle反映时间维度上的活跃占比,tensorcore_utilization反映瞬时算力占用,二者结合可区分「计算单元闲置」与「算力未打满」两种瓶颈形态。

配套脚本与验证方式

本技能在仓库中附带 validate_queries.sh 校验脚本。运行方式为:

export PROJECT_ID="{project_id}" bash skills/cloud/gke-ai-troubleshooting-tpu-metrics-monitoring/scripts/validate_queries.sh

脚本逻辑说明:

  • 要求显式设置PROJECT_ID环境变量,未设置时直接报错退出(避免误用gcloud默认项目);
  • 由于本技能定位为「纯指标(PromQL)驱动的观测」,不包含 Cloud Logging LQL 查询,脚本会打印No Cloud Logging LQL queries defined in this skill to validate.并跳过日志查询校验;
  • 脚本以set -e严格模式运行,任何非预期失败都会中断执行,便于在 CI 中早期发现问题。

对比参考:仓库中 gke-ai-troubleshooting-jobset-interruption 的校验脚本则通过curl调用 Cloud Monitoring Prometheus API 对 PromQL 做编译期 dry-run,说明此类技能普遍遵循「查询模板 + 脚本校验」的可维护模式。

典型排查路径总结

综合上述 8 个步骤,一套完整的基础设施根因排查路径如下:

  1. 确认数据通路:核对containerPort: 8431、JAX ≥0.4.14、GKE ≥1.27.4-gke.900、GKE System Metrics 已启用(Step 1);
  2. 判断是「性能问题」还是「可用性问题」:先用duty_cycle/tensorcore_utilization判断 TPU 是否被有效利用(Step 2、Step 8),低于 20% 优先查数据管线;
  3. 逐层定位中断来源:节点层查node_status_condition(Step 3)→ 节点池层查node_pool_statusnode_pool_multi_host_available(Step 4、Step 5)→ 事件层查node_interruption_count按类型/原因细分(Step 6);
  4. 量化影响并持续观测:用 MTTR / MTBI 评估恢复速度与中断频率(Step 7),为容量规划与调度策略(如 Reserved/On-Demand、Compact Placement)提供数据依据。

整个流程完全基于 GKE System Metrics 与 PromQL,无需在集群中部署额外采集器,即可形成从「单点故障确认」到「长期可靠性量化」的完整闭环。

【免费下载链接】skillsAgent Skills for Google products and technologies项目地址: https://gitcode.com/GitHub_Trending/skills29/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 13:09:58

光伏MPPT混合算法优化与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/14 13:06:00

Keep 开源告警管理平台:驯服告警风暴的实用指南

Keep 开源告警管理平台:驯服告警风暴的实用指南 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep Keep 是一款开源 AIOps 告警管理平台,把散落在 Prometheus…

作者头像 李华
网站建设 2026/9/14 13:04:18

.NET 10构建开源文档管理系统:架构设计与实现

1. 项目概述:为什么我们需要一个基于.NET 10的文档管理系统? 在数字化办公时代,文档管理一直是企业和个人面临的痛点。传统文件服务器存在版本混乱、协作困难的问题,而商业文档管理系统往往价格昂贵且架构封闭。这正是我决定用.NE…

作者头像 李华
网站建设 2026/9/14 13:04:12

Scrapy采集京东商品:解析、渲染与并发调优全攻略

简介:基于Scrapy框架的京东商品数据爬虫项目,代码精简、文档齐全,适合爬虫入门者、高校学生用于课程设计、毕业设计或快速搭建电商数据采集原型。项目经过完整测试并获导师认可,可直接运行或二次开发。资源包含27个文件&#xff0…

作者头像 李华
网站建设 2026/9/14 13:04:08

FMCW SAR成像为何必须用range-Doppler处理

简介:本资源是一份面向雷达信号处理初学者与SAR成像研究者的FMCW SAR Range-Doppler成像实践代码包,聚焦于合成孔径雷达中连续波调频体制下的距离-多普勒域图像重建原理与实现。资源核心为一个MATLAB脚本(range_doppler.m)&#x…

作者头像 李华