Skip to content

feat(ultra): 3K NVCF + disaggregated-sandbox pipeclean recipes and launch fixes - #3876

Draft
hemildesai wants to merge 2 commits into
hemild/saumishr-6k-pipecleaning-basefrom
hemild/3k-nvcf-disagg-launch
Draft

feat(ultra): 3K NVCF + disaggregated-sandbox pipeclean recipes and launch fixes#3876
hemildesai wants to merge 2 commits into
hemild/saumishr-6k-pipecleaning-basefrom
hemild/3k-nvcf-disagg-launch

Conversation

@hemildesai

Copy link
Copy Markdown
Contributor

Overview

Enables the 3K-GPU pipeclean with disaggregated sandboxes + NVCF-hosted judges, stacked on the 6k-pipecleaning lineage (base branch: hemild/saumishr-6k-pipecleaning-base, a snapshot of @saumishr's branch tip).

What the NVCF + disagg arm changes: tool execution moves to prewarmed pods on an external sandbox service, and all three judges (GenRM, NL2Bash, safety) are served from NVCF — so there is no judge hetgroup, no local judge vLLM, and the run is a single 752-node group (256 train / 488 gen / 8 Gym). Measured against the on-allocation arm on the same day/cluster/scale, this removed ~13 minutes of hard init gate (judge bring-up before ray.sub) and reached rollout dispatch ~14 minutes after job start.

Recipes (feat(ultra))

  • nvcf_judges.yaml — mergeable fragment routing the judges at NVCF. Deployment-specific function routes and the credential come from the environment (GENRM_NVCF_MODEL, NL2BASH_NVCF_MODEL, SAFETY_NVCF_MODEL, NVIDIA_API_KEY); nothing secret is embedded, and the launcher fails closed if they are missing.
  • pipeclean_3k.yaml / pipeclean_3k_sc.yaml — 3K base + SC overlays (halved 6K cohort).
  • disagg_sandboxes/launch_3k_nvcf_disagg_sc.sh + pipeclean_3k_nvcf_disagg_sc.yaml — the primary arm.
  • disagg_sandboxes/launch_3k_disagg_sc.sh + pipeclean_3k_disagg_sc.yaml — the on-allocation backup arm.

Recipes were authored in @saumishr's RL-6k working tree; this PR publishes them with the NVCF routes externalized.

Launch fixes (fix(launch)) — each hit live at 752 nodes

  1. Physical-path poisoning. Slurm records the submit host's physical cwd; on clusters where the login node resolves /lustre through a mount compute nodes cannot see, every path derived from SLURM_SUBMIT_DIR fails (pyxis: couldn't chdir …, all containers dead in ~2 min). Host paths now route through SLURM_WORKDIR (defaults to SLURM_SUBMIT_DIR), ultra_launch gains PROJECT_ROOT_OVERRIDE, and every sbatch component gets --chdir.
  2. Service steps starving the ray head. A step that omits --gres/--mem inherits the node's full GPU/memory allocation; the external-vLLM load-balancer steps on the ray-head node blocked the ray-head srun in endless step creation temporarily disabled retries. LB/preflight steps are now pinned to gpu:0 + 16G and the ray-head step overlaps service steps.
  3. CPUS_PER_WORKER vs CoreSpecCount. Auto-detection reads the node's physical CPUTot, which exceeds the allocation on clusters that reserve system cores — also an unsatisfiable step. The resolved value is clamped to SLURM_CPUS_ON_NODE.

Unit tests pin all three contracts (tests/unit/tools/test_external_gym_vllm.py).

Validation

  • Both arms dry-run clean; the NVCF+disagg arm ran end-to-end through Ray assembly (~3 min for 752 nodes), full Gym spin-up, 768+768 prewarmed sandbox claims, 550B policy instantiation, and weight refit, reaching rollout dispatch before the allocation window closed.
  • bash -n on all touched shell files; new unit tests pass by construction against the modified files.

Draft: the mooncake data-plane dispatch stall observed at scale is still under investigation (workaround: DP_BACKEND=simple), and the base branch should be retargeted to @saumishr's branch owner-side before merge.

🤖 Generated with Claude Code

hemildesai and others added 2 commits August 27, 2026 09:34
Adds the 3K-GPU pipeclean arms that run tool execution on an external
sandbox service and serve all three judges (GenRM, NL2Bash, safety) from
NVCF instead of the allocation: no judge hetgroup, sub-minute prewarmed
sandbox attach, and the Gym nodes keep only CPU work.

- nvcf_judges.yaml: mergeable fragment routing the judges at NVCF. The
  deployment-specific function routes and credential are taken from the
  environment (GENRM_NVCF_MODEL, NL2BASH_NVCF_MODEL, SAFETY_NVCF_MODEL,
  NVIDIA_API_KEY); nothing secret is embedded.
- pipeclean_3k{,_sc}.yaml: the 3K base and SingleController overlays,
  halved from the 6K cohort.
- disagg_sandboxes/: SC launchers and configs for the NVCF arm and the
  on-allocation backup arm.

Recipes originate from sauramishra's RL-6k working tree; this commit
publishes them with the NVCF routes externalized.

Co-authored-by: saumishr <3660203+saumishr@users.noreply.github.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Hemil Desai <hemild@nvidia.com>
Three launch-path defects surfaced when running the 752-node recipes on a
cluster whose login nodes resolve /lustre through a physical mount that
compute nodes cannot see, and whose Slurm reserves system cores:

1. Slurm records the submit host's physical cwd; every path derived from
   SLURM_SUBMIT_DIR (batch script, --container-workdir, log dirs) then
   fails on compute with 'pyxis: couldn't chdir'. Route host paths through
   SLURM_WORKDIR (caller-overridable, defaults to SLURM_SUBMIT_DIR), add
   PROJECT_ROOT_OVERRIDE to ultra_launch, and pass --chdir on every sbatch
   component.
2. A job step that omits --gres/--mem inherits the node's full GPU and
   memory allocation: the external-vLLM load-balancer steps on the ray-head
   node starved the ray-head srun into endless 'step creation temporarily
   disabled' retries. Pin the LB and preflight steps to gpu:0/16G and let
   the ray-head step --overlap service steps.
3. CPUS_PER_WORKER resolved from CPUTot exceeds the allocation on clusters
   with CoreSpecCount-reserved cores, which also blocks step creation
   forever. Clamp to SLURM_CPUS_ON_NODE.

All three were hit and fixed live; unit tests pin the contracts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Hemil Desai <hemild@nvidia.com>
@copy-pr-bot

copy-pr-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant