Split benchmark fields per type: schema 2 rejects fields the type does not use - #405
Closed
ishandhanani wants to merge 1 commit into
Closed
ishandhanani wants to merge 1 commit into
ishandhanani wants to merge 1 commit into
Conversation
ishandhanani
marked this pull request as ready for review
September 7, 2026 19:17
ishandhanani
requested review from
alec-flowers,
csahithi and
nlevin-ui
as code owners
September 7, 2026 19:17
Closed
…s not use Every runner now declares the BenchmarkConfig fields it reads as config_fields, next to a shared set every type may set (client placement, sweep, aiperf plumbing, post-processing). SrtConfig rejects a schema: 2 recipe that sets a field outside shared + its type's fields, naming the stray fields and the accepted ones; a schema 1 recipe gets a warning and keeps loading. Before this, a field the runner never read (isl on gsm8k, num_shots on sa-bench) was a silent no-op. Checked against the full recipe corpus: 555 historical in-repo recipes plus 481 downstream InferenceMAX recipes, 1179 variants after override expansion. The rule rejects exactly one (a manual-type recipe carrying isl/osl/concurrencies); every other field set per type is accepted.
ishandhanani
force-pushed
the
idhanani/srt2-15-benchmark-fields
branch
from
September 8, 2026 03:53
ed6f063 to
a0e1d6d
Compare
Collaborator
Author
|
Consolidated into #407, which carries these same commits as one PR against main (this description is reproduced there as one of its parts). Closing to keep review in one place; the branch stays for per-step reference via stack #398. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #404 (Track 2, the deferred benchmark union from #385). Draft until the stack below it merges.
What
BenchmarkConfigis one flat dataclass with every type's fields on it, so a field the runner never reads (islongsm8k,num_shotsonsa-bench) loads fine and silently does nothing. Each runner now declares the fields it reads asconfig_fields, next to a shared set every type may set (client_placement,client_dedicated_node,colocate_with_frontend,sweep,aiperf_package,aiperf_args,export_node_metrics).schema: 2recipe that sets a field outside shared + its type's fields is rejected at load, naming the stray fields and the accepted ones.config_fields; a test asserts every declared field exists onBenchmarkConfig.Checked against the whole corpus
The rule was run over the 555 historical in-repo recipes and the 481 downstream InferenceMAX recipes, 1179 variants after override expansion, each forced to
schema: 2. It rejects exactly one: amanual-type recipe carryingisl/osl/concurrencies. Every other field set per type is accepted. (The same pass surfaced two pre-existing, unrelated load failures in the downstream corpus: 98 recipes settelemetry.provider/default_frequency, which the currentTelemetryConfigdoes not have, and 6 setbenchmark.tokenizer_mode. Those fail onmaintoday and are not touched here.)Validation
tests/test_benchmark_fields.py: declared fields exist, each type accepts the field sets its recipes use, shared fields work for every type, schema 2 rejects with the expected message, schema 1 warns, defaults never count as set.