ci-metrics

作成者: pytorch

PyTorch CI、GitHub Actions、HUD、Grafana、およびインフラストラクチャのメトリクスを照会します。ユーザーがCIの所要時間、ジョブの失敗、キュー時間、ワークフローの傾向などについて質問する際に使用します。

npx skills add https://github.com/pytorch/pytorch --skill ci-metrics

Requirements

PyTorch CI data lives in HUD (hud.pytorch.org) and Grafana (pytorchci.grafana.net). Both are read only and gated by GitHub identity: the user must have write access to pytorch/pytorch or be on HUD's allow list.

This skill needs these tools on PATH:

  • gh — must be authenticated; if not, run gh auth login --hostname github.com --git-protocol ssh --web. Its token authenticates the Tests API and is exchanged for the Grafana token.
  • curl — calls the Tests API, downloads gcx, and fetches the Grafana token from HUD.

Use .agents/skills/ci-metrics/gcx-wrapper.sh for all Grafana access. On first use it downloads a pinned, checksum-verified gcx binary into a private cache (~/.cache/pytorch-ci-metrics/) and authenticates with the user's gh session; nothing is installed on PATH. If a tool is missing or gh is not authenticated, it exits with an error describing what to fix.

Datasources

Get the list of datasources available:

.agents/skills/ci-metrics/gcx-wrapper.sh datasources list

Pass the uid from this list to -d. gcx 1.7.1 interprets this value directly as a UID; it does not resolve display names. A display name therefore requests the wrong UID and can produce a misleading datasources:read permission error. The two that matter:

  • ceczcsck1b20wb (name grafana-clickhouse-datasource) — CI and test data in ClickHouse.
  • grafanacloud-prom is the UID (name grafanacloud-pytorchci-prom) — CI infrastructure metrics in Prometheus.

The data contains metrics for many repos in the PyTorch organization. When possible, restrict queries to just the pytorch/pytorch repository.

CI and Tests

PyTorch CI saves test metrics. To access this data prefer this order:

  • Tests API — standard queries about tests, their health, runs and owners. The OpenAPI schema at https://hud.pytorch.org/api/authed/openapi.json is the reference for parameters, defaults and response shapes.
    • Every request needs a GitHub token. Pass the authorization header through stdin to keep the token out of process arguments:
      gh auth token | sed 's/^/Authorization: Bearer /' | \
        curl -fsSL -H @- 'https://hud.pytorch.org/api/authed/tests?repo=pytorch/pytorch&limit=10' # @lint-ignore: requires authentication
      
    • Prefix every path with /api/authed/: /api/tests becomes /api/authed/tests. The unprefixed path answers CLI callers with a 429 bot challenge.
    • Responses carry the HUD page that shows them as hud_url: on each test, on each list entry, and on a list or grid as a whole. Give the user these links beside the API results and suggest opening them: the pages are the easier way for a person to see a test's health and history. A null hud_url means no page shows that selection; give the per-test links instead. The pages are listed in the OpenAPI document under the pages tag with the parameters they take. Never fetch a page from a program, and never prefix a page URL with /api/authed/.
  • ClickHouse — if the API is insufficient, query the database directly using .agents/skills/ci-metrics/gcx-wrapper.sh:
    .agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse list-tables -d ceczcsck1b20wb --database ci
    .agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse describe-table runs -d ceczcsck1b20wb --database ci
    .agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse query -d ceczcsck1b20wb "SELECT ..."
    
    • Important dataset:
      • GitHub webhook data
      • Tests
        • Database: ci — the tables behind the Tests API. runs holds one row per test attempt and billions of rows, so always filter by time. Read tests, environments and env_vars with FINAL (FROM ci.tests FINAL), including in joins, or you get duplicate rows.
        • Do not use the tests database (all_test_runs and friends). It is the legacy store; answer every test question from ci.

To get additional guidance on common queries, clone https://github.com/pytorch/test-infra into a temporary directory: HUD's saved queries are in torchci/clickhouse_queries/<name>/query.sql and the table definitions with column docs are in clickhouse_db_schema/.

Example Queries

Within pytorch/pytorch on main, list the top failing workflow jobs in the last two weeks:

.agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse query -d ceczcsck1b20wb "
  SELECT name, count(DISTINCT id) AS failures
  FROM default.workflow_job
  WHERE conclusion = 'failure'
    AND completed_at >= now() - INTERVAL 2 WEEK
    AND repository_full_name = 'pytorch/pytorch'
    AND head_branch = 'main'
  GROUP BY name ORDER BY failures DESC LIMIT 10"

For a test file, count each test's attempts in the last day, including retries. Failures include errors, crashes and timeouts; other counts expected failures, unexpected passes and unknown outcomes:

.agents/skills/ci-metrics/gcx-wrapper.sh datasources clickhouse query -d ceczcsck1b20wb "
  SELECT t.file, t.suite, t.case_name, count() AS attempts,
    countIf(r.outcome = 'passed') AS passed,
    countIf(r.outcome IN ('failed', 'error', 'crashed', 'timed_out')) AS failed,
    countIf(r.outcome = 'skipped') AS skipped,
    countIf(r.outcome IN ('xfailed', 'xpassed', 'unknown')) AS other
  FROM ci.runs AS r
  JOIN ci.tests AS t FINAL ON r.tests_id = t.id
  WHERE r.started_at >= now() - INTERVAL 1 DAY
    AND t.repo = 'pytorch/pytorch'
    AND t.file = 'test/test_torch.py'
  GROUP BY t.file, t.suite, t.case_name
  ORDER BY attempts DESC LIMIT 20"

CI Infrastructure

CI infrastructure metrics are in the Prometheus datasource (-d grafanacloud-prom). To get a better understanding of the data, clone these repositories in a temporary directory:

Example Queries

Which runner types have the deepest queue right now (jobs assigned but not yet running)?

.agents/skills/ci-metrics/gcx-wrapper.sh datasources prometheus query -d grafanacloud-prom 'topk(10, clamp_min(sum by (name) (gha_assigned_jobs) - sum by (name) (gha_running_jobs), 0))'

How many jobs were running per cluster over the last 6 hours, sampled every 30 minutes? Use --since/--step (or --from/--to) for a range query:

.agents/skills/ci-metrics/gcx-wrapper.sh datasources prometheus query -d grafanacloud-prom 'sum by (cluster) (gha_running_jobs)' --since 6h --step 30m

pytorchのその他のスキル

zephyr
pytorch
ExecuTorchをZephyr RTOSモジュールとして組み込みボード向けにビルドおよび設定します。ETを使用したZephyrワークスペースのセットアップや、ボードサポート(オーバーレイなど)の追加時に使用します。
aoti-debug
pytorch
AOTInductor(AOTI)のエラーやクラッシュをデバッグします。AOTIのセグメンテーションフォールト、デバイス不一致エラー、定数読み込み失敗、またはランタイムエラーが発生した場合に使用します。
skill-writer
pytorch
Claude Code向けの適切に構造化されたAgent Skillを作成するためのガイド。ベストプラクティスと検証を含む。Skillのライフサイクル全体(スコープ設定、ファイル構造、YAMLフロントマター検証、コンテンツ構成、テスト手順)をカバー。命名規則(小文字、ハイフン、最大64文字)と説明要件(特定のトリガー、ファイルタイプ、「何を」「いつ」の節)を厳格に適用。読み取り専用Skill、スクリプトベースのSkill、複数ファイルのSkillなど、一般的なパターンのテンプレートを提供。
triaging-issues
pytorch
GitHubのIssueをトリアージし、オンコールチームに振り分け、ラベルを適用し、質問をクローズします。新しいPyTorchのIssueを処理する際や、トリアージを依頼された場合に使用します。
wheel-size-analyzer
pytorch
PyTorch nightly wheelのサイズを、GitHub ActionsアーティファクトAPIを使用して日付範囲で分析します。バイナリサイズの変更を追跡したり、wheelサイズを特定する際に使用します。
release-go-live-binary-build-matrix
pytorch
PyTorchリリースが公開された際に、tools/scripts/generate_binary_build_matrix.pyを更新します。CURRENT_STABLE_VERSIONを新しい安定版に進め、…を昇格させます。
pr-review
pytorch
PyTorchのプルリクエストをコード品質、テストカバレッジ、セキュリティ、後方互換性の観点からレビューします。PRのレビュー時やコード変更のレビューを依頼された際に使用します。
qualcomm
pytorch
QNN(Qualcomm AI Engine Direct)バックエンドを構築、テスト、または開発します。backends/qualcomm/で作業する場合や、QNNを構築する場合(使用…