Skip to content

[PowerX] measure Grace CPU-side power on NVL72 power lanes / 在 NVL72 功耗 lane 上实测 Grace CPU 侧功耗 - #3296

Draft
edwingao28 wants to merge 9 commits into
mainfrom
feat/powerx-nvl72-cpu-power
Draft

edwingao28 wants to merge 9 commits into
mainfrom
feat/powerx-nvl72-cpu-power

Conversation

@edwingao28

@edwingao28 edwingao28 commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Description

NVL72 rows have measured GPU-board power but no Grace-side measurement, so smart provisioning never renders for GB200/GB300. The multinode power validator now integrates srt-slurm's power/cpu/ package over the formal GPU window and adds cpu_power_valid plus additive CPU-side keys under schema 2; GPU fields and power_valid are unchanged (contract). The telemetry.cpu_power_exporter leg (port 9405, source: acpi) is enabled on qwen3.5-fp8-gb200-dynamo-sglang and qwen3.5-fp8-gb300-dynamo-sglang, the smallest active non-K3 NVL72 lanes.

Testing: local only: pytest 301 + 424 passed, ruff clean, pinned srtctl validates both recipes, matrix rows identical, validate_perf_changelog vs origin/main passes. No GPU run yet.

Delivery: full-sweep-fail-fast on both keys (6 rows). Accept when the power_audit_* bundle has LOGS/power/cpu/samples.csv with Grace Power Socket 0/1 rows per host and cpu_manifest.json mode acpi, the aggregate has cpu_power_valid: 1 with avg_cpu_socket_power_w, avg_total_cpu_power_w, total_cpu_energy_j, and GPU power_valid is unchanged; keep that bundle as the validator golden fixture.

Producer pin: the first sweep (run 35467617921) hit no ACPI power_meter hwmon sensors found on every GB200 node: on 6.8.0-nvidia-64k the hwmon node has no name, only device/name. utils/srt-slurm pins SemiAnalysisAI/srt-slurm#23 head 473ecaa8 (984180e5 + gap budget + discovery fix) until it merges; the CSV contract stays v1 long.

中文

NVL72 数据行只有实测 GPU 板卡功耗,没有 Grace 侧实测,GB200/GB300 的智能预配因此从不渲染。多节点功耗校验器现在会在正式 GPU 测量窗口内对 srt-slurm 的 power/cpu/ 产物包积分,并在 schema 2 下新增 cpu_power_valid 与 CPU 侧字段;GPU 字段与 power_valid 不变(契约)。在当前活跃、非 K3 的最小 NVL72 lane qwen3.5-fp8-gb200-dynamo-sglangqwen3.5-fp8-gb300-dynamo-sglang 上启用 telemetry.cpu_power_exporter(port 9405,source: acpi)。

测试: 仅本地:pytest 301 + 424 通过,ruff 无问题,固定版本 srtctl 校验两份 recipe 通过,矩阵生成前后一致,validate_perf_changelogorigin/main 通过。尚未跑 GPU。

交付: 对两个 config key 跑 full-sweep-fail-fast(6 行)。验收条件:power_audit_* 产物包含 LOGS/power/cpu/samples.csv(每台主机均有 Grace Power Socket 0/1 行)与解析模式为 acpicpu_manifest.json,聚合结果含 cpu_power_valid: 1avg_cpu_socket_power_wavg_total_cpu_power_wtotal_cpu_energy_j,GPU power_valid 不变;将该产物包保留为校验器的黄金固定样本。

生产端固定版本: 首次 sweep(run 35467617921)在所有 GB200 节点上遇到 no ACPI power_meter hwmon sensors found:6.8.0-nvidia-64k 内核下 hwmon 节点没有 name,只有 device/nameutils/srt-slurm 现固定到 SemiAnalysisAI/srt-slurm#23 的 head 473ecaa8(984180e5 + 采样间隙预算修复 + 传感器发现修复),待其合并;CSV 契约仍为 v1 长表。

AI 模型: 本 PR 描述由 claude-fable-5-1(Claude Fable 5.1,Claude Code)撰写;此前的提交与委派的 review 未记录运行环境提供的模型标识,确切模型无法确认。角色:起草代码、文档、changelog 与 PR 文本;作者审阅、运行本地检查,并负责 push、label 与 sweep。

AI model disclosure

  • Model/version: claude-fable-5-1 (Claude Fable 5.1, Claude Code) for this body; earlier commits and delegated reviews recorded no runtime identifier, so their exact model could not be verified.
  • Role: drafted code, docs, changelog and PR text; author reviewed, ran local checks, owns push, labels and sweep.

Related Issue

None.

Type of Change

  • Bug fix
  • New feature
  • Configuration change
  • Documentation update
  • Other (please describe)

Checklist

  • I have completed the AI model disclosure and kept it current
  • I have tested my changes locally
  • I have updated documentation if necessary
  • For every change that can affect benchmark performance and every recipe addition or modification, I have appended a new entry to the physical end of perf-changelog.yaml and have not edited historical entries
  • Before merging via reuse, an authorized maintainer (OWNER/MEMBER/COLLABORATOR) has commented /use <run_id> (or the legacy /reuse-sweep-run) on this PR. Do this only once there is a final full sweep that is all green with evals passing, since after this comment the sweep label will no longer automatically kick off new sweeps. Remove and re-add the label to force one.

Read srt-slurm's power/cpu/{samples.csv,cpu_manifest.json} (v1 long and v2
wide) next to the GPU DCGM package, integrate each (host, socket) Grace-side
and module series over the bound formal window with the shared trapezoid and
gap rule, and emit cpu_power_valid plus avg_cpu_socket_power_w,
avg_total_cpu_power_w, total_cpu_energy_j and the module keys. The verdict is
independent of power_valid and REQUIRE_POWER; a package without cpu/ produces
byte-identical output (GB200 fixture replay).

中文:在多节点功耗校验器中接入 srt-slurm 的 power/cpu/ 子产物包(v1 长格式与 v2
宽格式),按 (主机, socket) 在同一正式测量窗口内用共享的梯形法和采样间隔规则积分
Grace 侧及模块功耗,输出 cpu_power_valid 与 avg_cpu_socket_power_w、
avg_total_cpu_power_w、total_cpu_energy_j 及模块字段;结论独立于 power_valid 和
REQUIRE_POWER,无 cpu/ 的产物包输出逐字节不变(GB200 fixture 回放验证)。
validate_and_integrate() forced cpu_power_valid=0 with cpu_producer_unverified
whenever the GPU leg's producer pin failed, so a run with valid Grace samples
lost its CPU energy for a GPU-side reason, against the ticket contract
("independent of power_valid") and the spec's independent-leg rule. Drop that
gate and the unused blocking_reasons hook: the CPU leg borrows only the bound
formal window and the host topology as inputs, and no GPU verdict reaches it.
Fold the pin-mismatch and pin-missing cases into the existing invalid-GPU-leg
test. Docs (EN/ZH) drop the contradictory sentence and list the codes the leg
actually emits, including the shared non_finite_power_metric and
aggregate_result_* ones. GB200 fixture replay stays byte-identical.

中文:validate_and_integrate() 原本在 GPU 侧 producer 固定版本校验失败时,用
cpu_producer_unverified 强制 cpu_power_valid=0,导致 Grace 采样有效的运行因 GPU 侧
原因丢失 CPU 能耗,与工单契约(“独立于 power_valid”)和 spec 的独立测量环节规则相悖。
移除该门控及未使用的 blocking_reasons 参数:CPU 侧只借用已绑定的正式窗口和主机拓扑
作为输入,GPU 侧的任何结论都不会传导过来。把固定版本不匹配与缺失两种情形并入现有的
GPU 侧无效测试。中英文文档删除自相矛盾的表述,并列出实际输出的原因码,包括共享的
non_finite_power_metric 与 aggregate_result_*。GB200 fixture 回放输出逐字节不变。
…anes

Add telemetry.cpu_power_exporter (port 9405, source acpi) to the 1P1D
TP4/TP4 STP recipes of qwen3.5-fp8-gb200-dynamo-sglang and
qwen3.5-fp8-gb300-dynamo-sglang, the smallest active non-Kimi-K3 NVL72
power lanes; nothing else in the recipes changes. srt-slurm v2.2.1 runs
the exporter on the bare worker host and writes power/cpu/samples.csv
plus cpu_manifest.json beside the GPU DCGM package for the multinode
validator's CPU leg. Append the perf-changelog entry. DSV4 8k1k lanes
are not used because that scenario was deprecated after 2026-09-08.

中文:在 qwen3.5-fp8-gb200-dynamo-sglang 与 qwen3.5-fp8-gb300-dynamo-sglang
的 1P1D TP4/TP4 STP recipe 中加入 telemetry.cpu_power_exporter(port 9405,
source acpi),这是当前活跃、非 Kimi-K3 的最小 NVL72 功耗 lane;recipe
其余内容不变。srt-slurm v2.2.1 在 worker 裸主机上运行 exporter,并在 GPU
DCGM 产物包旁写入 power/cpu/samples.csv 与 cpu_manifest.json,供多节点
校验器的 CPU 侧测量环节使用。追加 perf-changelog 条目。未采用 DSV4 8k1k
lane,因为该场景已于 2026-09-08 之后弃用。
…e tail

Bring in main (96bccfe), including the #3252 and #3254 image bumps of
the two Qwen3.5 FP8 NVL72 recipes this branch edits. perf-changelog.yaml
is resolved as main's bytes followed by this branch's entry so the file
stays append-only.

中文:合并 main(96bccfe12),包含 #3252#3254 对本分支所改两份 Qwen3.5
FP8 NVL72 recipe 的镜像更新。perf-changelog.yaml 按 main 的原始字节加本分支
条目的方式解决冲突,保持仅追加。
Replace the pr-link placeholder in the appended perf-changelog.yaml entry with
the opened PR URL; no other bytes change.

中文:将新增 perf-changelog.yaml 条目中的 pr-link 占位符替换为已开启的 PR 链接,其余内容不变。
…e tail

Synchronize with main so the perf-changelog validator sees only additions from
this branch; the appended cpu power leg entry stays the last entry.

中文:同步 origin/main,使 perf-changelog 校验只看到本分支的新增内容;新增的 CPU 功耗测量条目保持在文件末尾。
@github-actions

github-actions Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

…e tail

Synchronize with main before re-pinning srt-slurm so the perf-changelog
validator sees only additions from this branch; the appended cpu power leg
entry stays the last entry.

中文:在重新固定 srt-slurm 之前同步 origin/main,使 perf-changelog 校验只看到本分支的新增内容;新增的 CPU 功耗测量条目保持在文件末尾。
…branch

The first sweep showed the pinned cpu-power-exporter exiting with "no ACPI
power_meter hwmon sensors found" on every GB200 node: on 6.8.0-nvidia-64k the
acpi_power_meter hwmon node has no `name` attribute, only `device/name`. Pin
utils/srt-slurm to SemiAnalysisAI/srt-slurm#23 head 473ecaa8 (984180e5 plus the
gap-budget fix and the discovery fix) so the CPU leg can publish; the wire
contract stays v1 long, so no consumer change.

中文:首次 sweep 显示固定版本的 cpu-power-exporter 在所有 GB200 节点上以 "no ACPI power_meter hwmon sensors found" 退出:6.8.0-nvidia-64k 内核下 acpi_power_meter 的 hwmon 节点没有 `name` 属性,只有 `device/name`。将 utils/srt-slurm 固定到 SemiAnalysisAI/srt-slurm#23 的 head 473ecaa8(984180e5 + 采样间隙预算修复 + 传感器发现修复),使 CPU 侧采集可以发布;CSV 契约仍为 v1 长表,消费端无需改动。
…e tail

Synchronize with main before re-pinning srt-slurm so the perf-changelog
validator sees only additions from this branch; the appended cpu power leg
entry stays the last entry.

中文:在重新固定 srt-slurm 之前同步 origin/main,使 perf-changelog 校验只看到本分支的新增内容;新增的 CPU 功耗测量条目保持在文件末尾。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

1 participant