Skip to content

bench: parallelize + resume the Curve-B re-eval (HP-search sensitivity) #120

Description

@davorrunje

Context

PR #117's Curve B (test metric of the running incumbent) is reconstructed by re-evaluating each best-so-far changepoint config on the test set via final_eval. Today this re-eval is serial in a single process: it is launch-bound on the tiny datasets (one CPU core pegged, GPUs ~idle), and it writes its output JSON only at the very end (no checkpoint, so a killed run restarts from scratch). Because of the cost, Curve B is omitted for compas and loan (# re-eval = 0 in the docs saturation table).

Goal

Make the Curve-B re-eval (a) parallel across the device pool and (b) resumable, so it is ~10–20× faster and restartable — then regenerate compas and loan Curve B.

Where

  • benchmarks/_common/sensitivity_report.py:incumbent_test_curve — the serial per-incumbent final_eval loop (a per-incumbent progress log already exists via progress_label).
  • benchmarks/sensitivity.pyextract_dataset, _cmd_run.
  • benchmarks/_common/gpu_pool.py:fan_out — the shared work-stealing subprocess pool to reuse.

Proposed approach

Emit the independent incumbent re-evals (28 per dataset here; or per-(dataset,flavor)) as jobs and fan them across GPU slots via fan_out (oversubscribe — nets are ~0.7 GB). Memoize each incumbent's trial_idx → test IQM to a small cache file so a restart skips completed ones. Then run compas/loan and commit their curve JSONs + the updated figure.

Acceptance criteria

  • Curve-B re-eval runs concurrently across ≥2 GPU slots (GPU utilization no longer ~single-stream).
  • A killed+restarted re-eval resumes (completed incumbents not recomputed).
  • benchmarks/results/alternate-base/curves/{compas,loan}.json contain Curve B; figure regenerated; docs "omitted for compas/loan" note removed.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestfollow-upDeferred work captured as a self-contained issue

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions