feat(sc): NeMo-Gym path#3267
Conversation
6afeaae to
62947e5
Compare
8025950 to
5aba114
Compare
62947e5 to
7f1d6ce
Compare
7f1d6ce to
4278c73
Compare
cba2389 to
4d159fb
Compare
850b583 to
faf877c
Compare
63931ad to
3f42aa5
Compare
terrykong
left a comment
There was a problem hiding this comment.
Re-review at the rebased head (dd3cb538, now MERGEABLE/CLEAN). The spinup_nemo_gym_actor extraction and SC wiring check out: the 2-tuple/4-tuple setup_response_data unpacking is correct (now with an explicit assert len(...) == 2), dp_openai_server_base_urls is guaranteed real by the _should_use_nemo_gym asserts, and configure_vllm_for_router_replay is a safe no-op when router replay is off. Note: the rebase dropped the original PR's grpo.py refactor — grpo.py keeps its own inline _spinup_nemo_gym (still importing NemoGym, never referencing spinup_nemo_gym_actor), so the new helper is currently a near-duplicate used only by the SC path. grpo's sync path is untouched (no behavior change), but the description's "shared function so both grpo.py and the SC setup can call it" no longer holds — worth either re-landing the grpo call-site swap or noting the duplication. No correctness bugs.
Six inline comments: one medium (the new e2e functional test is registered in no CI lane, so it never runs — regressed during the rebase), and five low/non-blocking (guard hoist, a test-assertion tightening, a docstring, a smoke-threshold note, and a router-replay tracking note). Enabling router replay (R3) on the SC async+TransferQueue path is only half-wired and fails silently — filed as #3327 (assigned) and added to the SC loose-ends tracker #2625.
Cross-checked against merged #3219/#3220 and base #3266 threads to avoid duplication.
Reviewed by an agent team (rl-expert, bug-finder, test-agent, comment-reviewer, devil's-advocate), re-audited after rebase and cross-referenced against the PR stack. Generated by Claude Code
9288d1a to
3164062
Compare
dd3cb53 to
47b0970
Compare
Update the PR doc describe. |
|
/ok to test 1d6a09c |
|
/ok to test 1d6a09c |
Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: Yuki Huang <yukih@nvidia.com>
This reverts commit 0eeab08. Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: Yuki Huang <yukih@nvidia.com>
Signed-off-by: ruit <ruit@nvidia.com>
Signed-off-by: ruit <ruit@nvidia.com>
Signed-off-by: ruit <ruit@nvidia.com>
1d6a09c to
b2bd34d
Compare
|
/ok to test b2bd34d |
Part 4/4 of the #2819 split. Stack on #3266.
#3219 (1/4) -> #3220 (2/4) -> #3266 (3/4) -> #3267 (4/4)
Summary
Wires NeMo-Gym rollouts into the SC (Single Controller) entrypoint by introducing an SC-facing gym-actor spinup helper and wiring it into the SC setup path. The existing
grpo.pypath retains its local_spinup_nemo_gymimplementation for now because it also supplies GRPO-specific timing, routed-experts dtype, and fastokens configuration.spinup_nemo_gym_actor(nemo_rl/environments/nemo_gym.py): factors the NeMo-Gym actor construction needed by SC (config assembly, uv/venv cache reuse, image-baked venv reuse, and softNodeAffinitySchedulingStrategywhennum_gpu_nodes > 0) into a reusable helper. Consolidating the remaining GRPO-specific startup path is left for follow-up work.nemo_rl/algorithms/single_controller_utils/setup.py):setup_single_controllerbranches on_should_use_nemo_gym— skips env spinup insetup_response_data, brings up generation first, then callsspinup_nemo_gym_actorwith the vLLM OpenAI URLs. RaisesNotImplementedErroron non-vllm backends.examples/run_grpo_single_controller.py: restores thesetup_nemo_gym_configcall (removed in feat(sc): setup + entrypoint #3266 while the SC path had no gym support).tests/unit/single_controller/test_single_controller_setup.pygains env-handle wiring + non-vllm backend guard coverage (replaces the previous "not supported yet" trip-wire). Newtests/functional/grpo_async_gym_single_controller.shcovers SC + NeMo-Gym end-to-end.