Skip to content

Requirements you must meet

Every binding constraint, grouped by what it constrains, with a note on how to tell whether you comply. Rules marked have a failure action of reject the submission.

The policy repository wins

This page summarises policy in submitter language. It does not restate it. Where this page and mlcommons/endpoints_policies disagree, the policy repository is correct and this page is a bug. Please report it.

Frontier structure

From §5.3, §5.4 and §5.6, with failure actions from §9.1.

Requirement How to check
≥ 8 measurement points including a dedicated Offline run; ≥ 7 if you elect C_max as the Offline result, or for an agentic benchmark endpoints-submission-cli check-submission — rule point-count
≤ 32 measurement points, Offline included rule point-cap
Exactly one Offline point for a non-agentic benchmark, none for an agentic one rule offline-point-present
≥ 1 point in Ultra Low Concurrency (1–C_min, C_min ≤ 32) rule ultra-low-concurrency-coverage
c_min_override, if used: an integer in 1–32 that matches a submitted point, the same on every point rule c-min-override (checker v1.5.1.0 or later)
≥ 1 point in each of Low, Medium, High Concurrency rules low- / med- / high-concurrency-coverage
C_max declared and > 32 rules system-description-valid (missing) and region-computation (≤ 32)
Every concurrency falls in a valid region (a dedicated Offline run is exempt) rule concurrency-in-range

Regions are computed in log-2 space from your own C_min and C_max. See Plan your Pareto frontier and Metrics and regions.

How the checker knows a benchmark is agentic

From the load pattern. A frontier whose points all use agentic_inference is checked as agentic; anything else is checked as single-turn, where a missing Offline point fails.

The Offline point

Required for non-agentic benchmarks, and not allowed for agentic ones (§5.7). You either make a dedicated Offline run or elect your C_max point; both are defined in §5.7.2, and what an Offline run is (dataset-sized concurrency, no TTFT requirement, reordering only within a pass) is in §5.7.1. What the checker does with it:

Requirement How to check
Declaration: offline: dedicated or offline: elected in that point's point.yaml; elected only on the C_max point rule offline-point-present
Dedicated run: system_tps ≥ 0.98 × the C_max point's, and concurrency ≥ C_max rule offline-ordering (flagged). The throughput half is skipped silently if no point sits at exactly C_max
Dedicated run uses the Offline load pattern Not checked: load-pattern exempts a dedicated Offline point

A dedicated run counts toward no region. An elected point keeps its own region and reports latency like any other point.

Per-point run requirements

Defined in §6 of the rules. The values at a glance:

Requirement Value How to check
Load pattern (§6.1) Fixed-concurrency for every point except a dedicated Offline run. poisson is invalid rule load-pattern
Steady-state duration (§6.2) 600 s at concurrency 1–32. Above 32: 1,200 s, or 2,400 s for agentic benchmarks rule point-duration, from checker v1.4.1.0. Earlier releases go by region and don't check the agentic 2,400 s
Completed queries (§6.4) At least one pass over the dataset, or the approved subset at concurrency 1–32 rule min-query-count
Samples issued (§6.4) A whole-number multiple of the dataset size —
Streaming (§6.5) Streaming responses on every fixed-concurrency point; a dedicated Offline run is exempt. stream_all_chunks may be either value rule streaming-config, which still requires stream_all_chunks: true
Sampling order (§6.5) Performance: with replacement. Accuracy: without replacement —

Section 6 is pending ratification

The duration and query-count values are marked as example values subject to working-group ratification, though they are stated as locked and Task Force-approved for the v0.7 round. Check Open questions before planning around them.

Warmup

Optional, capped at 24 hours per point, and it must not use performance-dataset samples; if the client does use the performance dataset, salting must be enabled (§6.3.1). Every point declares six warmup fields (§6.3.3), checked by rule warmup-present. Salting is not on by default in the client, so if your warmup uses the performance dataset you have to turn it on yourself; rule warmup-salt then warns, and reviewers may ask about it. Incomplete warmup documentation is grounds for a Methodology objection.

Accuracy

Accuracy validation runs are needed at the four mandatory region points plus the Offline point: 5 for non-agentic benchmarks, 4 for agentic (§5.3). How they're judged, single-turn per point or multi-turn on the average, is in §4.3. That count is fixed: submit exactly one validation result per mandatory point, none at the submitter's-choice points, because extra results are rejected at automated compliance (§4.3, §9.1). If you elect your C_max point as the Offline result, that point's one run covers both (§5.7.2). Accuracy runs use the same configuration and stack as the performance runs, on the un-salted accuracy dataset, and there is no tolerance (Reproducibility Expectations).

With c_min_override, the Ultra Low validation result can come from any point you designate in 1–C_min; without it, it comes from the point at C_min (§4.3).

Agentic: inline accuracy at every point

Every agentic point, submitter's-choice points included, also reports an inline score from its own performance run, and each must pass on its own. Inline scores don't count toward the four validation runs and aren't part of the SWE-bench mean (§4.3).

Requirement How to check
Accuracy results at every required point rule accuracy-coverage
The results pass the quality target rule accuracy-gate, or for the agentic models agentic-accuracy-inline, agentic-accuracy-swebench and agentic-osl-range

The targets are not published

The per-benchmark targets are marked [WIP] in §2.9.8. For the legacy benchmarks the checker gates against the MLPerf Inference targets (see Benchmarks and models). For the agentic benchmarks it uses the targets in the client's agentic README. Tracked as C2 in Open questions.

Seeds

Every point records the same published seed set, adopted within its window and bound for the life of the submission (Submission Rules §4.6). The checker tests this as seed-set-consistency and seed-set-membership; the exact test, including the rule for amendments, is the Seed-set validity row of §9.1. The per-query salt is seeded from the same set and has its own requirements in §2.9.5.1.

Consistency across the frontier

Same model, endpoint configuration, software stack and seed set at every point (Configuration consistency in §9.1). The checker also requires the same dataset (config-consistency-dataset). Every point's system_desc.json must describe the same system, and the whole frontier uses one system_power.json, and only the per-point node count may vary (§4.5.3). If you use speculative decoding, it's the same drafter at every point. Freeze the stack before the first run.

Power normalization

Standardized results, CoP and CoN, are normalised by provisioned power, estimated from the rated power of CPUs, accelerators, scale-up switches and, for multi-node systems, scale-out NICs, plus a fixed overhead, with scale-out switch power added outside that overhead. The model is in Power Model, the evidence standard and what MLCommons does with gaps in Methodology, partial racks, mixed racks and node rounding in §4.5.2.1, and the per-point metric in §4.5.3. RDI may report it; Serviced is deferred.

Each point is normalized per node set. Run every point with as much of the provisioned hardware engaged as fits (data-parallel replication, DP); a shortfall goes in dp_shortfall in point.yaml (§4.5.3). A multi-node, rack-scale or heterogeneous system needs a complete system_power.json.

Requirement How to check
system_power.json for each system, at results/<system>/system_power.json rule power-descriptor
system_tps_per_kw = system_tps / point_power_kw rule metric-consistency-tps-per-kw; the CLI release this page was verified against checks system_tps / provisioned_power_kw
Values you leave out are estimated by MLCommons and the result tagged "MLC Estimated Power" rule power-estimated warns

Field names and an example: system_power.json.

Section 4.5 is pending ratification

The tiers, overhead fractions, reference components and even the metric's name and units are marked as subject to change (§4.5).

Disclosure by division

What each division has to disclose (source code, hardware, parallelism mapping, software stack) is tabulated in §2.7 Transparency Requirements. The minimum software list for Standardized and RDI is in §8.4. Serviced additionally discloses pricing and rate limits (§2.3.1).

Reproducibility

Standardized must be reproducible by a third party on a third-party system; Serviced on the public endpoint; RDI has no requirement (§2.6). The variability margins reviewers apply (10% independent re-run, 5% same system, throughput only) are in Reproducibility Expectations.

Tokenization

Official output token counts come from the client-side reference tokenizer, applied once to the reconstructed response through the model's reference chat template, not from your serving stack (§2.8). Visible output, tool calls and reasoning all count.

Padding and duplication invalidate the point

Duplicating content across response fields, or padding any field, to inflate token counts invalidates the affected measurement point (§2.8). Reviewers also look for leading content emitted only to stop the TTFT clock (§9.2).

See also

These rules can still change

The MLPerf Endpoints v1.0 rules are published on the policy repository's main branch, and working-group changes are still merged into it. Sections marked [TENTATIVE], [WIP], [WG Open Item] or [WG Decision Required] upstream are the most likely to move. Before committing hardware time to a submission, read Open questions and WIP rules.

Last verified against: mlcommons/endpoints_policies@main (4ba8224), 2026-10-30, and mlcommons/endpoints-submission-cli@main (a42a056, v1.1.0.0), 2026-10-02.