Skip to content

[WIP][DNM] feat(charts): add output throughput per total GPUs y-metrics / 新增按总 GPU 数归一化的输出吞吐量 Y 轴指标#613

Open
functionstackx wants to merge 1 commit into
masterfrom
feat/output-tok-per-total-gpus
Open

[WIP][DNM] feat(charts): add output throughput per total GPUs y-metrics / 新增按总 GPU 数归一化的输出吞吐量 Y 轴指标#613
functionstackx wants to merge 1 commit into
masterfrom
feat/output-tok-per-total-gpus

Conversation

@functionstackx

@functionstackx functionstackx commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds two new Y-axis metrics to the inference (and historical-trends) charts that normalize output throughput over the total GPU count instead of decode GPUs only:

  • Output Token Throughput per Total GPUs (y_outputTputPerTotalGpu)
    (output tok/s/gpu × num_decode_gpus) / (num_prefill_gpus + num_decode_gpus)
    For aggregated (non-disagg) configs this equals output tok/s/gpu as-is, since every GPU decodes.
  • Output Token Throughput per All in Utility MW (Total GPUs) (y_outputTputPerTotalMw)
    (outputTputPerTotalGpu × 1000) / hardwarePower (all-in utility kW per GPU), following the existing per-MW metric convention.

Changes

  • chart-utils.ts — registered both keys in Y_AXIS_METRICS, derived both fields in createChartDataPoint, extended calculateRoofline/computeAllRooflines key unions, added reset + marking branches in markRooflinePoints
  • types.tsInferenceData fields, YAxisMetricKey entries, ChartDefinition fields
  • inference-chart-config.json — full entries (label/labelZh/title/titleZh/roofline) in both the interactivity (upper_left) and e2e (upper_right) chart definitions
  • ChartControls.tsx — both metrics added to the Throughput dropdown group
  • chart-display-helpers.tsx — the per-MW variant keeps the power source badges; neither metric shows the per-decode/prefill-pool disagg caveat (the normalization is the whole point) — instead both show a bilingual note explaining the total-GPU normalization
  • useInterpolatedTrendData.ts — trend interpolation supports both metrics (same derivation mirrored in rowToLightweightPoint)
  • AI chart (prompt-templates.ts, use-ai-chart.ts) — metric catalog + short labels

Unofficial run overlay support

Works for both official runs and ?unofficialrun= overlays: overlay rows flow through the same transformBenchmarkRowscreateChartDataPoint pipeline, so the derived fields appear on overlay points automatically, and processOverlayChartData resolves the new keys generically. Unit tests exercise the overlay path for both new metrics (utils.test.ts). Manual verification with a live ?unofficialrun= URL still pending — this PR is [WIP][DNM].

Tests

  • chart-utils.test.ts — disagg formula, non-disagg passthrough, omission when output_tput_per_gpu is 0, per-MW derivation, roofline marking for both metrics
  • benchmark-transform.test.ts — end-to-end pipeline for disagg and non-disagg rows
  • utils.test.ts — overlay path (processOverlayChartData) for both metrics
  • chart-display-helpers.test.tsx — power badges without per-pool caveat; total-GPU note visibility

pnpm typecheck, pnpm lint, pnpm fmt, and the full pnpm test:unit suite (2740 tests) all pass.

中文说明

新增两个 Y 轴指标,将输出吞吐量按总 GPU 数(而非仅解码 GPU)归一化:

  • 每总 GPU 输出 token 吞吐量y_outputTputPerTotalGpu):
    (每解码 GPU 输出吞吐量 × 解码 GPU 数)/(预填充 GPU 数 + 解码 GPU 数)。
    聚合(非分离式)配置下与每 GPU 输出吞吐量一致。
  • 每全电源配置兆瓦输出 token 吞吐量(按总 GPU 数)y_outputTputPerTotalMw):
    前者 × 1000 / 每 GPU 全包功耗(kW),与现有 per-MW 指标口径一致。

改动范围:指标注册与数据点构建(chart-utils.ts)、类型定义、图表配置(两种图表类型均含中英文标签与 Roofline 方向)、Y 轴下拉菜单、历史趋势插值、AI 图表目录,以及非官方运行叠加(?unofficialrun=)路径。新指标不再显示按解码/预填充池计算的免责声明,改为显示总 GPU 数归一化说明(中英双语);per-MW 变体保留功耗来源标注。已补充单元测试(含叠加路径),typecheck/lint/fmt/全量单测均通过。尚未用线上 ?unofficialrun= URL 做人工验证 — 本 PR 为 [WIP][DNM]。

🤖 Generated with Claude Code


Note

Low Risk
Additive chart metrics and derived fields with broad unit test coverage; no auth, API, or data-migration changes.

Overview
Adds two Y-axis metrics so output throughput can be compared across aggregated and disaggregated configs on a total-GPU basis: y_outputTputPerTotalGpu and y_outputTputPerTotalMw (per-MW variant uses the same normalized throughput).

For disaggregated runs, output tok/s is derived as (output_tput_per_gpu × num_decode_gpu) / (num_prefill_gpu + num_decode_gpu); non-disagg rows keep the existing per-GPU output value. The same logic is applied in createChartDataPoint, historical trend interpolation (useInterpolatedTrendData), chart config (interactivity + e2e, EN/ZH labels, rooflines), throughput dropdown, AI chart prompts/labels, and roofline marking.

UI copy: the per-pool disagg caveat is not shown for these metrics; instead a bilingual TotalGpuNote explains total-GPU normalization. Per-MW total-GPU still shows power source badges.

Tests cover transform, rooflines, overlay remapping, and assumption notes.

Reviewed by Cursor Bugbot for commit 4ebb82f. Bugbot is set up for automated code reviews on this repo. Configure here.

Add two Y-axis metrics that normalize output throughput over the TOTAL
GPU count instead of decode GPUs only:

- y_outputTputPerTotalGpu = (output tok/s/gpu * num_decode_gpus) /
  (num_prefill_gpus + num_decode_gpus); equals output tok/s/gpu for
  aggregated (non-disagg) configs.
- y_outputTputPerTotalMw = (outputTputPerTotalGpu * 1000) / all-in
  utility power per GPU (kW).

Wired through Y_AXIS_METRICS, createChartDataPoint, roofline
computation/marking, chart config (EN/ZH labels for both chart types),
Y-axis dropdown, historical-trend interpolation, AI-chart metric
catalog, and the unofficial-run overlay path. The per-pool disagg
caveat does not apply to these metrics; they instead get a note
explaining the total-GPU normalization, and the per-MW variant keeps
the power source badges.

中文:新增两个按总 GPU 数归一化输出吞吐量的 Y 轴指标:
y_outputTputPerTotalGpu =(每解码 GPU 输出吞吐量 × 解码 GPU 数)/
(预填充 + 解码 GPU 总数),聚合配置下与每 GPU 输出吞吐量一致;
y_outputTputPerTotalMw = 前者 × 1000 / 每 GPU 全包功耗(kW)。
已接入指标注册、数据点构建、Roofline 计算与标记、图表配置(含中文标签)、
Y 轴下拉菜单、历史趋势插值、AI 图表目录及非官方运行叠加路径,
并为新指标添加总 GPU 数归一化说明(不再显示按解码/预填充池计算的免责声明)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@functionstackx
functionstackx requested a review from adibarra as a code owner July 22, 2026 00:52
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
inferencemax-app Ready Ready Preview, Comment Jul 22, 2026 12:53am

Request Review

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant