Skip to content

Commit 9e02478

Browse files
jyaunchesDemianHeyGen
authored andcommitted
test(e2e): add GPU double-onboard E2E + migrate GPU jobs to NVKS runners (NVIDIA#2606) (NVIDIA#2617)
## Summary Add `test-gpu-double-onboard.sh` that reproduces the exact scenario from NVIDIA#2553: re-onboard with `NEMOCLAW_PROVIDER=ollama` must not leave the proxy running with a different token than what's persisted to disk. ### What the test covers The exact reproduction scenario from NVIDIA#2553: 1. Full non-interactive onboard with `NEMOCLAW_PROVIDER=ollama` 2. Verify proxy running, token persisted, inference works 3. Re-onboard (second onboard, same sandbox with `NEMOCLAW_RECREATE_SANDBOX=1`) 4. **Token consistency**: file token matches what the running proxy accepts (not 401) 5. Inference through sandbox still works after re-onboard ### NVKS runner migration Both `gpu-e2e` (existing) and `gpu-double-onboard-e2e` (new) are moved from the never-enabled `self-hosted` runner to NVKS ephemeral GPU runners (`linux-amd64-gpu-l40g-latest-1` — L40G, 48 GB VRAM): - **Removes `GPU_E2E_ENABLED` gate** — the variable was never set, so `gpu-e2e` has been silently skipped every nightly since it was added on March 25 - **Eliminates `needs: gpu-e2e` serialization** — separate ephemeral VMs, no shared state - **Drops timeout from 60 to 30 min** — fresh VM each run, no stale state cleanup, auto-selected model is `qwen2.5:7b` (4.4 GB pull) - **Enables GPU E2E coverage in nightly for the first time** ### Testing The nightly workflow only triggers on `schedule` and `workflow_dispatch`. To validate before merge, run the workflow manually from this branch. Closes NVIDIA#2606 ### Related - NVIDIA#2553 — The bug (ollama proxy token divergence) - NVIDIA#2555 — The fix (restart proxy when token diverges) - NVIDIA#839 — Original gpu-e2e addition (never enabled) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * GPU nightly E2E workflow now runs unconditionally on ephemeral GPU runners with a shorter timeout and improved failure reporting that surfaces the new double-onboard job. * **Tests** * Added a comprehensive GPU E2E that verifies double-onboard behavior, proxy token persistence and acceptance/rejection, end-to-end inference, and sandbox cleanup. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent 11fcd00 commit 9e02478

2 files changed

Lines changed: 635 additions & 11 deletions

File tree

.github/workflows/nightly-e2e.yaml

Lines changed: 64 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,8 @@
1515
# probe → live inference. Validates the multi-agent architecture.
1616
# skip-permissions-e2e Validates --dangerously-skip-permissions activates the permissive
1717
# policy (not stuck in Pending) and sandbox egress works (not 403).
18-
# gpu-e2e Local Ollama inference on a GPU self-hosted runner.
19-
# Controlled by the GPU_E2E_ENABLED repository variable.
20-
# Set vars.GPU_E2E_ENABLED to "true" in repo settings to enable.
18+
# gpu-e2e Local Ollama inference on an NVKS ephemeral GPU runner.
19+
# gpu-double-onboard-e2e Ollama proxy token consistency after re-onboard (#2553).
2120
# notify-on-failure Auto-creates a GitHub issue when any E2E job fails.
2221
#
2322
# Runs directly on the runner (not inside Docker) because OpenShell bootstraps
@@ -545,15 +544,12 @@ jobs:
545544
if-no-files-found: ignore
546545

547546
# ── GPU E2E (Ollama local inference) ──────────────────────────
548-
# Enable by setting repository variable GPU_E2E_ENABLED=true
549-
# (Settings → Secrets and variables → Actions → Variables)
550-
#
551-
# Runner labels: using 'self-hosted' for now. Refine to
552-
# [self-hosted, linux, x64, gpu] once NVIDIA runner labels are confirmed.
547+
# Runs on an NVKS ephemeral GPU runner (RTX Pro 6000, 36 GB VRAM).
548+
# Each job gets a fresh VM — no state leakage between runs.
553549
gpu-e2e:
554-
if: github.repository == 'NVIDIA/NemoClaw' && vars.GPU_E2E_ENABLED == 'true'
555-
runs-on: self-hosted
556-
timeout-minutes: 60
550+
if: github.repository == 'NVIDIA/NemoClaw'
551+
runs-on: linux-amd64-gpu-rtxpro6000-latest-1
552+
timeout-minutes: 30
557553
env:
558554
NEMOCLAW_NON_INTERACTIVE: "1"
559555
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1"
@@ -594,6 +590,62 @@ jobs:
594590
path: /tmp/nemoclaw-gpu-e2e-test.log
595591
if-no-files-found: ignore
596592

593+
# ── GPU Double-Onboard E2E (Ollama token consistency) ────────
594+
# Reproduces issue #2553: re-onboard with Ollama must not leave the
595+
# proxy running with a different token than what's persisted to disk.
596+
# Runs on its own ephemeral VM — no dependency on gpu-e2e.
597+
gpu-double-onboard-e2e:
598+
if: github.repository == 'NVIDIA/NemoClaw'
599+
runs-on: linux-amd64-gpu-rtxpro6000-latest-1
600+
timeout-minutes: 30
601+
env:
602+
NEMOCLAW_NON_INTERACTIVE: "1"
603+
NEMOCLAW_ACCEPT_THIRD_PARTY_SOFTWARE: "1"
604+
NEMOCLAW_SANDBOX_NAME: "e2e-gpu-double-onboard"
605+
NEMOCLAW_RECREATE_SANDBOX: "1"
606+
NEMOCLAW_PROVIDER: "ollama"
607+
steps:
608+
- name: Checkout
609+
uses: actions/checkout@v6
610+
611+
- name: Verify GPU availability
612+
run: |
613+
echo "=== GPU Info ==="
614+
nvidia-smi
615+
echo ""
616+
echo "=== VRAM ==="
617+
nvidia-smi --query-gpu=name,memory.total --format=csv,noheader
618+
echo ""
619+
echo "=== Docker ==="
620+
docker info --format '{{.ServerVersion}}'
621+
622+
- name: Run GPU double-onboard E2E test
623+
run: bash test/e2e/test-gpu-double-onboard.sh
624+
625+
- name: Upload install log on failure
626+
if: failure()
627+
uses: actions/upload-artifact@v4
628+
with:
629+
name: gpu-double-onboard-install-log
630+
path: /tmp/nemoclaw-gpu-double-onboard-install.log
631+
if-no-files-found: ignore
632+
633+
- name: Upload re-onboard log on failure
634+
if: failure()
635+
uses: actions/upload-artifact@v4
636+
with:
637+
name: gpu-double-onboard-reonboard-log
638+
path: /tmp/nemoclaw-gpu-double-onboard-reonboard.log
639+
if-no-files-found: ignore
640+
641+
- name: Upload test log on failure
642+
if: failure()
643+
uses: actions/upload-artifact@v4
644+
with:
645+
name: gpu-double-onboard-test-log
646+
path: /tmp/nemoclaw-gpu-double-onboard-test.log
647+
if-no-files-found: ignore
648+
597649
notify-on-failure:
598650
runs-on: ubuntu-latest
599651
needs:
@@ -616,6 +668,7 @@ jobs:
616668
rebuild-hermes-e2e,
617669
overlayfs-autofix-e2e,
618670
gpu-e2e,
671+
gpu-double-onboard-e2e,
619672
]
620673
if: ${{ always() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) }}
621674
permissions:

0 commit comments

Comments
 (0)