async grpo native weight sync with vllm>=0.22.0 - #5892
Conversation
…eight_update), require vllm>=0.22.0
b609f63 to
e828e14
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit e828e14. Configure here.
| f"[weight_sync] /update_weights join took {time.time() - t_join:.1f}s " | ||
| f"(total send_weights: {time.time() - t0:.1f}s)" | ||
| ) | ||
| requests.post(f"{self.vllm_server_url}/finish_weight_update", timeout=1800) |
There was a problem hiding this comment.
Finish not called after sync errors
High Severity
send_weights now calls start_weight_update before NCCL and finish_weight_update only on the happy path. If trainer_send_weights, the threaded /update_weights call, or join raises or aborts, finish_weight_update is skipped while vLLM workers may still be in layerwise reload, breaking later rollouts or weight syncs until the server is restarted.
Reviewed by Cursor Bugbot for commit e828e14. Configure here.
There was a problem hiding this comment.
mirrors upstream : https://github.com/vllm-project/vllm/tree/main/examples/rl
no example handles this failure mode
|
The docs for this PR live here. All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update. |
|
small question. @qgallouedec where should we bump the minimum vllm version for asyncgrpo specifically ? |
|
sorry just saw your question. in the init, but this is already what you do, so I think it can be merged |
|
@AmineDiro @qgallouedec can we get this merged as it will help out with #6018 as well |


What this implements
Wires AsyncGRPO's WeightTransferClient to vLLM's native RL weight-transfer API (the 4-phase protocol from the 2026-05-28 native RL APIs post
(https://vllm.ai/blog/2026-05-28-native-rl-apis)), replacing the previous 2-call flow.
Per weight sync, WeightTransferClient.send_weights() now drives the full lifecycle:
Reference implementations
Validation
End-to-end on H100 (Qwen3-0.6B, GSM8K) at three scales, all completing with healthy GRPO metrics; server logs show paired start/finish bracketing every
update_weights:Note
Medium Risk
Changes the hot path that pushes trainer weights to the vLLM rollout server; mis-ordering or version skew would break training sync, though it follows vLLM’s documented RL API.
Overview
Updates Async GRPO weight sync to match vLLM ≥0.22.0’s native RL weight-transfer lifecycle instead of the older two-endpoint flow.
WeightTransferClient.send_weights()now callsstart_weight_update(is_checkpoint_format: true) before weights, then the existing threadedupdate_weights+ NCCL broadcast, thenfinish_weight_update. Checkpoint-format is no longer passed in the staticweight_update_infobuilt inAsyncGRPOTrainer. The minimum vLLM version forWeightTransferClientis raised from 0.17.1 to 0.22.0 (imports and error messages updated). Per-phase debug timing logs insend_weightsare collapsed to a single total timing line.Reviewed by Cursor Bugbot for commit e828e14. Bugbot is set up for automated code reviews on this repo. Configure here.