Skip to content

fix: single-core Nautilus fits build no pool (release-integrate corrective, #1442) - #1443

Merged
Jammy2211 merged 1 commit into
mainfrom
feature/nautilus-1core-serial-pool
Aug 1, 2026
Merged

fix: single-core Nautilus fits build no pool (release-integrate corrective, #1442)#1443
Jammy2211 merged 1 commit into
mainfrom
feature/nautilus-1core-serial-pool

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Corrective PR for the Heart RED reason (quoted verbatim from pyauto-brain health assess, 2026-08-01):

✗ [validate] release validation FAILED (stage integrate)

Full causal record, authorization quote, and evidence on #1442.

What this clears

guides/modeling/advanced/hierarchical.py TIMEOUT (1800s) in release-integrate runs 30672739606 and 30686136529 (76s before the regression window).

e6279c5 (#1439) made Nautilus.fit_multiprocessing always construct a fork-context Pool(number_of_cores). nautilus treats pool=None/pool=1 as fully serial (nautilus/sampler.py:286); a real Pool(1) bypasses that guard, so every likelihood call runs in one forked worker, which deadlocks in XLA backend_compile_and_load when the likelihood touches JAX (py-spy stacks on #1442). This PR passes pool=None at number_of_cores=1 (pre-#1439 serial behaviour) and keeps the fork-context pool — the actual Python 3.14 forkserver fix — for genuine multi-core runs.

Evidence

Not claimed by this PR

The intermittent autolens_test multi_dataset/jax_likelihood/delaunay.py TIMEOUT (present in runs with pre-regression SHAs, passed 18.2s in run 30672739606) is a separate pre-existing flake and remains open.

Validation plan

Merge → Stage 2 rehearsal (PyAutoHands) + Stage 3 release-integrate (PyAutoHeart) → release validate --ingest → fresh Heart verdict; the scheduled nightly performs the release on green under the standing grant (PyAutoBuild#127).

🤖 Generated with Claude Code

https://claude.ai/code/session_01BCVfiwJhHuQXxqksPJFCz4

…lus's serial guard

e6279c5 passed a fork-context Pool object to nautilus unconditionally so
its internal pools use the fork start method (the Python 3.14 forkserver
fix). But nautilus treats pool=None / pool=1 as fully serial
(nautilus/sampler.py:286), and a real Pool(1) object bypasses that guard:
every likelihood call is shipped to a single forked worker, which
deadlocks in XLA backend_compile_and_load when the likelihood touches JAX
(a forked child of a JAX-initialized parent cannot compile). This hung
guides/modeling/advanced/hierarchical.py (76s -> 1800s TIMEOUT) and turned
release-integrate validation RED.

number_of_cores=1 now passes pool=None (serial, the pre-e6279c53f
behaviour); the fork-context pool is still used for genuine multi-core
runs.

Fixes #1442

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BCVfiwJhHuQXxqksPJFCz4
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