使用机器学习工作负载调试 Wiki 排查问题

机器学习工作负载调试 Wiki 是一个 GitHub 代码库,AI 编码智能体可使用该代码库对在 Google Kubernetes Engine (GKE) 上运行的 TPU 工作负载进行问题排查,这些工作负载使用 JAX、XLA 或 Pathways。该 Wiki 使 AI 智能体能够收集工作负载日志、将错误签名与已知故障模式进行匹配、运行诊断工作流,并根据日志报告根本原因。这为代理提供了诊断工作负载崩溃、挂起、重启或抢占所需的信息。

该 Wiki 包含两种形式的参考资料:

  • 知识页面:Markdown 页面,用于描述概念、故障症状及其日志签名、问题排查手册和诊断工具。
  • 可执行过程:JSON 操作和工作流。操作是单个诊断步骤,例如日志查询或 kubectl 命令。工作流会运行一系列操作来诊断特定的故障模式。

运行 /troubleshoot 命令时,一个由专业子代理组成的团队会分类工作负载日志,选择并运行与故障匹配的工作流,并根据主要日志检查每个结论。然后,智能体会报告根本原因、从日志中引用的罪魁祸首主机,以及汇总每次中断的故障表。

密钥文件

下表列出了 Debug ML Workloads Wiki 中的关键文件和目录:

路径 说明
_wiki/TUTORIAL.md 详细介绍诊断期间发生的情况以及如何评估结果,包括一个实际示例。
_wiki/INDEX.md Wiki 中每个页面、操作和工作流的目录,以及每个页面、操作和工作流的单行摘要。
_wiki/concepts/ 系统架构和组件生命周期概念,例如 libtpu 程序生命周期、有效吞吐量和工作负载进度监控。
_wiki/entities/ 硬件、软件和平台实体,例如 TPU、GPU、JAX、XLA 和 Pathways。
_wiki/symptoms/ 故障模式、其日志签名以及如何验证每种故障模式。
_wiki/playbooks/ 问题排查策略、决策树流程图和常见陷阱。
_wiki/tools/ 诊断工具、脚本和命令行参考指南。
_wiki/workflows/ JSON 格式的诊断程序。每个工作流都会运行一系列操作来诊断特定的故障模式。
_wiki/actions/ JSON 格式的各个诊断步骤,例如日志查询和 kubectl 命令。
_wiki/SCHEMA.md Wiki 页面必须遵循的页面类型、frontmatter 要求和分类标记。
_agents/QUICKSTART.md Antigravity 用户的设置和派送详情。
CLAUDE.md Claude Code 用户的工作区布局、命令行工具和子代理角色。

关键命令

下表列出了您可以使用 wiki 运行的命令:

命令 用法 说明
/troubleshoot /troubleshoot WORKLOAD_ID,其中 WORKLOAD_ID 是工作负载或 JobSet 的名称。 使用 Cloud Logging、GKE 集群事件、kubelet 日志和节点日志诊断工作负载。路由器、从业者、审核者和顾问子代理会运行诊断并报告根本原因、日志中引用的罪魁祸首主机以及故障表。
/dashboard /dashboard [TARGET],其中 TARGET 是可选的项目 ID、集群名称或工作负载 ID。如果您省略 TARGET,信息中心会显示 Google Cloud CLI 配置中设置的项目中的所有 GKE 集群。 启动 GKE 容量和分类信息中心,这是一个位于 http://localhost:8080 的本地 Web 应用。该命令会扫描集群以查找目标,然后返回一个指向已过滤到目标的监控信息中心视图的链接。
/handoff

/handoff WORKLOAD_ID [CASE_ID] [--bucket=BUCKET] [--findings=PATH] [--no-watch]

除 WORKLOAD_ID 之外的所有参数都是可选的:

  • CASE_ID:您的支持请求编号。
  • --bucket=BUCKET:存储桶的名称。如果您省略此标志,代理会要求提供存储桶。
  • --findings=PATH:现有发现结果文件的路径。如果您设置此标志,该命令不会运行 /troubleshoot。
  • --no-watch:关闭存储桶监控。
将 /troubleshoot 发现结果打包到 Cloud Storage 存储桶中,以便与 Cloud Customer Care 共享,然后监控存储桶是否有更新。如需稍后检查更新,请运行 /handoff --watch STORAGE_KEY,其中 STORAGE_KEY 是存储桶中切换文件夹的名称。

前提条件

在设置 Wiki 之前,请确定要诊断的工作负载,并记下以下详细信息:

  • 工作负载或 JobSet 的名称。
  • 运行工作负载的 Google Cloud 项目的 ID。
  • 要诊断的运行的大致时间范围。

安装次数

该 Wiki 需要安装以下内容:

  1. 安装 Python 3,包括 venv 模块。该 Wiki 需要 Python 3.9 或更高版本。在 Debian 和 Ubuntu 上,venv 模块位于 python3-venv 软件包中。
  2. 安装并初始化 Google Cloud CLI。
  3. 安装 kubectl 和 gke-gcloud-auth-plugin。
  4. 安装以下任一 AI 编码智能体。该 Wiki 包含以下两者的配置文件:

所需的角色

代理会使用您的 Google Cloud 凭据运行诊断命令。如需诊断工作负载,请向运行工作负载的项目授予以下 IAM 角色:

  • 日志查看器 (roles/logging.viewer):允许代理读取工作负载容器、节点和审核日志。
  • Kubernetes Engine Viewer (roles/container.viewer):允许代理检查运行工作负载的集群、节点和 Pod。
  • Compute Viewer (roles/compute.viewer):允许代理检查支持集群节点的 Compute Engine 虚拟机,包括虚拟机维护和终止事件。
  • Monitoring Viewer (roles/monitoring.viewer):允许代理读取 Cloud Monitoring 指标,以便工作流检查工作负载和节点指标。

如需运行 /handoff 命令,您还需要对与 Cloud Customer Care 共享的 Cloud Storage 存储桶拥有 Storage Object Admin (roles/storage.objectAdmin) 角色。此角色允许代理将发现结果上传到存储桶并监控其更新。

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

设置 Wiki

  1. 克隆该代码库并前往其根目录:

    git clone https://github.com/google/ml-workload-debugging-wiki.git
    cd ./ml-workload-debugging-wiki
    

    该 Wiki 使用相对于代码库根目录的路径,因此请从此目录运行命令并启动智能体。

  2. 创建并激活 Python 虚拟环境,然后安装 Wiki 的依赖项:

    python3 -m venv _wiki/.venv
    source _wiki/.venv/bin/activate
    pip install -r _wiki/requirements.txt
    
  3. 为您的用户账号创建本地应用默认凭证 (ADC)。该 Wiki 的 Python 工具使用 ADC 查询 Cloud Logging:

    gcloud auth application-default login
    
  4. 运行 wiki linter 以验证您的设置:

    python3 _wiki/wiki_linter.py
    

    linter 会检查 Wiki 的结构、架构和链接,然后输出 JSON 报告。如果报告包含 "status": "PASS",则表示检查成功。报告中的警告不会影响状态。

排查工作负载问题

请按照以下步骤,使用机器学习工作负载调试 Wiki 排查工作负载问题:

  1. 从 ML Workload Debugging Wiki 代码库的根目录启动智能体:

    • Claude Code:在您激活虚拟环境的 shell 中,运行 claude。Claude Code 会从 CLAUDE.md 加载 Wiki 的指令,并从 .claude/ 目录加载其命令和子智能体定义。
    • Antigravity:将代码库的根目录作为工作区打开。维基的 Antigravity 技能和子智能体定义位于 _agents/ 目录中。如需了解设置详情,请参阅 _agents/QUICKSTART.md。
  2. 运行 /troubleshoot 命令,指定要诊断的工作负载或 JobSet 的名称:

    /troubleshoot WORKLOAD_ID
    
  3. 向智能体提供项目 ID 和运行时间范围。您可以提供 UTC 时间戳格式 (YYYY-MM-DDTHH:MM:SSZ) 的精确时间范围,也可以提供自然语言的相对时间范围,例如“一小时前”或“过去 24 小时”。代理会使用时间范围来限定其日志查询的范围,因此请确保该范围涵盖整个运行过程。

默认情况下,诊断工作流会运行只读检查。在代理运行修改集群状态的操作(例如重启或污染节点)之前,它会请求您明确确认。每个命令都必须经过审核和批准。 这些操作在 _wiki/actions/ 中的定义中标记有 requires_approval: true。诊断完成后,代理会报告其发现。

如需了解如何评估发现结果,包括如何识别无法判定的结果,请参阅 _wiki/TUTORIAL.md。