Skip to content

docs: steady-state metrics reporting design proposal - #447

Open
nv-alicheng wants to merge 1 commit into
mainfrom
doc/alicheng-steady-state-design
Open

docs: steady-state metrics reporting design proposal#447
nv-alicheng wants to merge 1 commit into
mainfrom
doc/alicheng-steady-state-design

Conversation

@nv-alicheng

Copy link
Copy Markdown
Collaborator

Post-processing step (and ad-hoc CLI over events.jsonl) that reports steady-state metrics — super-pass windowing, guarded drain-tail cut, CoV ensemble + trend gate (drift up/down), hairball, edge-case handling.

What does this PR do?

Adds a design doc for a new steady-state window detection and metrics reporting feature

Type of change

  • Bug fix
  • New feature
  • Documentation update
  • Refactor/cleanup

Related issues

cc @arekay-nv to tag any related issues

Testing

  • Tests added/updated
  • All tests pass locally
  • Manual testing completed

Checklist

  • Code follows project style
  • Pre-commit hooks pass
  • Documentation updated (if needed)

@nv-alicheng
nv-alicheng requested a review from a team August 13, 2026 23:55
@github-actions

Copy link
Copy Markdown

MLCommons CLA bot All contributors have signed the MLCommons CLA ✍️ ✅

Comment thread docs/steady-state-detection.md Outdated
Comment on lines +64 to +66
a run killed by `SIGKILL`/OOM before the log is flushed yields a truncated log;
the step must degrade to a best-effort result with a status flag rather than
fail (§5.6).

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe I am not reading it in the right way - but I thought it should fail if the original run fails?

# 1 Objective {#1-objective}

Add a post-processing step that runs after a benchmark completes and reports the
metrics the system _sustains in steady state_, rather than the whole-run average,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reword the metrics the system _sustains in steady state_ - one suggestion: reports the sustained steady state metrics

in the run report, reported as the **official result** with the whole-run
(`total`) metrics retained as supplementary context.
- Detect _when there is no steady state_ (a progressively degrading run) and say
so, instead of reporting a false point estimate.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion - "false point estimate" -> "unstable/unsteady result"?

- Detect _when there is no steady state_ (a progressively degrading run) and say
so, instead of reporting a false point estimate.
- Provide a single implementation reachable two ways: automatically at the end of
a run, and manually as a CLI over any recorded `events.jsonl`.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion - manually as a CLI -> manually as a post-processing step

- **Relative active concurrency.** In-flight count as a percentage of the
max-concurrency budget (100% at saturation).
- **Issue-time window.** A contiguous range of super-passes `[start, end)`. Its
measured set is every request _issued_ in that range. Throughput uses the

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This might requires some clarification - as far as i understand from below a sample issued but whose response is not received has no logged TTFT and is naturally excluded. So either it is issue only or issue with at least one event to be included in a window.

client. The window measures the sustained behavior of a healthy server; a
genuinely unhealthy server produces bad-but-real numbers, which the drift
detector (§5.5) distinguishes from transient pollution.
- **Super-pass.** One full **dataset pass** — `dataset_size` consecutive requests

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

minor - would it be easier to just call it a pass instead of a super-pass since it is a single pass over the entire dataset?

Comment on lines +341 to +342
(everything issued at `t=0`), so there is no client-side issue-time window and no
client-side drain boundary. The step detects the mode and finds the steady region

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for TPOT calculations, we could potentially use the completion-first_token time, but that would require the server to not evict requests in decode phase.

## 5.7 Complementary: staggered ("feathered") issuance

The ramp exists because the target concurrency `C` is filled as a burst. A
staggered fill flattens the ramp-up spike: issue in steps of `ceil(C/k)` and, between

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add a small definition for k.

Comment on lines +378 to +382
- **ISL / OSL** are reported for analytics, not as validation numbers: once the
window is allowed to drop samples (not enforcing full dataset-pass boundaries),
the input/output-length distribution is skewed relative to the constructed
dataset and is no longer a meaningful validation quantity, though it remains
useful for analysis.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the window is allowed to drop samples, should the ISL/OSL statistics be computed for the samples included in the measurement?


# 6 Open questions {#6-open-questions}

- **Default parameters.** The warmup band, trailing-window length, per-percentile

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we ignore the first pass/super-pass over the dataset as a warmup pass and the other parameters can be benchmark specific decided by TF?

- **Guard distance measure.** The exact two-sample statistic and acceptance bound
for the per-token-invariance guard (§5.4) need to be fixed.
- **No-steady-state runs.** When no steady state is found (a tracked metric is
Drifting Up), should the run be reported _invalid_ — analogous to legacy

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should declare the gates for each benchmark and also define whether a submission should be invalid if it fails a certain gate. It should be a benchmark TF decision on what gates to include.

Post-processing step (and ad-hoc CLI over events.jsonl) that reports
steady-state metrics — super-pass windowing, guarded drain-tail cut,
CoV ensemble + trend gate (drift up/down), hairball, edge-case handling.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@nv-alicheng
nv-alicheng force-pushed the doc/alicheng-steady-state-design branch from 102896c to 5e936f6 Compare August 18, 2026 17:36
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.

3 participants