Timings Report Notebook¶
notebooks/generic/timings_report_mo.py is a marimo report for experiment timing
sidecars. It scans exports/**/timings.json, parses the repository's export
path convention, and renders a sorted table.
The expected path layout is:
exports/<family>/<environment>/<objective>/<num_agents>/<algorithm>/timings.json
The report also tolerates older/direct sidecars without an algorithm directory:
exports/<family>/<environment>/<objective>/<num_agents>/timings.json
Rows are sorted by environment, experiment/objective, number of agents, and
algorithm. Stage columns are discovered from the JSON files and ordered with the
known temporal-game stages first: training, checkpoint save, NashConv, and
AlphaRank. Stage values are shown as hours (runs) so multi-seed timings remain
compact while still showing how many entries contributed to the total.
The report loads a sibling timings_hardware.json, resolves the current runs'
hardware_id values, and displays the enforced memory allocation, accessible
CPU topology and clock source, and visible GPU model, VRAM, and bandwidth.
Multiple hardware IDs remain visible instead of being collapsed. Older timing
files without hardware IDs continue to show their embedded RAM fields as legacy
metadata.
The notebook reads the same timing JSON structure produced by
src.experiments.experiment_timings.record_timing(...): each top-level key is a
stage, and each stage may include total_seconds and a runs list whose entries
reference hardware records. For indexed stages, the report treats entries after the latest
run_idx == 0 as the current batch; for unindexed single-shot stages, it reports
the latest entry.