Skip to content

PreOptimizationTimes runtime baseline — imaging + interferometer + datacube (local CPU)#62

Merged
Jammy2211 merged 7 commits into
mainfrom
feature/profiling-preopt-campaign
Jul 11, 2026
Merged

PreOptimizationTimes runtime baseline — imaging + interferometer + datacube (local CPU)#62
Jammy2211 merged 7 commits into
mainfrom
feature/profiling-preopt-campaign

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Closes the phase-3 likelihood_runtime leg of the polish.md PreOptimizationTimes campaign (#56) at the "done enough" point directed by the user — a later profiling-agent re-run will extend these same cells with laptop-GPU and HPC-A100 legs.

What landed

  • Campaign tooling (already on the branch): sweep.py instrument axis + --skip-existing resume, build_baseline.py snapshot tool, CPU-usability timeout-and-classify policy, aggregate fixes (array-safe check_pinned, cell-prefixed config stems), and dropping the inherently-blocked mge alma+ dense-mapping cells (62GB gather).
  • Results: datacube delaunay runtime results (sma fp64/mp + alma unusable-classified).
  • Aggregation + freeze: all swept cells aggregated into per-cell comparison.json (12 cells), snapshotted into results/baselines/PreOptimizationTimes/, README dashboards refreshed.

Baseline coverage (local CPU, fp64/mp, dense + sparse)

  • imaging: mge/pixelization/delaunay × ao/hst/jwst
  • interferometer: mge/pixelization/delaunay × sma/alma
  • datacube: delaunay/sma

Deferred (explicit, for the next re-run)

  • Laptop-GPU + HPC-A100 legs (RAL was down; user runs GPU legs when the laptop is free).
  • datacube/delaunay/sma headline renders (raw JSON lacks the headline field the dashboard reads) — cosmetic, refreshes on re-aggregate.

This unblocks the dashboard leg of preopt-breakdown-dashboard (#59), which was gated on this runtime baseline.

🤖 Generated with Claude Code

Jammy2211 and others added 7 commits July 11, 2026 11:00
- sweep.py CELLS gains the campaign instrument axis
  (class, model, instruments): per-instrument runs with --instrument
  passthrough and 3-level output dirs (aggregate.py already reads them);
  --only/--skip match class/model or class/model/instrument
- scripts/build_baseline.py: snapshot runtime comparison.json trees into
  results/baselines/<Name>/ + rendered one-page <Name>.md (the
  PreOptimizationTimes convention from the phase-1 design note); the
  dashboard baseline column activates automatically

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…62GB dense-mapping gather, confirmed by first pass)
User-directed campaign policy: a config whose profiling run exceeds the
per-run wall-clock cap, or whose per-call cost exceeds ~1 min, is not a
CPU-viable configuration — the classification is the result and the full
timing belongs to the A100 rows.

- sweep.py --per-run-timeout: kill + write <cell>_<config>.unusable.json
  marker (honoured by --skip-existing)
- aggregate.py folds markers into comparison.json ({"cpu_unusable": true})
- dashboard renders GPU-only for markers and "(unusable)" for measured
  per-call > 60 s on local backends
- retroactive markers: interferometer delaunay alma fp64 (OOM) and
  alma_high fp64+mp (killed under policy)
- policy recorded in results/notes/design_lock_in.md

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
#56)

Two campaign-flushed bugs from the phase-2 conversion:
- check_pinned assumed scalar `got`; the batched vmap array crashed
  float() whenever a pin existed (all six pinned HST sparse runs died at
  the final check — after their JSONs were written, so no data lost).
  Now assert_allclose-semantics over the array, reporting the worst
  element.
- aggregate.py matched bare config stems but per-cell scripts have
  written cell-prefixed names (mge_local_cpu_fp64.json) since #44 — the
  phase-2 synthetic test wrote bare names and masked it. Discovery and
  aggregation now strip the cell prefix (pre-#44 bare shape still
  accepted); regression test added (26/26).

Verified live: aggregate now emits real comparison tables (imaging/mge/hst:
fp64 117.7ms · mp 164.3ms · sparse variants).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ma unusable-classified (#56)

Freeze partial PreOptimizationTimes runtime matrix; laptop-GPU + HPC-A100
legs deferred to a later profiling-agent re-run.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Aggregate all swept likelihood_runtime cells into per-cell comparison.json
(12 cells: imaging mge/pixelization/delaunay × ao/hst/jwst, interferometer
× sma/alma, datacube delaunay sma), snapshot into
results/baselines/PreOptimizationTimes/, and refresh the README dashboards.

This is the pre-optimization runtime baseline for imaging + interferometer +
datacube on local CPU (fp64/mp, dense + sparse). Laptop-GPU and HPC-A100
legs are deferred to a later profiling-agent re-run, which will extend these
same cells; the baseline is refreshable in place.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Jammy2211 Jammy2211 added the pending-release Queued for the next release label Jul 11, 2026
@Jammy2211 Jammy2211 merged commit 27d1882 into main Jul 11, 2026
1 check passed
@Jammy2211 Jammy2211 deleted the feature/profiling-preopt-campaign branch July 11, 2026 10:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pending-release Queued for the next release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant