[rollout] feat: add owned train admission holds - #54
Draft
ashtonchew wants to merge 1 commit into
Draft
Conversation
This was referenced Jul 31, 2026
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-11-terminal-cancellation
branch
from
July 31, 2026 19:00
eefb379 to
7bc7e52
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-12-train-admission-holds
branch
3 times, most recently
from
August 3, 2026 20:27
ba1a956 to
11ca220
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-11-terminal-cancellation
branch
2 times, most recently
from
August 3, 2026 21:43
311c9d4 to
85b694b
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-12-train-admission-holds
branch
from
August 3, 2026 21:43
11ca220 to
5e266b5
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-11-terminal-cancellation
branch
from
August 3, 2026 22:50
85b694b to
cffeb69
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-12-train-admission-holds
branch
from
August 3, 2026 22:50
5e266b5 to
563de22
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-11-terminal-cancellation
branch
from
August 4, 2026 01:00
cffeb69 to
d12c73b
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-12-train-admission-holds
branch
from
August 4, 2026 01:00
563de22 to
536c35e
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-12-train-admission-holds
branch
from
August 4, 2026 09:55
536c35e to
81a3bc5
Compare
ashtonchew
force-pushed
the
ashtoncw/fully-async-v4-11-terminal-cancellation
branch
from
August 4, 2026 09:55
d12c73b to
4762f0b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
FullyAsyncRolloutFn.P, preserving explicit eviction policy while guaranteeing room for every terminal result that already owns a completed slot.Context
PR #53 can prove when scheduled execution becomes terminal and can retry retained cleanup. Weight updates and checkpoint publication need a separate boundary: they must stop new training admission, allow work already admitted at that point to settle, and prevent a completed batch lease from crossing the lifecycle operation unnoticed.
A shared pause flag is insufficient when evaluation, checkpointing, and weight updates can overlap because one caller could reopen admission while another still owns its pause. This layer gives each caller a distinct hold, captures that hold's terminal frontier at acquisition, and reopens admission only after every active owner releases its claim.
The finished-group buffer composed from the current open PR #2030 has two modes. An explicit
--async-buffer-max-groupsuses receipt-aware eviction. With no explicit policy cap, the buffer blocks at its transport capacity. In owned mode that blocking capacity must beP, the value of--fully-async-max-completed-prefetch-groups. A terminal result acquires one of thosePslots before publication, so at mostP - 1other slot-owning results can already be buffered. Publication therefore always has room.This capacity invariant also closes a terminal-frontier deadlock. With a smaller blocking buffer, one terminal result could fill the buffer while another terminal task blocked during publication. The hold would correctly keep waiting because that task still owned an unpublished receipt, but no consumer remained to make room. Removing the task from
_active_executionsbefore publication would hide the receipt from frontier and cleanup checks. Matching the blocking capacity toPlets the task stay tracked through publication or rollback without blocking the hold.Description
TrainAdmissionHoldandRolloutFnLifecyclecontracts for terminal-frontier waits, checkpoint preparation, and repeatable lifecycle close._active_executionsuntil the worker publishes its result or rolls back its exact terminal receipt, then reports any canonical worker failure to the waiting hold.GroupBuffer's blocking transport capacity from its optional eviction cap. Legacy mode keeps the existing blocking bound, while owned mode uses completed-prefetch capacityP.Test Plan
81a3bc5726b9ace62e3fe30a933e3f14b0eb1008,python -m pytest -q -p no:cacheprovider tests/fast/rollout/test_base_types.py tests/fast/rollout/test_fully_async_rollout.pypassed 103 tests.d6cd677a89759d6ea5316d2805a3d9cb6f392a1bpassed the 8xB200 composition run for candidate7d53849102b1804fd4a8b21515aa01ca23f89b48: one real actor optimization step, exact trained-weight reset and rebroadcast recovery, update-boundary rollback and replay, one nonempty admission hold, and clean inner and outer Ray completion. The validation head is two validation-only commits above the candidate and includes the router startup-deadline patch, so it is composition-level evidence; it does not establish exact branch-head GPU proof.