Skip to content

feat(recipe): add OKE GB200 perf check#1233

Merged
mchmarny merged 2 commits into
NVIDIA:mainfrom
yuanchen8911:fix/issue-1007-oke-performance-goals
Jun 9, 2026
Merged

feat(recipe): add OKE GB200 perf check#1233
mchmarny merged 2 commits into
NVIDIA:mainfrom
yuanchen8911:fix/issue-1007-oke-performance-goals

Conversation

@yuanchen8911

@yuanchen8911 yuanchen8911 commented Jun 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds GB200 OKE performance phases following the existing training/inference split: NCCL goals for training overlays and inference-perf throughput/TTFT goals for the Dynamo inference overlay. OKE training advertises NVLS only for now; OKE NET/RDMA stays out until the OCI testbed proves a non-Socket NCCL transport end to end.

Motivation / Context

The OKE GB200 leaves were missing the recommended performance phase. This adds conservative smoke goals by mirroring the established EKS/GKE overlay pattern while avoiding an unverified OKE NET contract.

Fixes: #1007
Related: N/A

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Refactoring (no functional changes)
  • Build/CI/tooling

Component(s) Affected

  • CLI (cmd/aicr, pkg/cli)
  • API server (cmd/aicrd, pkg/server)
  • Recipe engine / data (pkg/recipe)
  • Bundlers (pkg/bundler, pkg/component/*)
  • Collectors / snapshotter (pkg/collector, pkg/snapshotter)
  • Validator (pkg/validator)
  • Core libraries (pkg/errors, pkg/k8s)
  • Docs/examples (docs/, examples/)
  • Other: ____________

Implementation Notes

  • Adds nccl-all-reduce-bw-nvls >= 500 at gb200-oke-training so gb200-oke-ubuntu-training and gb200-oke-ubuntu-training-kubeflow inherit the training performance goal.
  • Registers only CriteriaServiceOKE + CriteriaAcceleratorGB200 for the NCCL NVLS variant and ships the OKE NVLS runtime template.
  • Keeps the OKE NVLS runtime template on the IMEX/ComputeDomain claim path via resourceClaimTemplateName: nccl-all-reduce-imex.
  • Leaves OKE NET/RDMA out of the support matrix and recipe goals until feat(validation): add performance-phase constraints to OKE overlays once OCI testbed lands #1007 or OCI testbed data proves pod RDMA exposure and non-Socket NCCL logs.
  • Adds inference-perf to gb200-oke-ubuntu-inference-dynamo, mirroring the GB200 EKS Dynamo model/concurrency/throughput/TTFT goals.
  • Removes the stale validation-floor comment that described OKE GB200 training performance as a pending gap.
  • Gives OKE NCCL workers default scheduling in platformWorkerScheduling: a tolerate-all toleration (so workers schedule on tainted GB200 pools, not just the launcher) plus a nvidia.com/gpu.product node selector derived from the same accelerator-narrowed node set used for sizing — degrading to no selector on non-GFD installs. An explicit-but-empty --node-selector no longer clears that default asymmetrically (gated on len(), matching the counting path).
  • Floors the three OKE GB200 training overlays at K8s.server.version >= 1.34, since the NVLS IMEX path waits on the GA resource.k8s.io/v1 ResourceClaimTemplate (Kubernetes 1.34+); a DRA-incapable cluster is now rejected at recipe resolution rather than failing the performance phase at runtime. The EKS GB200 training chain shares this floor and is tracked in EKS GB200 training recipe floor (>= 1.32.4) is below DRA resource.k8s.io/v1 requirement (1.34+) #1255.
  • Documents OKE NVLS selection in docs/user/validation.md and the OKE default validator worker selector in docs/user/cli-reference.md.
  • Adds regression coverage for resolved OKE performance goals, OKE NVLS support/template parsing, IMEX claim wiring, OKE worker scheduling (gpu.product selector + taint toleration, non-GFD fallback), commonGPUProduct, the EKS-only GB200 NET NVreg preflight, and the limited scope of runtime-template parse tests.

Performance-gate assumption: the bandwidth/throughput thresholds are conservative smoke gates that assume a full 8-GPU node. The inference-perf goal is mirrored from the EKS H100 8×GPU Dynamo measurement (Qwen/Qwen3-8B, 256 concurrency/GPU, >= 50000 tok/s, TTFT-p99 <= 2000 ms) and the nccl-all-reduce-bw-nvls >= 500 GB/s figure is sized for a full-node 2-node pair — neither is yet calibrated against OKE GB200 silicon. They should be re-baselined once OCI testbed data is available; until then a partially-populated node (fewer than 8 GPUs) is expected to under-shoot these gates.

Testing

go test ./validators/performance -count=1
go test ./pkg/recipe -count=1
golangci-lint run -c .golangci.yaml ./validators/performance/... ./pkg/recipe/...
env -u GITLAB_TOKEN make qualify

All checks passed locally on the rebased branch. make qualify completed the full gate; the vulnerability scan reported the existing k8s.io/kubernetes advisories and did not fail the gate.

Risk Assessment

  • Low — Isolated change, well-tested, easy to revert
  • Medium — Touches multiple components or has broader impact
  • High — Breaking change, affects critical paths, or complex rollout

Rollout notes: OKE NET/RDMA is intentionally excluded until an OCI-specific runtime template and passing non-Socket NCCL logs are available from the testbed.

Checklist

  • Tests pass locally (make test with -race)
  • Linter passes (make lint)
  • I did not skip/disable tests to make CI green
  • I added/updated tests for new functionality
  • I updated docs if user-facing behavior changed
  • Changes follow existing patterns in the codebase
  • Commits are cryptographically signed (git commit -S) — GPG signing info

@coderabbitai

coderabbitai Bot commented Jun 8, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds performance validation support for OKE GB200 environments. It introduces performance constraint definitions to two OKE recipe overlays (training and inference), extends the NCCL validator to recognize OKE with NVLS transport, adds a TrainingRuntime YAML template for GB200 OKE NCCL testing with MPI/OpenMPI and GPU resource claims via imex-channel, and adds comprehensive tests validating template paths, IMEX claim references, supported variant combinations, and resolved recipe performance goals.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • NVIDIA/aicr#1196: Relaxes inference-perf validator behavior and adjusts the same inference-ttft-p99 thresholds that are newly pinned in OKE overlays here.

Suggested labels

enhancement, area/validator

Suggested reviewers

  • mchmarny
  • lockwobr
  • njhensley
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The PR comprehensively addresses issue #1007 by adding NCCL NVLS performance constraints to training overlays and inference-perf to the Dynamo inference overlay, registering OKE+GB200 for NVLS, and shipping the runtime template.
Out of Scope Changes check ✅ Passed All changes are tightly scoped to issue #1007: performance validations for OKE GB200 overlays, NCCL NVLS runtime support, test coverage, and K8s version constraint updates tied to DRA availability.
Title check ✅ Passed The title 'feat(recipe): add OKE GB200 perf check' accurately captures the main change: adding performance checks to OKE GB200 recipe overlays.
Description check ✅ Passed The PR description clearly explains the changes: adding OKE GB200 performance phases with NCCL goals for training and inference-perf for Dynamo inference, following the established EKS/GKE pattern while excluding unverified OKE NET/RDMA.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands and usage tips.

@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch from 98f8ff8 to c65049a Compare June 8, 2026 22:02
@github-actions github-actions Bot added size/XL and removed size/M labels Jun 8, 2026
@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch 2 times, most recently from 6c0a4aa to 38c610f Compare June 8, 2026 22:35
@github-actions github-actions Bot added size/L and removed size/XL labels Jun 8, 2026
@yuanchen8911 yuanchen8911 changed the title WIP: feat(recipe): add OKE GB200 perf goals WIP: feat(recipe): add OKE GB200 perf check Jun 8, 2026
@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch from 38c610f to 1aeed5c Compare June 9, 2026 16:33
@github-actions github-actions Bot added size/XL and removed size/L labels Jun 9, 2026
@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch from 1aeed5c to 6b5b17b Compare June 9, 2026 16:52
@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch from 6b5b17b to 892bae6 Compare June 9, 2026 16:59
@yuanchen8911 yuanchen8911 changed the title WIP: feat(recipe): add OKE GB200 perf check feat(recipe): add OKE GB200 perf check Jun 9, 2026
@yuanchen8911 yuanchen8911 marked this pull request as ready for review June 9, 2026 17:06
@yuanchen8911 yuanchen8911 requested review from a team as code owners June 9, 2026 17:06
@xdu31

xdu31 commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Cross-Review

Reviewers: Claude Code + Code Review Agent + Integration Analysis Agent

Confirmed Issues

# File Line Severity Description
1 validators/performance/nccl_all_reduce_bw_constraint.go 841 critical Rebase conflict — PR was branched before gkeAccelerator string was added as the third param. Current main has platformWorkerScheduling(service, instanceType string, gkeAccelerator string) at line 841, but the PR diff removes the 2-param base and replaces it with a nodes []v1.Node variant. The PR cannot be merged without a rebase that reconciles both param additions. When rebasing, the GKE tests in nccl_test.go (which now pass a string gkeAccelerator, e.g. "nvidia-h100-mega-80gb") must also be updated.
2 pkg/recipe/performance_goals_oke_test.go 23 medium context.Background() used without timeout for I/O (loadMetadataStore, BuildRecipeResult). The AKS counterpart (performance_goals_aks_test.go:28) correctly uses context.WithTimeout(context.Background(), defaults.FileReadTimeout). Fix: ctx, cancel := context.WithTimeout(context.Background(), defaults.FileReadTimeout); defer cancel().

Open Questions

  • Param unification on rebase: keep both gkeAccelerator string and nodes []v1.Node as separate params (4-param function), or unify by deriving the GKE accelerator from the nodes list (mirroring commonGPUProduct)? The latter is the cleaner API but requires updating the GKE call site and GKE tests.
  • OKE runtime-nvls.yaml worker apt-get install openssh-server in init container: Runs on every pod start (~10–20 s/worker/run overhead). The EKS template uses a pre-baked image. Is a pre-baked SSH image available for OCI, or is this intentional for now?

Cross-review by Claude Code

@njhensley

Copy link
Copy Markdown
Member

Review

What it does: Adds NVLS training goals + Dynamo inference goals to the OKE GB200 leaves, wires variantNVLS for OKE in the validator (new runtime template, commonGPUProduct worker-selector logic), bumps the OKE training K8s floor to >= 1.34, and updates docs/tests.

Assessment: well-built, good test coverage — one substantive inconsistency to confirm.

Strengths

  • The != nillen() > 0 gate fix on ctx.NodeSelector is a real correctness improvement: an explicit-but-empty --node-selector no longer asymmetrically clears the scheduling default while resolveTargetGPUNodes still narrows the counted set. Well-commented and tested.
  • commonGPUProduct is correct: returns "" on label disagreement or any missing label, keeping worker placement aligned with the counting fallback. Good table test covering empty/shared/mixed/missing.
  • TestSupportedNCCLCombinationsHaveRuntimeTemplates is a strong addition — a wiring guard that every advertised (variant, service, accelerator) tuple has a parseable runtime template. Exactly the kind of map/template drift that otherwise fails opaquely at runtime.
  • Removing the stale knownGaps comment block is correct now that the OKE perf blocks ship.

Main concern — the >= 1.34 floor is applied to OKE but not EKS, by the PR's own rationale

The PR floors the three OKE GB200 training overlays at K8s >= 1.34 because the NVLS IMEX path needs the GA resource.k8s.io/v1 ResourceClaimTemplate. But gb200-eks-training.yaml already ships nccl-all-reduce-bw-nvls (same IMEX/DRA path) and is still floored at >= 1.32.4:

recipes/overlays/gb200-eks-training.yaml:  K8s.server.version  >= 1.32.4   ← also runs NVLS

So by this PR's stated logic, an EKS GB200 training recipe can still resolve on 1.32.4 and hit the exact runtime failure (v1 RCT never reconciles) the PR is hardening OKE against. The PR explicitly defers this to #1255, so it's a known deferral rather than an oversight — but worth confirming:

  1. Is 1.34 the correct floor? (DRA resource.k8s.io/v1 GA'd in 1.34, so the rationale holds — which is why the EKS gap matters.)
  2. Is leaving EKS resolvable on 1.32.4 acceptable for the next release, or should the EKS floor move in the same PR for consistency?

Minor nits (non-blocking)

  • The new gb200-oke-ubuntu-inference-dynamo perf block does not carry the full-node-assumption NOTE comment that feat(recipe): add AKS H100 Dynamo perf check #1232 adds to its sibling gb200-eks-ubuntu-inference-dynamo. The same >= 50000 floor on a 4-GPU GB200 node carries the same node-shape risk; the documenting comment should be consistent across siblings.
  • TestOKEPerformanceGoalsFollowTrainingInferencePattern uses context.Background() with no timeout (vs. feat(recipe): add AKS H100 Dynamo perf check #1232's timeout-bounded context).

Cross-PR note

This PR and #1232 both modify docs/user/validation.md in overlapping regions. Whichever merges second will likely hit a conflict — worth coordinating merge order or rebasing the trailing one.

@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch from 892bae6 to c2dbf96 Compare June 9, 2026 21:30
Adds GB200 OKE performance phases following the existing training/inference
split: NCCL NVLS goals for training overlays and inference-perf
throughput/TTFT goals for the Dynamo inference overlay. OKE training
advertises NVLS only for now; OKE NET/RDMA stays out until the OCI testbed
proves a non-Socket NCCL transport end to end.

- Register CriteriaServiceOKE + CriteriaAcceleratorGB200 for the NCCL NVLS
  variant and ship the OKE NVLS runtime template (IMEX/ComputeDomain claim
  path via resourceClaimTemplateName: nccl-all-reduce-imex).
- Add nccl-all-reduce-bw-nvls >= 500 at gb200-oke-training so the Ubuntu and
  Kubeflow training leaves inherit the training performance goal.
- Add inference-perf to gb200-oke-ubuntu-inference-dynamo, mirroring the
  GB200 EKS Dynamo model/concurrency/throughput/TTFT goals.

Worker scheduling: platformWorkerScheduling now handles OKE — a tolerate-all
toleration so workers schedule on tainted GB200 pools (previously only the
launcher tolerated the taint, leaving workers Pending), plus a
nvidia.com/gpu.product nodeSelector derived from the same accelerator-narrowed
node set used for counting so worker placement cannot diverge from the sizing
on mixed-GPU cohorts. Degrades to no selector on non-GFD installs, matching
the counting fallback.

DRA API floor: the GB200 NVLS IMEX path waits on the GA resource.k8s.io/v1
ResourceClaimTemplate (Kubernetes 1.34+), so floor the three OKE training
overlays at >= 1.34 instead of >= 1.32.4 — a DRA-incapable cluster is now
rejected at recipe resolution rather than failing the performance phase at
runtime. (The EKS GB200 training chain shares this floor; tracked in NVIDIA#1255.)

Docs: document OKE NVLS selection in docs/user/validation.md (NVLS-only, no
NET/RDMA) and the OKE default validator worker selector
(nvidia.com/gpu.product, GFD-gated) in docs/user/cli-reference.md.

Regression coverage: resolved OKE performance goals, OKE NVLS support/template
parsing, IMEX claim wiring, OKE worker scheduling (gpu.product selector +
taint toleration, non-GFD fallback), commonGPUProduct, the EKS-only GB200 NET
NVreg preflight, and runtime-template parse coverage for every supported
NCCL combination.

Fixes: NVIDIA#1007
@yuanchen8911 yuanchen8911 force-pushed the fix/issue-1007-oke-performance-goals branch from c2dbf96 to 10b2108 Compare June 9, 2026 21:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(validation): add performance-phase constraints to OKE overlays once OCI testbed lands

4 participants