Skip to content

research: point-source CPU phase 4c — MAX_CONTAINING_SIZE headroom A/B (PyAutoArray#583) - #335

Merged
Jammy2211 merged 9 commits into
mainfrom
feature/pointsolver-mcs-headroom
Sep 27, 2026
Merged

Jammy2211 merged 9 commits into
mainfrom
feature/pointsolver-mcs-headroom

Conversation

@Jammy2211

Copy link
Copy Markdown
Contributor

Summary

Phase 4c data for the point-source CPU campaign (PyAutoArray#583): the measured A/B behind raising MAX_CONTAINING_SIZE from 15 to 20. The human chose N = 20 for 3 triangles of headroom over the observed maximum of 17, accepting a scalar cost of about 6 %, just over the ~5 % budget.

RAL 8490H, job 358976 (quotable; loaded node, loadavg ~207, so compare the ratios):

MCS median ms vs control [90 % CI] compile vmap-16 ms/L
15 1.466 1.000 [0.982, 1.019] 4.29 s 0.821
18 1.538 0.953 [0.934, 0.965] +4.5 % 0.856
20 1.557 0.941 [0.922, 0.953] +7.0 % 0.892
24 1.597 0.918 [0.900, 0.927] +14.4 % 0.925
  • Completeness: 1.000 for every row.
  • Uncapped max per step (prior draws): 17, 13, 11, 9, 7, 5, 5, 5. At MCS 15 only prior draw 12 is truncated (step 0); at 18 and above, nothing is.
  • Bit-identical: image sets, positions, log L and the fiducial, at every cap.
  • A100, job 359102: 1.00×, compile +3.2 %.
  • Laptop witness: agrees.

Scripts Changed

  • scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py:
    • An --mcs-headroom preset (control + mcs18/20/24) and a --configs selection. The default grid is unchanged.
    • Uncapped NumPy containing counts for every refinement step over the prior, stress and stream draws.
    • Two new gates: mcs_no_unexplained_change, and a probe that the __defaults__ patch keeps step0_layout=None.
    • A gradient allowance for MCS rows only, ≤ 1e-12 relative and only when log L is bit-identical; the observed max is recorded. Step-0 route rows and control stay strictly bit-identical.
  • hpc/batch_cpu/…_solver_config_sweep_mcs_ral_cpu_fp64 and hpc/batch_gpu/…_solver_config_sweep_mcs_a100_fp64: new RAL submits with measured-wall WALL-BASIS rows. check_submits.py --check passes.
  • results/breakdown/point_source_image/solver_config_sweep_mcs_{hpc_ral_cpu,hpc_ral_a100,laptop_cpu}_fp64.{json,png} and the two RAL job logs.
  • results/notes/point_source_cpu_campaign.md: a Phase 4c section.

Upstream PR

PyAutoLabs/PyAutoArray#584 (plus the companion PyAutoLabs/PyAutoLens#753)

Test Plan

  • The harness ran end to end on the laptop, RAL 8490H and RAL A100, with all_gates_pass: true on all three.
  • build_readme.py --check and check_submits.py --check are clean, and there are no local paths in any artefact.
  • The targeted smoke (31/31) and the workspace_test point-source pins pass against the library branches.

Part of PyAutoLabs/PyAutoArray#583.

Generated by the PyAutoLabs agent workflow.

🤖 Generated with Claude Code

Jammy2211 and others added 9 commits September 27, 2026 18:16
…config_sweep (phase 4c)

--mcs-headroom runs control (library MCS 15) + mcs18/mcs20/mcs24 at the
production geometry; --configs narrows it, and the default 4a grid is
unchanged. Adds per-step uncapped NumPy containing counts on the prior,
stress and stream draws with per-MCS draws exceeding the cap at every
step, the mcs_no_unexplained_change gate (a row may differ from the
control only where the control's cap was truncating), and a probe that
the __defaults__ patch binds by name (step0_layout=None kept).
Adds the RAL 8490H submit with a measured-wall WALL-BASIS row.

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… MCS gate

The first laptop witness flagged one stream gradient differing from the
control by 3e-15 relative at all three caps, with log L bit-identical:
the backward pass accumulates over the padded (MCS, ...) axis, so the
padded length changes XLA's reduction order. Such changes are now listed
with max_rel_delta_vs_control and an explicit explanation instead of
failing the gate.

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…scope the rounding allowance

The GRAD_ROUNDING_RTOL allowance applies only to MCS rows (padded (mcs, 2)
shape change reorders the backward sum) and only with log L bit-identical;
step-0 route rows and the control stay strictly bit-identical. A log L
difference is only ever an explained (truncation) change, never a tolerance.

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ot quotable)

control (MCS 15) vs 18/20/24, 200 prior + 200 stress draws, 20 x 20:
all_gates_pass true; fiducial 7.743201200876812 bit-identical at every
cap; no image-set change on any draw. Uncapped prior max per step
[17, 13, 11, 9, 7, 5, 5, 5]; only prior draw 12 exceeds 15 (step 0,
17), and its positions and log L are bit-identical at every cap.

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hase 4c)

euclid-ral-compute-10-4, 8 CPUs, loadavg ~206-210 (236 cores), wall 397 s,
all_gates_pass true, provenance asserted (mirror PyAutoArray e281abf3,
includes #580). Control 1.466 ms; row/control median mcs18 1.050, mcs20
1.062, mcs24 1.090; compile +4.5 / +7.0 / +14.4 %. Zero image-set,
position or log L changes on 200 prior + 200 stress + 16 stream draws;
fiducial 7.743201200876812 bit-identical at every cap; two gradient
instances differ by <= 6.1e-14 relative (padded-length reduction order).
Uncapped max per step [17, 13, 11, 9, 7, 5, 5, 5]; only prior draw 12
exceeds 15 (step 0).

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--mcs-headroom --configs control,mcs20 on the RAL A100 against the shared
mirror (MAX_CONTAINING_SIZE 15 is the control; 20 is the traced patch, so
no library branch is needed). JAX_PLATFORMS=cuda + JAX_PLATFORM_NAME=cuda,
backend asserted gpu. WALL-BASIS: measured-wall 432 s (phase-4b A100 job
357322), headroom 3.

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…2 (phase 4c)

euclid-ral-gpu-1 A100 80 GB, JAX_PLATFORMS=cuda + JAX_PLATFORM_NAME=cuda,
mirror libraries (PyAutoArray e281abf3, MCS 15 control), wall 270 s,
all_gates_pass true. mcs20 / control median 0.997 (control/row 1.003
[0.999, 1.005]), vmap-16 flat, compile +3.2 %; fiducial
7.743201200876806 bit-identical; zero image-set changes; max gradient
rel delta 1.98e-14 (padded-length rounding, log L bit-identical).

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
RAL 8490H quotable table (job 358976, loaded node, ratios valid), laptop
witness, A100 row (job 359102), completeness and per-step uncapped counts
(max 17, prior draw 12 step 0, explained), the scoped gradient allowance
(1e-12, observed max 6.08e-14), fiducial bit-identical, the human
decision N = 20 at +6.2 % (cost-leg miss accepted), suites, pins, the
31/31 targeted smoke and the revisions.

Refs PyAutoLabs/PyAutoArray#583

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…4a, not re-verified

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Jammy2211 Jammy2211 added the pending-release PR queued for the next release build label Sep 27, 2026
@Jammy2211
Jammy2211 merged commit c1523ef into main Sep 27, 2026
1 check passed
@Jammy2211
Jammy2211 deleted the feature/pointsolver-mcs-headroom branch September 27, 2026 19:05
@Jammy2211 Jammy2211 removed the pending-release PR queued for the next release build label Oct 7, 2026
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