What is uncovered
Both token-capture recovery functional tests added in #4129 source the vLLM-only base
tests/functional/grpo_async_gym_single_controller.sh:
tests/functional/grpo_async_gym_single_controller_sibling_recovery.sh
tests/functional/grpo_async_gym_single_controller_streaming_recovery.sh
The Megatron path (MInf capture -> data-plane checkpoint -> process restart -> ledger finalization)
has no end-to-end coverage; only unit tests exercise the Megatron stager/preparer.
Why it is blocked
_require_minf_capture_hooks() in nemo_rl/algorithms/single_controller_utils/setup.py
(called at line 1201, raises at line 965) raises NotImplementedError when the pinned
megatron-core lacks RequestPayloadStager / RequestPromptPreparer from NVIDIA/Megatron-LM
PR #7015. Until 3rdparty/Megatron-Bridge-workspace/Megatron-Bridge is bumped to a revision
that includes #7015, policy.generation.backend=megatron ++token_capture.enabled=true fails at setup.
Steps once #7015 is pinned
- Add
grpo_megatron_generation_gym_single_controller_sibling_recovery.sh (and a streaming twin)
that set BASE_TEST to grpo_megatron_generation_gym_single_controller.sh (already
policy.generation.backend=megatron + mcore_generation_config.expose_http_server=true
via examples/nemo_gym/grpo_qwen3_0_6b_megatron_generation_single_controller.yaml).
- Register them in
tests/functional/L1_Functional_Tests_SingleController.sh next to the
vLLM variants (lines 191/194); use run_test fast only if runtime fits the Lfast budget.
Split out from #4129 per review discussion.
🤖 Generated with Claude Code
What is uncovered
Both token-capture recovery functional tests added in #4129 source the vLLM-only base
tests/functional/grpo_async_gym_single_controller.sh:tests/functional/grpo_async_gym_single_controller_sibling_recovery.shtests/functional/grpo_async_gym_single_controller_streaming_recovery.shThe Megatron path (MInf capture -> data-plane checkpoint -> process restart -> ledger finalization)
has no end-to-end coverage; only unit tests exercise the Megatron stager/preparer.
Why it is blocked
_require_minf_capture_hooks()innemo_rl/algorithms/single_controller_utils/setup.py(called at line 1201, raises at line 965) raises
NotImplementedErrorwhen the pinnedmegatron-core lacks
RequestPayloadStager/RequestPromptPreparerfrom NVIDIA/Megatron-LMPR #7015. Until
3rdparty/Megatron-Bridge-workspace/Megatron-Bridgeis bumped to a revisionthat includes #7015,
policy.generation.backend=megatron ++token_capture.enabled=truefails at setup.Steps once #7015 is pinned
grpo_megatron_generation_gym_single_controller_sibling_recovery.sh(and a streaming twin)that set
BASE_TESTtogrpo_megatron_generation_gym_single_controller.sh(alreadypolicy.generation.backend=megatron+mcore_generation_config.expose_http_server=truevia
examples/nemo_gym/grpo_qwen3_0_6b_megatron_generation_single_controller.yaml).tests/functional/L1_Functional_Tests_SingleController.shnext to thevLLM variants (lines 191/194); use
run_test fastonly if runtime fits the Lfast budget.Split out from #4129 per review discussion.
🤖 Generated with Claude Code