Skip to content

Migrate downstream consumers to multi-metric replay API (#5139)#5139

Open
ltiao wants to merge 3 commits intofacebook:mainfrom
ltiao:export-D98741814
Open

Migrate downstream consumers to multi-metric replay API (#5139)#5139
ltiao wants to merge 3 commits intofacebook:mainfrom
ltiao:export-D98741814

Conversation

@ltiao
Copy link
Copy Markdown
Contributor

@ltiao ltiao commented Apr 3, 2026

Summary:

The experiment replay system (MapDataReplayMetric, MapDataReplayRunner, replay_experiment) is hardcoded for single-objective optimization, blocking multi-objective early stopping. This diff series extracts shared state into a MapDataReplayState coordinator.

This diff (3/3) migrates all downstream consumers of replay_experiment and estimate_hypothetical_early_stopping_savings from the deprecated metric= (singular) kwarg to the new metrics= (list) API introduced in D98741816, and removes the backward-compat shim from experiment_replay.py.

Consumers updated:

  • ax/analysis/healthcheck/early_stopping_healthcheck.py

Differential Revision: D98741814

@meta-codesync
Copy link
Copy Markdown

meta-codesync bot commented Apr 3, 2026

@ltiao has exported this pull request. If you are a Meta employee, you can view the originating Diff in D98741814.

@meta-cla meta-cla bot added the CLA Signed Do not delete this pull request or issue due to inactivity. label Apr 3, 2026
@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Apr 3, 2026

Codecov Report

❌ Patch coverage is 99.43978% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 96.45%. Comparing base (227243c) to head (81f9fe4).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
ax/metrics/map_replay.py 95.91% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5139      +/-   ##
==========================================
+ Coverage   96.40%   96.45%   +0.05%     
==========================================
  Files         613      613              
  Lines       68191    68458     +267     
==========================================
+ Hits        65740    66032     +292     
+ Misses       2451     2426      -25     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

ltiao added 3 commits April 3, 2026 12:52
Summary:

The experiment replay system (`MapDataReplayMetric`, `MapDataReplayRunner`, `replay_experiment`) is hardcoded for single-objective optimization, blocking multi-objective early stopping. `MapDataReplayMetric` conflates data serving with progression state, so multiple metrics cannot share a coherent timeline. This diff series extracts shared state into a `MapDataReplayState` coordinator.

This diff (1/3) adds the `MapDataReplayState` class -- a shared state coordinator that manages normalized cursor-based progression across multiple metrics and trials. Uses a global min/max MAP_KEY to preserve cross-metric timing alignment. Serves original MAP_KEY values; downstream ESS normalizes independently via `_maybe_normalize_map_key`.

Existing `MapDataReplayMetric` and helpers are unchanged in this diff.

Differential Revision: D98741817
…layState (facebook#5138)

Summary:

The experiment replay system (`MapDataReplayMetric`, `MapDataReplayRunner`, `replay_experiment`) is hardcoded for single-objective optimization, blocking multi-objective early stopping. `MapDataReplayMetric` conflates data serving with progression state, so multiple metrics cannot share a coherent timeline. This diff series extracts shared state into a `MapDataReplayState` coordinator.

This diff (2/3) rewrites `MapDataReplayMetric` and `MapDataReplayRunner` to delegate to the shared `MapDataReplayState` introduced in D98741817. Also updates `replay_experiment` and `estimate_hypothetical_early_stopping_savings` for multi-metric support: accepts `metrics: list[Metric]`, builds single-objective or multi-objective `OptimizationConfig`, extracts objective thresholds from the historical config, re-indexes non-contiguous trial indices, and deprecates `num_samples_per_curve`. Backward-compat `metric=` kwarg preserved for downstream callers (removed in D98741814).

Differential Revision: D98741816
Summary:

The experiment replay system (`MapDataReplayMetric`, `MapDataReplayRunner`, `replay_experiment`) is hardcoded for single-objective optimization, blocking multi-objective early stopping. This diff series extracts shared state into a `MapDataReplayState` coordinator.

This diff (3/3) migrates all downstream consumers of `replay_experiment` and `estimate_hypothetical_early_stopping_savings` from the deprecated `metric=` (singular) kwarg to the new `metrics=` (list) API introduced in D98741816, and removes the backward-compat shim from `experiment_replay.py`.

Consumers updated:
- `ax/analysis/healthcheck/early_stopping_healthcheck.py`

Differential Revision: D98741814
@meta-codesync meta-codesync bot changed the title Migrate downstream consumers to multi-metric replay API Migrate downstream consumers to multi-metric replay API (#5139) Apr 3, 2026
@ltiao ltiao force-pushed the export-D98741814 branch from 71a3b7b to 81f9fe4 Compare April 3, 2026 19:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed Do not delete this pull request or issue due to inactivity. fb-exported meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants