test: add Megatron-backend variant of Gym token-capture recovery functional test
- Dominant language
- Python
- Stars
- 2k
- Forks
- 561
- Avg merge
- 4d 5h
- Merged PRs (30d)
- 145
Description
## 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
1. 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`).
2. 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](https://claude.com/claude-code)
Contributor guide
Assessment
This issue has not been assessed yet.