Skip to content

feat(gift-eval): notebook-aligned replication registry - #45

Merged
AzulGarza merged 24 commits into
mainfrom
feat/gift-eval-replication-registry
Oct 8, 2026
Merged

AzulGarza merged 24 commits into
mainfrom
feat/gift-eval-replication-registry

Conversation

@AzulGarza

@AzulGarza AzulGarza commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Adds configs/replication/ with 9 model families, notebook-traced params (TimesFM-3 context 15360, Moirai2 4000/2048 batch, Chronos-2 uncapped max_length + HF alias, t0-beta slug, etc.), and notebooks.yaml traceability.
  • Introduces a replication registry through eval, verify, and Modal so default configs/models.yaml and existing S3 results/ layout stay unchanged.
  • Writes replication outputs to s3://foundationforecast-gift-eval/results/replication/<run_id>/ with Modal run_replication_pilot (9 × m4_weekly/short) and run_replication_full (9 × 97), plus Makefile sync/verify targets and README workflow.
  • Adds tests/test_replication_config.py (HF alias match, pilot job count, param snapshots) and --replication on local run_model.

Test plan

  • cd experiments/gift-eval && uv run pytest tests/test_replication_config.py -n 0
  • Modal pilot: uv run modal run -m src.runners.run_modal::run_replication_pilot --run-id <RUN_ID>
  • make verify-replication-pilot RUN_ID=<RUN_ID> after sync
  • Full grid + make verify-replication-full RUN_ID=<RUN_ID> once pilot looks good

Made with Cursor

…flow

Add a separate replication config (9 families), S3 prefix, pilot/full entrypoints,
and verify/Makefile targets so we can re-run GIFT-Eval with official notebook params
without changing the default full-grid configs.

Co-authored-by: Cursor <cursoragent@cursor.com>
@codspeed

codspeed Bot commented Oct 5, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 17 untouched benchmarks


Comparing feat/gift-eval-replication-registry (9b3ca42) with main (43a2f7a)

Open in CodSpeed

AzulGarza and others added 2 commits October 6, 2026 13:00
Use leaderboard-style geomean checks for the full replication grid while
keeping strict per-job verify for CI and pilot. Drop Chronos-2 and FlowState
from the FF replication matrix and install foundationforecast from PyPI on Modal.

Co-authored-by: Cursor <cursoragent@cursor.com>
@AzulGarza AzulGarza mentioned this pull request Oct 6, 2026
1 task done
AzulGarza and others added 2 commits October 6, 2026 16:30
Chronos2Pipeline predict_quantiles can exhaust A10G memory at default batch sizes; retry with a smaller batch before failing the job.

Co-authored-by: Cursor <cursoragent@cursor.com>
…i OOM batches

Add Chronos-2 to the 8-family grid with batch 16, mount editable foundationforecast on Modal, optional --model-key for targeted backfills, partial-failure dispatch logging, and lower Moirai replication batch sizes for A10G.

Co-authored-by: Cursor <cursoragent@cursor.com>
@codecov

codecov Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

AzulGarza and others added 19 commits October 7, 2026 18:23
… S3 jobs in one walk

- Add Chronos Bolt base/small, Chronos-2 small, Toto 2 4M, PatchTST-FM r1,
  TiRex 1.1, Moirai 1.1 large and T0 alpha to configs/replication with
  notebook-aligned params; add autogluon--chronos-2-small to models.yaml.
- Replace per-job S3 exists() calls with a single fs.find() index
  (filter_jobs_by_s3_mode / index_s3_job_artifacts) and parse dataset
  names that contain '/'.
- Add --max-containers to run_replication_full and cap Modal fan-out.
- Skip aggregate verify for families whose HF reference is not published
  yet (REPLICATION_PENDING_HF_REFERENCE).
- Use google/timesfm-1.0-200m-pytorch repo id for TimesFM 1.0.

Co-authored-by: Cursor <cursoragent@cursor.com>
Add tests for parse_job_dir_suffix / filter_jobs_by_s3_mode, the 16-family
count, Chronos-2 small and Moirai 1.1 large replication params, and skip the
HF alias check for families pending a published reference.

Co-authored-by: Cursor <cursoragent@cursor.com>
…hPredictor

Lift the per-batch predict_quantiles retry closure out of Chronos._predict
so the halving logic is a plain callable that can be exercised without a GPU.
No behavior change.

Co-authored-by: Cursor <cursoragent@cursor.com>
Fake pipeline raises torch.cuda.OutOfMemoryError to check that Chronos-2
halves batch_size until it fits, keeps the reduced size for later batches,
re-raises when it cannot halve further, and that non-Chronos-2 pipelines
re-raise without a batch_size kwarg.

Co-authored-by: Cursor <cursoragent@cursor.com>
verify-replication-full passed the aggregate check but then crashed with
HTTP 404 while writing the analysis table: build_replication_table fetched
the GIFT-Eval reference for autogluon--chronos-2-small, whose results are
not published yet. Skip REPLICATION_PENDING_HF_REFERENCE keys like the
aggregate verify does, and treat a remote HTTPError like a missing local
reference (warn and skip) instead of aborting the run.

Co-authored-by: Cursor <cursoragent@cursor.com>
…_chronos

- test_replication_table.py: pending HF reference keys never hit the
  network; a 404 on the remote reference is skipped instead of raised.
- Fold the _QuantileBatchPredictor OOM back-off tests into
  tests/models/test_chronos.py next to the other Chronos tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
Per-model official vs replicated leaderboard aggregates (MASE, CRPS), their
relative difference, the per-config standard deviation of ours/official - 1,
and A10G wall time / cost. Markdown table plus a collapsible LaTeX source
(booktabs) for papers.

Co-authored-by: Cursor <cursoragent@cursor.com>
…lication table

sigma is now the standard deviation across the 97 configs of (ours - official)
on the Seasonal-Naive-normalized scale, i.e. the same units as the aggregate
columns, instead of the std of relative differences.

Co-authored-by: Cursor <cursoragent@cursor.com>
…F column

- Org first, alphabetical, shown once per group; models sorted by FF MASE.
- |Delta| (absolute relative difference) instead of signed Delta.
- 'Ours' renamed FF (FoundationForecast), defined in the note.
- LaTeX uses threeparttable so the note spans the table width, with no
  'Table N' caption; note states every model is within 2%.

Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the operator-oriented README with the experiment narrative (why,
replication table PNG, Pareto PNG, Makefile repro, infra, cite). Figures
only — no markdown/LaTeX tables.

Co-authored-by: Cursor <cursoragent@cursor.com>
Link the replication table and Pareto PNG via user-attachments URLs instead
of committing binaries to the tree.

Co-authored-by: Cursor <cursoragent@cursor.com>
Paper-ready tabular (threeparttable) with org grouping, |delta|, FF, and
shaded top-3 CRPS cells, under the hosted PNG.

Co-authored-by: Cursor <cursoragent@cursor.com>
Replace the HTML-styled PNG and the collapsible source with a rendered
booktabs table hosted on GitHub attachments.

Co-authored-by: Cursor <cursoragent@cursor.com>
…table

TimesFM 3, PatchTST-FM r2, and T0 beta are 1st/2nd/3rd on both metrics
for official and FF aggregates.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…phones

The landscape artboard shrank to unreadably small type in the GitHub
mobile README; the stacked 720px figure fills the column instead.

Co-authored-by: Cursor <cursoragent@cursor.com>
Host the 2x log-cost artboard via GitHub attachments instead of the
stacked phone crop.

Co-authored-by: Cursor <cursoragent@cursor.com>
Refresh the hosted README figure: Inter unchanged, only the callout
brand name uses the frontier color.

Co-authored-by: Cursor <cursoragent@cursor.com>
@AzulGarza
AzulGarza marked this pull request as ready for review October 8, 2026 19:09
@AzulGarza
AzulGarza merged commit 7c56dac into main Oct 8, 2026
11 checks passed
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.

1 participant