Repository navigation
feat(orchestrator): evict and readmit inference engine groups, route them only at the current weight version - #4033
Merged
Conversation
…g group only at the current weight version
This was referenced Oct 12, 2026
Closed
…t update it failed in
faresobeid
added a commit
that referenced
this pull request
Oct 12, 2026
…M steps Fold the engine-group eviction (#4033) in. ADMIN_GROUPS and the per-group SLURM steps now come from one loop, so a multi-node EP replica is one group in both (it was one group per node in ADMIN_GROUPS). Drop slurm.max_engine_restarts (a group always restarts) and the /weight_version readmission gate (a 200 from /update_weights already means the weights loaded, and the per-process version was wrong with api_server_count > 1).
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.
Stacked on #4022 (which is on #3971). Review only the top commit (
git diff feat/slurm-engine-steps...feat/engine-groups).With #3971 the unit of eviction is one admin URL. A multi-node expert-parallel replica or a P/D role replica runs one engine per DP rank, and those engines fail together: one dead node stalls every rank of its group. So the ranks were evicted one by one (up to 300 s each), and a single relaunched rank could rejoin a group that cannot serve. A rejoining engine was also routed as soon as
/update_weightsreturned, with no check of what it holds.What
orchestrator.model.client.admin_engine_groupsgives the group of eachadmin_base_urlentry. The default is one group per URL.AdminPlaneevicts a whole group when any of its engines fails a liveness probe, stalls or fails an admin op./update_weightsand/load_lora_adapternow carry the policy version. The vLLM server stores it and serves it onGET /weight_version. A rejoining group goes back into the router only if every engine in it reports the version the update just sent. Otherwise it stays out and retries at the next update.multi_node_rl.sbatch.j2buildsADMIN_GROUPSnext toADMIN_URLSand passes them to the orchestrator. The groups match feat: evict inference engine groups as a block and run each as its own SLURM step, so an engine exit does not end the job #4022's engine-group steps:Integrity triggers:
P/D:
vllm-routercannot re-add a prefill or decode worker through its API (PdRouterBase::add_worker). So a P/D group still takes traffic again only after a router restart. Removal works.Checks
pytest tests/unit/orchestrator tests/unit/test_configs.py -m "not gpu": 338 passed. ruff is clean. New test:test_engine_group_is_evicted_and_readmitted_as_one, which covers group eviction, partial recovery, and the version gate.Rendered sbatch:
bash -npasses.--model.client.admin-engine-groups 0 0parses.GPU, 2 H200 nodes, job 3827. Setup:
admin_engine_groups = [0, 0, 1, 1];evict_mismatchedon.Results:
Evicted inference engines …:8100, …:8101 (/pause failed … on …:8101); 2 engines left. The router listed only 8102/8103, and training continued.answers again; its group rejoins at the next weight update, thengeneration 3: 4 enginesandInference engines …:8100, …:8101 rejoined at policy v51. The router listed all 4 again, and/weight_versionreturned 51 on all 4.{"version": 5}and stayed out of the router.That run showed a bug, fixed in the second commit: when one engine of a group failed
/pause, the engines of the group that had paused fine were still passed to the NCCL regroup (generation 1: 3 engines, thengeneration 2: 2 enginesat the next update).AdminPlane._eachnow returns only engines that are still members.