-
Notifications
You must be signed in to change notification settings - Fork 147
Introduce run.yml policy and run-scoped experiment logging for Grid benchmarks#625
Introduce run.yml policy and run-scoped experiment logging for Grid benchmarks #625
Conversation
...tic ordering of benchmarks.
...able stat and metric keys and a resolver + catalog.
...ole selection, and logging selection are now run-level policies. Produces system configuration and dataset artifact as well.
Before you submit for review:
- Does your PR follow guidelines from CONTRIBUTIONS.md?
- Did you summarize what this PR does clearly and concisely?
- Did you include performance data for changes which may be performance impacting?
- Did you include useful docs for any user-facing changes or features?
- Did you include useful javadocs for developer oriented changes, explaining new concepts or key changes?
- Did you trigger and review regression testing results against the base branch via Run Bench Main?
- Did you adhere to the code formatting guidelines (TBD)
- Did you group your changes for easy review, providing meaningful descriptions for each commit?
- Did you ensure that all files contain the correct copyright header?
If you did not complete any of these, then please explain below.
@ashkrisk
ashkrisk
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just started looking through it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
unused?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe so. I was experimenting with logging early last year. This looks to be leftover. Not part of this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like this class is not wired up. Should we remove the file altogether? Execution time is (1 / QPS) anyway.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it has been unused but is unrelated / orthogonal to this PR. Please open an issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we change this to cv_pc_qps to make it a little more obvious what this is?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need the field onDiskIndexVersion? It has a getter and setter but these aren't referenced anywhere. It doesn't seem to affect any functionality either, including logging / reporting.
Similarly for the eponymous field in RunConfig.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch. I should have wired in the check. The legacy version does indeed check the on-disk index version against the yaml config to ensure that the parameters are revisited when the index is revised.
Summary
This PR introduces YAML-driven benchmark compute + reporting selection, and adds run-scoped logging artifacts (
sys_info.json,dataset_info.csv,experiments.csv) so Grid benchmark runs are reproducible and easier to analyze offline. Reporting/benchmark policy is now run-level (viayaml-configs/run.yml), while dataset YAML files are simplified to dataset-tuned construction/search settings only.Key changes
Run-level policy file:
yaml-configs/run.ymlbenchmarks: what to compute)console: subset + named metrics)logging: selection + sink type + run metadata)Config versioning clarity
versionfield toonDiskIndexVersion(still validated againstOnDiskGraphIndex.CURRENT_VERSION).yamlSchemaVersion(starting at 1) to version YAML schema independently of on-disk index header format.version: 6.Compute vs display vs logging separation
Metric.keyidentifiers for all benchmark outputs and telemetry so selection and CSV columns are robust (no header-string matching).Run-scoped artifacts and logging
logging/<run_id>/sys_info.json— host/OS/JVM/SIMD/threading/memory + stablesystem_iddataset_info.csv— one row per dataset used in the runexperiments.csv— flat, append-only table of fixed params + selected output-key columnsexperiments.csvschema stability:ExperimentsSchemaV1Plumbing / ergonomics
RunArtifactsto centralize:dataset_info.csv)experiments.csv)run.yml+RunArtifacts(no manual wiring of compute/display/logging maps).RunArtifactsobject instead of many reporting parameters.RunArtifacts.disabled().Legacy compatibility
yamlSchemaVersionare treated as schema 0:search.benchmarksis supported for legacy behavior whenrun.ymlis absentBehavior
run.ymlhaslogging.type):logging/<run_id>/loggingsection or blanktypeinrun.yml):RunArtifactsbecomes a no-op viaRunArtifacts.disabled()Notes / limitations
experiments.csvusesMetric.keystrings as column names for benchmark outputs/telemetry; missing values are empty CSV fields.sys_info.jsonSIMD reports the configured vector width viaio.github.jbellis.jvector.vector_bit_size(withsimd_config_present), avoiding brittle runtime probing.sys_info.jsondistinguishes build executor parallelism vs parallel streams (common FJP), explaining why build/query values can differ.version→onDiskIndexVersion, plus removal of dataset-level benchmarks/console/logging fields in favor ofrun.yml.Example of run.yml and yaml-config for dataset
ada002-100k yml run ymlExamples of artifacts (sys_info, dataset_info, experiments)
experiments csv dataset_info csv sys_info json