Skip to content

complete: jax-vmap-materialisation-hang — epic shipped, 7 quarantines cleared - #348

Merged
Jammy2211 merged 4 commits into
mainfrom
claude/jax-compile-stall-root-cause-d33hi0
Aug 27, 2026
Merged

complete: jax-vmap-materialisation-hang — epic shipped, 7 quarantines cleared#348
Jammy2211 merged 4 commits into
mainfrom
claude/jax-compile-stall-root-cause-d33hi0

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Mind close-out for PyAutoFit#1528 (phase 3 of the jax-compile-stall epic). All four code PRs are already merged: PyAutoFit#1529 (4130b22), PyAutoHands#269 (ad64e12), autolens_workspace_test#281 (69ee97c), autogalaxy_workspace_test#114 (adf5ffe).

What this carries

  • Completion recordcomplete/2026/08/jax-vmap-materialisation-hang.md, filed under the corrected name and cross-referencing the task slug jax-stall-block-until-ready.
  • active/ prompt folded out, active.md entry released.
  • The misnomer corrected where it will be read. epics.md and the campaign ledger both asserted "intermittent XLA compile stall". They are renamed and marked shipped — otherwise the next reader starts from the wrong name, which is exactly how this ran for a month.
  • Epic closed — all three phases done.
  • Follow-up fileddraft/research/ci/xla_cpu_eigen_pool_deadlock.md, for the part that is deliberately not done.
  • Dashboard + complete/index.md regenerated, both --check legs current.

The finding, in one line

Not a compile stall. Compilation completes in ~12–18s; materialising the vmap result never returns — caught at jax.block_until_ready/try_to_block and at jax.Array._value, two doors onto one failure. Trigger is XLA CPU's multithreaded Eigen thread pool; workaround is XLA_FLAGS=--xla_cpu_multi_thread_eigen=false in the smoke and release profiles of both test workspaces.

ABAB: 12 passes / 0 hangs with the flag against 2 passes / 14 hangs without, Fisher exact p ≈ 3e-6. All seven quarantined entries restored, 42/42 completions.

Honest about what is unfinished

A workaround, not a root cause — we do not know why the pool wedges. The follow-up prompt carries the refuted hypotheses (compilation cache, jax/jaxlib version, the 3.12-vs-3.13 split) so nobody re-runs them, and asks the question that could recover the ~15% cost: whether the pool is merely mis-sized against the runner's cgroup quota rather than genuinely deadlocked.

Merge note

The branch was 15 commits behind main. Merged (never rebased). All three conflicts were in generated files — complete/index.md, dashboard.md, dashboard.html — and were resolved by regenerating from the merged sources, not hand-edited. No source-of-truth file conflicted.

lifecycle.py check OK · lifecycle.py index --check OK · intake dashboard --check current.


Generated by Claude Code

claude added 4 commits August 27, 2026 02:03
… cleared

Phase 3 of jax-compile-stall, closing the epic. PyAutoFit#1528 closed;
autolens_workspace_test#245 closed. PRs merged 2026-08-27: PyAutoFit#1529
(4130b22), PyAutoHands#269 (ad64e12), autolens_workspace_test#281 (69ee97c),
autogalaxy_workspace_test#114 (adf5ffe).

The epic's name was wrong for a month. It is not an XLA compile stall:
compilation completes in ~12-18s and what never returns is materialising the
vmap result. epics.md and the campaign ledger are renamed and marked shipped
rather than left asserting the old name, since every future reader starts
from them.

Trigger is XLA CPU's multithreaded Eigen thread pool; workaround is
XLA_FLAGS=--xla_cpu_multi_thread_eigen=false in the smoke AND release profiles
of both test workspaces. ABAB, 12 passes / 0 hangs with the flag against
2 passes / 14 hangs without, Fisher exact p ~ 3e-6. All seven quarantined
entries restored, 42/42 completions.

Filed draft/research/ci/xla_cpu_eigen_pool_deadlock.md for the part that is
NOT done: why the pool wedges. It carries the refuted hypotheses so they are
not re-run, and asks whether the pool is merely mis-sized against the runner's
cgroup quota -- if so the ~15% cost of the flag is recoverable.

active.md entry released by hand: lifecycle.py record keys on the record slug,
and this record is filed under the corrected name while the task slug still
carried the misnomer, so the two did not match. The record now names both.

Co-Authored-By: Claude <noreply@anthropic.com>
The branch was 15 commits behind. All three conflicts were in GENERATED
files -- complete/index.md, dashboard.md, dashboard.html -- so they were
resolved by regenerating from the merged sources rather than hand-edited:

  lifecycle.py index --apply      -> 1155 records
  pyauto-brain intake --apply dashboard -> 135 prompts

Both --check legs confirm current, and lifecycle.py check is OK. No
source-of-truth file conflicted: active.md, epics.md, the completion record
and the new research prompt all merged cleanly.

Co-Authored-By: Claude <noreply@anthropic.com>
@Jammy2211
Jammy2211 merged commit 0bfc681 into main Aug 27, 2026
4 checks passed
@Jammy2211
Jammy2211 deleted the claude/jax-compile-stall-root-cause-d33hi0 branch August 27, 2026 17:14
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.

2 participants