Skip to content

v1.1.1: air-gapped Slurm support, dual-mode runtime, GRPO multi-env hardening - #5

Merged
suseella merged 1 commit into
mainfrom
release/v1.1.1
May 18, 2026
Merged

v1.1.1: air-gapped Slurm support, dual-mode runtime, GRPO multi-env hardening#5
suseella merged 1 commit into
mainfrom
release/v1.1.1

Conversation

@psgundecha-nv

Copy link
Copy Markdown
Collaborator

Overview

NVFlow v1.1.1 introduces first-class air-gapped Slurm support for the finance recipe, refactors the runtime layer so the same code path works in both air-gapped and developer modes, and ships a set of GRPO/eval/SFT/SDG hardening fixes plus a documentation overhaul.

This is a drop-in upgrade from v1.1.0 — no breaking changes for existing developer-mode users.

Highlights

Air-gapped Slurm deployments

Run NVFlow on Slurm clusters with no network access from compute nodes.

  • New dockerfiles/ with reproducible images for nemo-skills, nemo-rl, vllm, vllm-grpo, plus end-to-end build/push instructions (dockerfiles/docker_instructions.md).
  • Offline-mode env vars wired through cluster config templates: HF_HUB_OFFLINE, HF_DATASETS_OFFLINE, TRANSFORMERS_OFFLINE, UV_OFFLINE, TIKTOKEN_*.
  • cluster_configs/containers.yaml and template-slurm.yaml updated for offline images.
  • INSTALL.md and finance recipe docs rewritten to cover both runtime modes; new docs/recipes/finance/troubleshooting.md.

Dual-mode runtime

A single code path now serves both modes — no need to fork configs or scripts when switching between an air-gapped cluster and a connected developer workstation.

  • New nvflow/lib/runtime.py centralises venv / Python interpreter resolution.
  • Checkpoint converter, vLLM serving (scripts/serve_vllm_patched.py), SFT/GRPO training stages, and SDG scripts all transparently fall back to uv run --active python when the pre-baked venv isn't present.
  • Dev-mode users see no behaviour change; air-gapped users get deterministic resolution to the baked venvs.

Slurm submission ergonomics

  • New nvflow/lib/sbatch.py (+ tests/test_sbatch.py) plumbs extra_sbatch_args through every Slurm submission via get_executor, so cluster-specific flags (e.g. --exclude, --gres-flags, --account) propagate to all stages without per-stage code changes.

GRPO / eval / SFT / SDG hardening

  • Per-environment GRPO eval outputs: results are now written to step-9-eval/<env>/step-N/…, eliminating cross-environment overwrite and making downstream comparison straightforward.
  • Restored equivalence-LLM-judge training policy: sequence_packing.enabled: true, logprob_chunk_size: 2048, and make_sequence_length_divisible_by: 16 were inadvertently dropped during a prior config refactor and have been restored.
  • Tiktoken cache no longer attempts a download when TIKTOKEN_ENCODINGS_BASE / TIKTOKEN_CACHE_DIR are pre-configured.
  • Eval base/demo config refinements (workflows/eval/{base,demo}.yaml).
  • SFT training stage uses the dual-mode runtime; removed unused sft/nemotron_nano_9b.yaml.

Documentation

  • INSTALL.md rewritten end-to-end to cover both runtime modes and prerequisites.
  • dockerfiles/README.md and dockerfiles/docker_instructions.md document image build/push lifecycle.
  • docs/recipes/finance/troubleshooting.md (new) collects common Slurm/airgap pitfalls.
  • docs/architecture/ARCHITECTURE.md and docs/cluster-configuration.md updated for the new runtime layer.

Compatibility

  • Backwards-compatible. Existing developer-mode users see no change in behaviour — the runtime resolver auto-detects the environment.
  • Opt-in offline mode. The new HF_*_OFFLINE, UV_OFFLINE, and TIKTOKEN_* env vars are documented but only required for air-gapped deployments.
  • No external API changes to nflow CLI or workflow YAML schemas.

Validation

Full demo workflow (baseline-eval → SEC download → SDG → SFT → GRPO) re-run end-to-end on air-gapped containers and compared against the v1.1.0 baseline:

Workflow v1.1.0 v1.1.1
Baseline eval / SEC download / SDG match
SFT — FinanceBench pass@1 78.8% 79.5% (+0.7)
SFT — SecQUE pass@1 50.0% 50.7% (+0.7)
GRPO finance_sec_search — FinanceBench pass@1 76.8% 79.2% (+2.4)
GRPO finance_sec_search — SecQUE pass@1 51.0% 50.4% (within noise)

Upgrade notes

No action required for developer-mode users. For air-gapped Slurm deployments:

  1. Pull the new pre-built images (see dockerfiles/README.md).
  2. Update cluster_configs/template-slurm.yaml per the new template (offline env vars + image paths).
  3. Remove NRL_FORCE_REBUILD_VENVS=true and Gym overlay mounts on air-gapped clusters (they're now redundant with baked images).

See INSTALL.md and docs/recipes/finance/troubleshooting.md for full setup details.

Commit

  • GPG-signed and DCO-signed (Signed-off-by).
  • Diff stat: 36 files changed, 1,766 insertions(+), 408 deletions(-).

@psgundecha-nv
psgundecha-nv requested a review from a team May 17, 2026 16:45
@psgundecha-nv psgundecha-nv self-assigned this May 17, 2026
…ardening

- Air-gapped Slurm support: pre-built nemo-skills/nemo-rl/vLLM/vllm-grpo containers with offline env vars (HF_*_OFFLINE, UV_OFFLINE, TIKTOKEN_*); reproducible Dockerfiles + build instructions
- Dual-mode runtime: nvflow/lib/runtime.py centralises venv/python resolution so the same code path runs in airgap and dev modes; checkpoint converter, vLLM serving, training, and SDG scripts all use it
- sbatch arg propagation: nvflow/lib/sbatch.py + tests plumb extra_sbatch_args through every Slurm submission
- GRPO eval per-environment: outputs split by env (equivalence_llm_judge, finance_sec_search); restored sequence_packing / logprob_chunk_size / make_sequence_length_divisible_by for the equivalence_llm_judge training policy
- Eval / SDG / SFT fixes: skip tiktoken download when cache env vars pre-configured, eval base/demo config refinements, removed unused nemotron_nano_9b SFT config
- CI: lightweight unit-tests workflow on both GitLab and GitHub. tests/test_sbatch.py reads source files via Path(...).read_text() instead of importing modules that transitively need nemo_skills / typer; both runners invoke `uv run --no-sync pytest tests/ -v --tb=short` so the --no-deps install is authoritative
- Documentation: INSTALL.md rewrite, dockerfiles/README + docker_instructions, finance troubleshooting guide, cluster-configuration docs

Signed-off-by: Pritam Gundecha <pgundecha@nvidia.com>

@suseella suseella left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved merge

@suseella
suseella merged commit a8c4b6f into main May 18, 2026
5 checks passed
@psgundecha-nv
psgundecha-nv deleted the release/v1.1.1 branch May 18, 2026 03:21
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.

2 participants