Repository navigation
[PowerX] enable NVL72 smart provisioning from measured GPU and Grace socket power / 基于实测 GPU 与 Grace socket 功耗为 NVL72 启用智能预配 - #1190
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Claude finished @edwingao28's task in 4m 14s —— View job Review complete — 🟢 LGTM, no blocking issues foundI reviewed the full diff against Todo
What I verified
Chinese copyThe diff touches user-visible zh strings in Notes (non-blocking)
This is a carefully structured, well-tested change. No changes requested. |
|
Claude finished @edwingao28's task in 4m 31s —— View job Claude Code Review — finalizing
|
Maps article figures 6–16 to their panels, documents the Timeline load filter and validated-window summary, and adds powerFit to the views API key table. State ownership lists i_ptconc. 中文:记录 PowerX 文章面板与 Timeline 负载筛选。将文章图 6–16 对应到各面板,说明 Timeline 负载筛选与有效窗口汇总,在视图 API 参数表中加入 powerFit,并在状态归属 文档中列出 i_ptconc。
Source labels in the baseline/comparator selects, role group and power fit used English topology, attempt and recipe words on /zh. They now follow the page locale; the read-only API keeps English. 中文:修复 PowerX 对比面板来源标签未本地化的问题。基准/对比来源下拉框、角色组和 功耗拟合中的拓扑、尝试次数与配方字样在 /zh 页面仍为英文,现在随页面语言显示; 只读 API 仍保持英文。
xmode=concurrency keeps loads without end-to-end latency and loads above the chart cost limit, which e2e mode clips. 中文:新增测试,确认 xmode=concurrency 保留缺少端到端延迟的负载以及超出图表成本 上限的负载,而 e2e 模式会裁剪后者。
Keep 76 cases that pin published numbers, ingest/DB consistency, API status contracts, or the required ?unofficialrun= overlay path. Drop the other 499 audited cases, the local PostgreSQL acceptance harness, its fixtures and the test:e2e:powerx script. 中文:删除冗余的 PowerX 测试和本地数据库验收框架。保留 76 个用例,覆盖发布数值、ingest/DB 一致性、API 状态契约以及必需的 ?unofficialrun= overlay 路径;删除其余 499 个审计用例、本地 PostgreSQL 验收框架及其 fixture,以及 test:e2e:powerx 脚本。
Conflicts were edits to db-ingest tests that the cleanup removed; they resolve to the db-ingest side. The shared overlay timeline spec keeps only this branch's share-link case. 中文:合并 db-ingest 分支的 PowerX 测试清理。冲突来自本分支对 db-ingest 中已删除测试的修改,均按 db-ingest 一侧解决;共享的 overlay 时间线 spec 只保留本分支的 share-link 用例。
Keep 10 cases for the views API numbers, the mean x statistic and the required ?unofficialrun= overlay paths. Drop the other 55 audited cases, trim the topology E2E case to its overlay filter assertion, and restore the timeline spec timing. 中文:删除冗余的 chart-coverage 测试。保留 10 个用例,覆盖 views API 数值、mean x 统计量以及必需的 ?unofficialrun= overlay 路径;删除其余 55 个审计用例,将 topology E2E 用例精简为 overlay 过滤断言,并补回 timeline spec 的计时条目。
Keep 8 cases: signed same-concurrency deltas, the least-squares fit and R², disaggregated fits per allocated GPU, the window-bounded peak pool power, and the ?unofficialrun= overlay panels. Drop the other 41 audited cases and restore the powerx-compare spec timing. 中文:合并 chart-coverage 的测试清理,并删除冗余的 article 测试。保留 8 个用例:带符号的同并发差值、最小二乘拟合与 R²、按分配 GPU 计算的 disaggregated 拟合、验证窗口内的峰值 GPU 池功耗,以及 ?unofficialrun= overlay 面板;删除其余 41 个审计用例,并补回 powerx-compare spec 的计时条目。
topologyLabel dropped the "=" from every part, so offload modes read
"offloadoff". Word values now keep a space ("offload off"); numeric and
unknown tokens stay compact (TP4, DP?).
中文:修复 topology 标签中的文字取值。topologyLabel 会删除每个字段的 "=",导致 offload 模式显示为 "offloadoff"。现在文字取值保留空格("offload off"),数字和未知值仍保持紧凑格式(TP4、DP?)。
中文:合并 topology 标签修复。
Track the full-record algorithm independently of source revisions. Recompute stale reads from retained samples, upgrade unchanged ingests, and add transactional stats-only backfill with version-aware caches. Validation: local PGlite and real Blob cache regressions; old upsert fails the new unchanged-input regression. Workspace unit suite, lint, format, typecheck and typography pass. Cypress smoke: 56 component and 128 integration tests pass. No production migration or data repair executed. 中文:为 PowerX 完整记录统计增加算法版本。旧摘要可从保留样本只读重算,原样重新入库也能升级;新增事务化 stats-only 定向修复,并同步更新缓存版本和读取一致性检查。已通过本地数据库、真实缓存、仓库检查及浏览器 smoke;未执行生产迁移或数据修复。
中文:合并最新 master,保留双方文档改动,同步统计版本说明并重新生成 skill 完整性校验清单。
Remove the availability panel, point-count summary, historical rings and their legend key, the power-curve caption, selector hints, and per-panel method notes, so measured metrics read like every other dashboard metric. Panel subtitles stay in exported images only. Comparison sources get short "hardware · date" labels that add details only where two sources would otherwise look the same. 中文:精简 PowerX 实测指标视图。移除可用性面板、数据点统计、历史数据圆环及其图例、 功率曲线图注、选择器提示和各面板的方法说明,使实测指标与仪表板其他指标的交互保持一致。 面板副标题仅保留在导出图片中;对比数据源改用“硬件 · 日期”短标签,只有在两个数据源 无法区分时才补充细节。
Chip Config already follows the standard dashboard path; GB200/GB300 NVL72 DSR1 8K/1K rows carry no power telemetry, so Measured Power had nothing to plot. The measured-axis empty state now says so. Best per SKU also keeps the full selection when no config reports the metric, matching the rule that metric coverage never narrows the selection. 中文:说明所选芯片配置缺少实测功耗的情况。芯片配置本身沿用仪表板的标准逻辑; DSR1 8K/1K 的 GB200/GB300 NVL72 数据没有功耗遥测,因此实测功耗图表无点可画。 实测坐标轴的空状态现在会明确说明这一点。当没有任何配置提供该指标时, “每个 SKU 仅显示最佳配置”会保留完整选择,符合“指标覆盖范围不收窄选择”的规则。
The Concurrency axis and the Service Statistic label shipped earlier in this branch; the x-axis spec still expected the old option count and the unprefixed "Interactivity" label. 中文:更新 X 轴测试,适配本分支已上线的“并发数”选项和带统计量前缀的坐标轴标签。
Falling back to every selectable config re-ran engine-conflict resolution when no config reported the metric, which could raise a toast over an empty chart. The empty selection is harmless now that the availability panel is gone; the measured empty-state hint stays. 中文:恢复“每个 SKU 仅显示最佳配置”在指标无数据时的原有回退逻辑。改为回退到全部可选配置后, 一旦没有任何配置提供该指标,就会重新执行引擎冲突处理,可能在空图表上弹出提示。 可用性面板移除后,空选择已不再有副作用;实测空状态提示保持不变。
The source selects are no-export, so exported same-service and same-concurrency images no longer said which baseline and comparator produced the numbers. Both panels now carry an export-only "Baseline → Comparator" line; the screen is unchanged. 中文:在导出图片中标明对比数据源。数据源下拉框不参与导出,因此同服务水平与同并发对比的导出图片 无法看出基准和对比对象。两个面板现在都带有仅在导出时显示的“基准 → 对比对象”一行,屏幕显示不变。
…ves them `packages/db/src/lib/gpu-metric-stats.ts` and `packages/db/src/queries/gpu-metrics.ts` are bundled into the `/api/v1/gpu-metrics-point` App Route. Turbopack does not rewrite `.js`-suffixed relative specifiers to their `.ts` sources, so the `bun run build` step of every E2E shard failed with "Module not found: Can't resolve '../etl/gpu-metrics-csv.js'" and "Can't resolve '../lib/gpu-metric-stats.js'". Use extensionless specifiers, matching the other app-reachable db modules. 中文:`gpu-metric-stats.ts` 与 `queries/gpu-metrics.ts` 会被打包进 `/api/v1/gpu-metrics-point` 路由,Turbopack 不会把带 `.js` 后缀的相对 导入映射到 `.ts` 源文件,导致 E2E 各分片的 `bun run build` 报 Module not found。改为不带扩展名的导入,与其他被应用引用的 db 模块保持一致。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FxD3ovk3KPrcotWoeNuUAL
Resolve conflicts with the moved base: keep versioned stats recovery (now via groupBySeries), both views-api doc edits, both readonly-views additions, and the condensed data-pipeline readers paragraph, moving the versioned-digest rule into powerx-persistence-recovery.md. Document service source labels in the skills reference and regenerate its integrity manifest. 中文:将 feat/powerx-db-ingest 合并到文章对齐分支,解决与已更新基线的冲突: 保留版本化统计恢复逻辑(改用 groupBySeries),保留两侧对 views-api 文档和 readonly-views 文档的改动,data-pipeline 采用精简后的读取段落,版本化摘要规则 移至 powerx-persistence-recovery.md。在 skills 参考文档中说明服务数据源标签, 并重新生成完整性清单。
…rison Date comparison dropped ?unofficialrun= rows, its Timeline ignored the per-date legend, and the Concurrency axis fell back to the scatter chart. GPUGraph now draws overlay runs in their run colour and dash and splits concurrency sweeps per date, run and topology. The Timeline shares its series colours and date toggles; table, CSV and panels follow the same toggles. 中文:日期对比会丢失 ?unofficialrun= 数据,其 Timeline 忽略按日期的图例,并发数 X 轴会退回散点图。 GPUGraph 现在以运行配色和虚线绘制非官方运行,并按日期、运行和拓扑拆分并发扫描。 Timeline 沿用其序列配色和按日期显隐,表格、CSV 和面板也遵循同一套显隐。
Concurrency shipped for every sequence earlier in this branch; the phone-width Chinese Agentic spec still counted four options. 中文:修正中文 Agentic X 轴选项测试。本分支此前已为所有场景加入并发数选项, 而手机宽度的中文 Agentic 测试仍按四个选项计数。
Brings #1224 (OperatorX: compare hardware and inspect kernel timelines, 926a8e5) into the PowerX DB-ingest branch. Conflict resolutions: - docs/dashboard-readonly-views.md: both branches appended a paragraph at the same spot in the 中文说明 section (master: OperatorX feature gate and page-owned /api/v1/operatorx/* routes; this branch: GPU telemetry DB-first read and full-record statistics). Kept both, OperatorX first to mirror the order of the English section. - packages/skills/skills/inferencex-api/integrity.json: both sides updated the sha256 of references/dashboard-views.md, which itself auto-merged with both additions. Regenerated with `node packages/skills/scripts/update-integrity.mjs` instead of picking a side. Auto-merged without conflict: package.json and packages/db/package.json (master's admin:db:ingest:operatorx scripts only, no dependency changes; `bun install --frozen-lockfile` is clean and bun.lock is untouched), packages/app/src/lib/api-route-catalog.ts (api-route-catalog.test.ts passes with no digest edits), views-api/docs/extensions.ts, and the skills references/dashboard-views.md. 中文:将 master(#1224 OperatorX 跨硬件对比与内核时间线)合并进 feat/powerx-db-ingest。两处冲突均为同位置追加:docs/dashboard-readonly-views.md 的中文说明段落两侧都保留(OperatorX 段落在前,与英文段落顺序一致);skills integrity.json 中 dashboard-views.md 的哈希用 update-integrity.mjs 重新生成。 依赖与 lockfile 无变化,路由目录测试通过。 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FxD3ovk3KPrcotWoeNuUAL
Moving the Concurrency date comparison onto GPUGraph dropped the link its official tooltips had in the scatter chart. The date-comparison tooltip now renders it and opens the focused Timeline in place, as overlay points already did. 中文:日期对比图中的官方数据点恢复“View power trace”。并发数日期对比改用 GPUGraph 后, 官方点 tooltip 丢失了散点图中的这个链接;现在日期对比 tooltip 会显示该链接, 并像非官方点一样在页内打开聚焦的 Timeline。
Brings in OperatorX #1224 via the base. Conflicts: the views query-key tables keep this branch's inference and gpu-metrics rows and drop the operatorx view, which #1224 no longer publishes; the registry.ts review digest and the skills integrity file are recomputed for the merged files. 中文:将 powerx-db-ingest 合并到文章对齐分支,带入 OperatorX #1224。冲突处理:只读视图的查询参数表 保留本分支的 inference 与 gpu-metrics 行,并删除 #1224 已不再发布的 operatorx 视图; registry.ts 的审阅摘要与 skills integrity 文件按合并后的内容重新计算。
中文:在当前镜像视图的选择器说明中补充 includeHistory。
…provisioning 中文:将 feat/powerx-article-parity 合并到 feat/powerx-nvl72-smart-provisioning。
中文:将 power model 移植版本固定到 InferenceX 合并提交 69f12085e。
|
Claude finished @edwingao28's task in 1m 48s —— View job Re-review — 🟢 LGTM, no blocking issues foundRe-reviewed against
What changed since the last reviewOne production-relevant commit: Verified
Notes (non-blocking)
No new issues introduced by the revision pin. No changes requested. |
|
Claude finished @edwingao28's task in 3m 27s —— View job Re-review — 🔴 One blocking issue: UI/API parity broken by the latest commitRe-reviewed against
What changed since the last reviewOne production commit: 🔴 BLOCKING — the matching API change is missing (parity regression)The fix was applied to the UI path only. The public views-API filter in .filter((point) => !best || bestHwKeys.size === 0 || bestHwKeys.has(point.hwKey))Both paths build their rows from the same Details + a drop-in fix are in the inline comment on Verified (the rest is clean)
Notes (non-blocking)
Once the API |
|
Claude finished @edwingao28's task in 2m 18s —— View job Re-review — 🔴 BLOCKING: the UI/API parity issue from the last review is still openRe-reviewed against
What changed since the last reviewOnly one new commit: 🔴 BLOCKING — still open:
|
|
Claude finished @edwingao28's task in 2m 16s —— View job Re-review — 🔴 One blocking issue: stale contract digest fails
|
|
Claude finished @edwingao28's task in 1m 36s —— View job Re-review — 🟢 LGTM, both prior BLOCKING findings resolvedRe-reviewed against
Both prior 🔴 BLOCKING findings are fixed1. UI/API parity ( 2. Stale contract digest — fixed in What
|

Summary
power_modelrack at PUE 1.1; rows without complete socket telemetry use the rack's modeled Grace (cpuBasis: modeled).lib/power/power_model/portspower_model/src/power_modelfile for file at the InferenceX#3887 merge commit1e509932e: one.tsper.py, same class and field names;cli.pyand__main__.pyskipped (manifest). Closed-form profiles and their generator are removed;system-power-model.tsis a thin adapter.%gtie rounding,represcaping, duplicate detail keys and validator error classes match the reference (findings table below).cpu_basisand the port digest. Guide.23a6f9fe. Grace collection: InferenceX#3296.AI model disclosure
power_modelport, parity fuzz, tests, docs; GPT-6: earlier implementation, review, tests; Fable: Bugbot fixes, revision pin, fuzz follow-up fixes, Chinese review, PR bodyValidation
power-model.parity.json)872c360dvitest src/lib/power872c360dDifferential fuzz against Python
1e509932e: seeded random inputs through the public API and every component class; errors compared by class and message.create_power_model(...).estimate_breakdown(...)x**3(libmpowvsx*x*x)Behavioural findings from the fuzz, each fixed in
fe8caa48with a test inpower-model-validation.test.ts:instanceofguards with pydantic'smodel_typemessageformatGrounded exact decimal ties half-up; Python's%grounds half to evenreprescapingpy_reprdetail()returned the first duplicate key;dict()keeps the lastValueErrorinside a model validator escaped unwrappedValidationError中文说明
power_model的机架模型(PUE 1.1);socket 遥测不完整的行使用机架建模的 Grace(cpuBasis: modeled)。lib/power/power_model/按文件一一移植power_model/src/power_model(InferenceX#3887 合并提交1e509932e):每个.py对应一个.ts,类名与字段名相同;跳过cli.py与__main__.py。删除闭式 profile 及其生成器,system-power-model.ts只是薄适配层。%g平局舍入、repr转义、重复 detail 键及校验器错误类型均与参考实现相同(见上表)。cpu_basis与移植版摘要。23a6f9fe)。验证: parity 夹具 1,572 个 Python 生成用例(含 240 个固定种子随机输入)全部在 1e-12 内;差分 fuzz 401,350 个用例、7,849,780 个数值无一超出 1e-12;
872c360d本地vitest src/lib/power1,745 项通过;CI(Claude review、Cursor Bugbot、Vercel)通过,此 base 不运行测试 CI,无 GPU 验证。Note
High Risk
Touches core facility-power modeling, profit GW-year capacity math, and public inference CSV/table contracts for All in Measured; incorrect rack/Grace gating or curve selection would skew economics and API rows.
Overview
Replaces the closed-form chassis power profiles with a module-for-module TypeScript port of upstream InferenceX
power_model, pinned viagenerate-power-model-parity.pyandpower-model.parity.json.modelSystemPower/ All in Measured now covers GB200/GB300 NVL72 racks (estimateRackPower): equal compute-tray share of a modeled 18-tray rack at PUE 1.1, using validated Grace-socket telemetry when complete or modeled Grace otherwise (cpuBasis); GB200/GB300 are no longer blocked as unsupported hardware.PowerX / views API: All in Measured
tableRowskeep every GPU-valid row (including unavailable system estimates withy: nulland reasons); CSV exports those rows with blanks instead of only plottedseries. Boundary labels align with GPU Level Measured, All in Provisioned, All in Measured; chart copy documents dual PUE and Grace input rules.Profit Estimator (gated): Modeled/compare builds throughput from power-valid points only at the same target (no extrapolation across invalid knots); compare pairs use that curve for both bars and fall back to provisioned when no valid curve exists. UI drops the per-SKU unavailable disclosure list; dense compare charts get horizontal scroll (PNG export still full width). CSV/tooltips add power basis and model revision; NVL72 rows label measured vs modeled Grace and never mix bases in interpolation.
Docs, offline export (
cpu_basis, port digest), and Cypress/vitest coverage expanded for AgentX multinode, NVL72 empty states, profit curves, and tooltip links to the pinned model.Reviewed by Cursor Bugbot for commit 5edf102. Bugbot is set up for automated code reviews on this repo. Configure here.