Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions campaigns.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,8 @@ campaigns:
- id: interferometer
title: Interferometer likelihood and streaming
status: active
updated: '2026-10-13'
next: 'No new committed measurements. Decision matrix remains filled; streaming 1e8 CPU/A100 rows and the
#332 memo after-measurement still need authorization. #411 merged 2026-10-13: the historical numba kill
gate is INCONCLUSIVE (four rounds). Curvature preload needs the fixed-mapper science decision; FFT levers
remain unstarted.'
updated: '2026-10-15'
next: 'Three PyAutoArray tasks filed 2026-10-15 from the Aris 512×512 profiling (PyAutoPulse#62): #626 sparse data vector memory (active, --auto), #627 AdaptSplit log-det backend parity and #628 numba route-gate cost model (queued behind the PyAutoArray claim). Streaming 1e8 CPU/A100 rows and the #332 memo after-measurement still need authorization; curvature preload needs the fixed-mapper science decision; FFT levers remain unstarted.'
evidence: https://github.com/PyAutoLabs/autolens_profiling/blob/4db4d988e520a82219152743748c3188d485a4ba/wiki/campaigns/interferometer_likelihood.md
- id: linear-solver
title: Linear-solver accuracy and cost
Expand Down Expand Up @@ -303,6 +300,16 @@ tasks:
in apply_sparse_operator (memory).'
issue: https://github.com/PyAutoLabs/autolens_profiling/issues/368
evidence: https://github.com/PyAutoLabs/autolens_profiling/blob/719459fefb40c7e5be157f652818dbf923830557/wiki/campaigns/interferometer_streaming.md
- id: interferometer_large_mask_aris
campaign: interferometer
title: 'Interferometer large-mask likelihood (Aris 512×512): sparse data-vector memory, AdaptSplit log-det backend parity, numba route-gate cost model'
status: active
priority: high
path: tasks/interferometer_large_mask_aris.md
updated: '2026-10-15'
next: 'PyAutoArray#626 active under --auto (worktree interferometer-sparse-data-vector; witness 7.2 GB -> <= ~3.5 GB at 5,746 vertices); #627 and #628 queued in Mind planned.md behind the PyAutoArray claim, in that order. Record each before/after witness table in the task file at close-out.'
issue: https://github.com/PyAutoLabs/PyAutoPulse/issues/62
evidence: https://github.com/PyAutoLabs/PyAutoArray/issues/626
- id: interferometer_w_tilde_fft_size_levers
campaign: interferometer
title: 'Interferometer W~ curvature matrix is FFT-bound on the mask extent: pruned padded FFT and real-space
Expand Down
2 changes: 1 addition & 1 deletion dashboard.html

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions dashboard.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# PyAutoPulse — profiling dashboard

<!-- pulse-campaigns:b95c0bf384d49e4f8bd1f183ef71eae3e05fa2e4892d3ba474b05d4261563690 -->
<!-- pulse-campaigns:a53f6bbfc21f511541a477cdac96aaf7b677a7e058726ca4f839a61947a26133 -->
## Profiling Check In

<details><summary>Full check-in prompt</summary>
Expand Down Expand Up @@ -94,7 +94,7 @@ Reviewed 2026-10-13. No campaign wiki/results change or new matching implementat

<details><summary>Interferometer likelihood and streaming — active</summary>

Reviewed 2026-10-13. No new committed measurements. Decision matrix remains filled; streaming 1e8 CPU/A100 rows and the #332 memo after-measurement still need authorization. #411 merged 2026-10-13: the historical numba kill gate is INCONCLUSIVE (four rounds). Curvature preload needs the fixed-mapper science decision; FFT levers remain unstarted.
Reviewed 2026-10-15. Three PyAutoArray tasks filed 2026-10-15 from the Aris 512×512 profiling (PyAutoPulse#62): #626 sparse data vector memory (active, --auto), #627 AdaptSplit log-det backend parity and #628 numba route-gate cost model (queued behind the PyAutoArray claim). Streaming 1e8 CPU/A100 rows and the #332 memo after-measurement still need authorization; curvature preload needs the fixed-mapper science decision; FFT levers remain unstarted.

[Campaign evidence](https://github.com/PyAutoLabs/autolens_profiling/blob/4db4d988e520a82219152743748c3188d485a4ba/wiki/campaigns/interferometer_likelihood.md)

Expand All @@ -103,6 +103,7 @@ Reviewed 2026-10-13. No new committed measurements. Decision matrix remains fill
- [Interferometer fixed-mapper searches: reuse the W~ curvature matrix across likelihood calls via `preloads.curvature_matrix`](https://github.com/PyAutoLabs/PyAutoPulse/blob/main/tasks/interferometer_fixed_mapper_curvature_preload.md) — ready: Phase 1 Mind draft (2026-10-04) still unstarted; run it through start_dev. Human science call first - no production SLaM stage holds the mapper fixed today.
- [fnnls warm-start memo: stop it slowing scattered evaluation streams (interferometer CPU, autolens_profiling#332)](https://github.com/PyAutoLabs/PyAutoPulse/blob/main/tasks/interferometer_nnls_memo_scattered_stream_guard.md) — active: Library half shipped: PyAutoArray#615 (closes #613) merged 2026-10-06, in 2026.10.7.1. Local solver-only witness (n=576): iid memo on/off 1.49x → 1.17x; walk 0.18x unchanged. Owed: re-run the autolens_profiling#332 ALMA Delaunay 2.17x after-measurement (needs compute authorization).
- [Campaign: interferometer streaming (array-free) vs in-memory — memory and time scaling to 2e8 visibilities](https://github.com/PyAutoLabs/PyAutoPulse/blob/main/tasks/interferometer_streaming_scaling.md) — active: Phase 1 CPU cells + results/streaming_scaling rows merged (autolens_profiling#375, 2026-10-04); wiki/campaigns/interferometer_streaming.md. Optional: 1e8 CPU row and A100 rows (compute authorization). Library candidate unfiled: chunk transformer.image_from in apply_sparse_operator (memory).
- [Interferometer large-mask likelihood (Aris 512×512): sparse data-vector memory, AdaptSplit log-det backend parity, numba route-gate cost model](https://github.com/PyAutoLabs/PyAutoPulse/blob/main/tasks/interferometer_large_mask_aris.md) — active: PyAutoArray#626 active under --auto (worktree interferometer-sparse-data-vector; witness 7.2 GB -&gt; &lt;= ~3.5 GB at 5,746 vertices); #627 and #628 queued in Mind planned.md behind the PyAutoArray claim, in that order. Record each before/after witness table in the task file at close-out.
- [Interferometer W~ curvature matrix is FFT-bound on the mask extent: pruned padded FFT and real-space pixel scale on the A100](https://github.com/PyAutoLabs/PyAutoPulse/blob/main/tasks/interferometer_w_tilde_fft_size_levers.md) — ready: Unstarted (no PR/issue/branch/results, 2026-10-04). Select one bounded step when prioritised.

</details>
Expand Down
44 changes: 44 additions & 0 deletions tasks/interferometer_large_mask_aris.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Interferometer large-mask likelihood — memory and routing (Aris 512×512)

Campaign: interferometer
Task: interferometer_large_mask_aris
Reviewed: 2026-10-15
Status: active

Filed 2026-10-15 from the Aris interferometer profiling session (Delaunay + `AdaptSplit`,
`use_jax=False` numba route and JAX jit, real-space masks 125×125 at 5,496 masked pixels and
512×512 at 91,507 masked pixels, 5.5M visibilities, 682×682 W~ extent). The human asked for the
three resulting PyAutoArray tasks to be logged and monitored as one Pulse speed-up campaign.
Mind owns the repository claims and PR lifecycle (issues below); this task records the
campaign intent, the baseline numbers the tasks must beat, and each check-in.

## Members (Mind lifecycle, PyAutoArray; one claim at a time, in this order)

| # | Issue | Pass condition (Witness) | Mind state 2026-10-15 |
|---|-------|--------------------------|-----------------------|
| 1 | [PyAutoArray#626](https://github.com/PyAutoLabs/PyAutoArray/issues/626) sparse data vector | 512×512, 5,746 vertices, numba route: peak RSS 7.2 GB → ≤ ~3.5 GB, logL unchanged to 1e-8 | active, `--auto`, Heart RED development override |
| 2 | [PyAutoArray#627](https://github.com/PyAutoLabs/PyAutoArray/issues/627) AdaptSplit log-det parity | numba vs JAX `log_det_regularization_matrix_term` agree < 1e-3 (now 2443.22 vs 2561.98), regression test | queued behind #626 (planned.md) |
| 3 | [PyAutoArray#628](https://github.com/PyAutoLabs/PyAutoArray/issues/628) numba route gate cost model | both masks pick the faster of direct_conv vs FFT at every tested vertex count | queued behind #627; DelaunayNN #624/#625 merged so no factory conflict |

## Baseline measurements (s/call, 1 thread, laptop; PROGRESS4 steps 8.3–8.4)

512×512 mask, 91,507 masked pixels, regular-step Delaunay meshes:

| vertices (nnz/col) | NumPy FFT route | numba direct_conv | JAX jit (cores) | peak RSS |
|---|---|---|---|---|
| 1,459 (188) | 28.3 | 38.4 | 18.3 (1.59) | 4.13 GB FFT / 3.22 DC / 3.69 JAX |
| 2,577 (106) | 44.1 | 34.2 | 32.2 (1.75) | 4.34 / 3.41 / 5.02 |
| 5,746 (48) | 97.3 | 41.2 | not run (8.95 GB XLA compile temp) | 7.14 / 7.17 / — |

- Default gate 60 nnz/col mis-routes 2,577 vertices to FFT (1.29× slower); measured crossover ~140–150 nnz/col on this mask vs ~60 (Delaunay) / ~77 (rectangular) on 125×125 (autolens_profiling#226).
- Memory culprit: `sparse.py:104` `data_vector = mapping_matrix.T @ dirty_image` materialises the dense (91,507 × S) matrix: 1.07 / 1.9 / 4.2 GB at 1,459 / 2,577 / 5,746 vertices, route-independent.
- Backend parity: chi², curvature, data vector, curvature log-det identical to 1e-16 relative; only the AdaptSplit regularization log-det differs (125×125: 2443.22 numba vs 2561.98 JAX; 512×512 @1,459: 2576.59 vs 2574.73). ~1 in 4 draws non-PD (numba LinAlgError vs JAX -inf).

These are laptop timings under load and qualify no baseline; the campaign's after-measurements
re-run the same cached setups and are recorded here per task. Caches live in a session
scratchpad (temporary); the numbers above are the durable record.

## Check-in 2026-10-15

- Filed: #626 active (worktree `interferometer-sparse-data-vector`), #627 and #628 queued in Mind planned.md. Implementation worker running on #626; read-only root-cause investigation running for #627.
- Next: after #626 PR-open and human `/prm`, start #627 (`/start_library`), then #628. Record each task's before/after witness table here on close-out.
Loading