Skip to content

Rewrite MapDataReplayMetric and MapDataReplayRunner to use MapDataReplayState#5138

Open
ltiao wants to merge 2 commits intofacebook:mainfrom
ltiao:export-D98741816
Open

Rewrite MapDataReplayMetric and MapDataReplayRunner to use MapDataReplayState#5138
ltiao wants to merge 2 commits intofacebook:mainfrom
ltiao:export-D98741816

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. 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

ltiao added 2 commits April 3, 2026 10:15
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

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
@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 D98741816.

@meta-cla meta-cla bot added the CLA Signed Do not delete this pull request or issue due to inactivity. label Apr 3, 2026
ltiao added a commit to ltiao/Ax that referenced this pull request Apr 3, 2026
…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
@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.76550% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 96.44%. Comparing base (227243c) to head (45fb63d).

Files with missing lines Patch % Lines
ax/early_stopping/experiment_replay.py 73.68% 10 Missing ⚠️
ax/metrics/map_replay.py 95.91% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #5138      +/-   ##
==========================================
+ Coverage   96.40%   96.44%   +0.03%     
==========================================
  Files         613      613              
  Lines       68191    68472     +281     
==========================================
+ Hits        65740    66036     +296     
+ Misses       2451     2436      -15     

☔ 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 a commit to ltiao/Ax that referenced this pull request Apr 3, 2026
…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
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