Skip to content

feat(recipes): replace AKS ib-node-config DaemonSet with nodewright tuning - #1698

Merged
mchmarny merged 4 commits into
mainfrom
feat/aks-ib-rdma-via-nodewright
Jul 13, 2026
Merged

feat(recipes): replace AKS ib-node-config DaemonSet with nodewright tuning#1698
mchmarny merged 4 commits into
mainfrom
feat/aks-ib-rdma-via-nodewright

Conversation

@ayuskauskas

@ayuskauskas ayuskauskas commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Replaces the privileged ib-node-config-aks DaemonSet with nodewright: the AKS accelerator overlays now wire the same nodewright-customizations tuning manifest EKS uses (setup and tuning packages), with service: aks, and tuning.yaml bumps nvidia-setup to 0.5.0 which adds the aks-h100 combination.

Motivation / Context

The DaemonSet carried a TODO to remove it once nodewright gained AKS RDMA/MEMLOCK support. That support shipped in NVIDIA/nodewright-packages#42 (released as nvidia-setup/0.5.0): the package performs the same host setup (persistent ib_umad/rdma_ucm module loading, memlock limits, LimitMEMLOCK=infinity drop-ins for containerd and kubelet), with nodewright handling service restarts and post-interrupt verification. This removes a privileged always-running DaemonSet in favor of lifecycle-managed, checked host configuration, and brings AKS onto the same tuning manifest as EKS (nvidia-tuned applies the aks-h100-{intent} profiles).

Fixes: N/A (DaemonSet TODO)
Related: NVIDIA/nodewright-packages#42, NVIDIA/nodewright#296, #1697 (host GPU driver auto-detect; orthogonal, no file overlap)

Type of Change

  • New feature (non-breaking change that adds functionality)

Component(s) Affected

  • Recipe engine / data (pkg/recipe)
  • Docs/examples (docs/, examples/)
  • Other: recipes (overlays, component manifests), pkg/bundler/validations, pkg/tuning tests

Implementation Notes

  • One shared manifest, no split: tuning.yaml moves to nvidia-setup 0.5.0 for all consumers. 0.5.0 is identical to 0.4.0 for EKS (its only delta is the aks-h100 combination and an ensure_kernel no-op when KERNEL is unset), so EKS overlays are unaffected beyond the pin.
  • AKS wiring mirrors EKS: h100-aks-inference (intent inference), h100-aks-training (intent multiNodeTraining), and a100-aks-training (h100 profile reuse with the same rationale and comment as a100-eks-training). Ubuntu variants inherit. The stale "Nodewright packages do not support service: aks" comments are removed.
  • On AKS, nvidia-setup-kernel is a designed no-op (aks defaults intentionally omit KERNEL; AKS manages its own Ubuntu kernel); this is documented in the manifest.
  • Documented AKS caveat on the manifest's tolerate-all fallback: AKS admission collapses a pod's toleration list to just the wildcard when one is present, which defeats the nodewright operator's drain exemption for its own package pods and deadlocks interrupt-bearing packages (NVIDIA/nodewright#296, found while verifying on a live cluster). Keyed acceleratedTolerations (for example nvidia.com/gpu) must be injected on AKS.
  • Guarded at bundle time (per review): new CheckWildcardAcceleratedToleration validation in pkg/bundler/validations, registered on nodewright-customizations with severity: warning and conditions: service: [aks]. The default aicr bundle path injects the DefaultTolerations() wildcard into acceleratedTolerations, so a plain AKS bundle would otherwise hit the nodewright#296 deadlock silently; the warning surfaces in deployment notes with the --accelerated-node-toleration remedy. The keyed-toleration requirement and RDMA opt-out flags are also documented in docs/integrator/aks-gpu-setup.md ("InfiniBand RDMA Host Setup (nodewright)"), and the function is listed in docs/contributor/validator.md.
  • The RDMA opt-out note in aks.yaml now includes --set nodewrightcustomizations:enabled=false.
  • Regenerated make tuning-docs (aks rows: nvidia-setup 0.5.0 + nvidia-tuned 0.3.1, matching eks) and make bom-docs.

Testing

  • The exact package chain (nvidia-setup-kernel no-op, nvidia-tuned with aks-h100-inference profile, nvidia-setup-full IB RDMA + memlock, reboot interrupts) was verified end to end on a live AKS v1.35.5 cluster with 2x Standard_ND96isr_H100_v5: all four config files written, modules loaded and reloaded from modules-load.d after reboot, LimitMEMLOCK=infinity configured and effective on containerd/kubelet, fresh pods see ulimit -l unlimited, umad*/rdma_cm devices present. Full evidence: nodewright-packages#42 verification comment.
  • go test ./pkg/tuning/... ./tools/tuning/... ./pkg/bom/... pass (structure test gains the two aks rows).
  • New validation exercised through the real bundle path: default aicr bundle of an AKS H100 inference recipe emits the wildcard-toleration warning in deployment notes; with --accelerated-node-toleration nvidia.com/gpu:NoSchedule the warning is gone and the rendered Skyhook CR carries the keyed toleration.
  • Coverage: pkg/bundler/validations: 84.6% → 86.9% (+2.3%); CheckWildcardAcceleratedToleration at 100%.
  • make qualify passes on the rebased branch (test-coverage, lint, tuning-check, e2e — 23 chainsaw tests, scan, license-check).
  • yamllint clean on the changed recipe files.

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Recipe evidence check

Registry change: scoped to recipes that reference a changed component
entry in recipes/registry.yaml (not every leaf).

Protected recipes

Recipes with committed evidence (recipes/evidence/<slug>/<source>/<digest>.yaml) that this PR affects: 4

Recipe Source Pointer Verify Digest match
gb200-eks-ubuntu-training 7c4c0edc8c765a95a0f3afdb3bbb8e91 sha256-93fac974407a873d5b6a52a72bafcaa18b019190545a23d03031680d6aabd2bc ❌ invalid — registry-forbidden (HTTP 401): registry not accessible (make the fork's aicr-evidence package public, or provide registry credentials) ⚠️ skipped (no signed digest)
h100-aks-ubuntu-inference-dynamo 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-f8d2a0188274d179f37dfe39a257aeaa3fbb97273162586853e0986bfa5d3c05 ✅ passed ⚠️ stale (8e88ca57dea5… vs current 629df41b9eb1…)
h100-aks-ubuntu-training-kubeflow 5bf9e82f0e90a11528ac85f4bcb866c8 sha256-7e7c4680bab4c44bb68fab53fc85a7f8d8065ca6b796458a2bc7cb4f4a49bfa9 ✅ passed ⚠️ stale (748b0a7f5852… vs current 985d0dc24ed9…)
h100-gke-cos-training 7c4c0edc8c765a95a0f3afdb3bbb8e91 sha256-be4680f26ad9ebeb57145f1953f18311ca00e81a4edb37773e0ec1060c6bd261 ❌ invalid — registry-forbidden (HTTP 401): registry not accessible (make the fork's aicr-evidence package public, or provide registry credentials) ⚠️ skipped (no signed digest)
h100-gke-cos-training 7c4c0edc8c765a95a0f3afdb3bbb8e91 sha256-f2573e7f2496cc895e6a780604645f7c24ed4d7e0edf4c4845c0d341a3a6326e ❌ invalid — registry-forbidden (HTTP 401): registry not accessible (make the fork's aicr-evidence package public, or provide registry credentials) ⚠️ skipped (no signed digest)
Other affected recipes without evidence yet: 42

These recipes are affected by this PR but carry no committed evidence pointer, so there is
nothing to verify. This is expected — evidence is hardware-gated and added over time.

  • a100-aks-training
  • a100-aks-ubuntu-training-kubeflow
  • a100-aks-ubuntu-training
  • a100-eks-training
  • a100-eks-ubuntu-training-kubeflow
  • a100-eks-ubuntu-training
  • a100-gke-cos-training-kubeflow
  • a100-gke-cos-training
  • b200-gke-cos-inference-dynamo
  • b200-gke-cos-inference
  • b200-gke-cos-training-kubeflow
  • b200-gke-cos-training
  • gb200-eks-inference
  • gb200-eks-training
  • gb200-eks-ubuntu-inference-dynamo
  • gb200-eks-ubuntu-inference
  • gb200-eks-ubuntu-training-kubeflow
  • gb200-eks-ubuntu-training-slurm
  • h100-aks-inference
  • h100-aks-training
  • h100-aks-ubuntu-inference
  • h100-aks-ubuntu-training
  • h100-bcm-training
  • h100-bcm-ubuntu-training
  • h100-eks-inference
  • h100-eks-training
  • h100-eks-ubuntu-inference-dynamo
  • h100-eks-ubuntu-inference-nim
  • h100-eks-ubuntu-inference
  • h100-eks-ubuntu-training-kubeflow
  • h100-eks-ubuntu-training-slurm
  • h100-eks-ubuntu-training
  • h100-gke-cos-inference-dynamo
  • h100-gke-cos-inference
  • h100-gke-cos-training-kubeflow
  • h100-gke-cos-training-slurm
  • h200-eks-inference
  • h200-eks-training
  • rtx-pro-6000-eks-inference
  • rtx-pro-6000-eks-ubuntu-inference-dynamo
  • rtx-pro-6000-eks-ubuntu-inference-nim
  • rtx-pro-6000-eks-ubuntu-inference

How to refresh evidence

Run on a cluster matching the recipe's criteria:

aicr snapshot -o snapshot.yaml
aicr validate \
  -r recipes/overlays/<slug>.yaml \
  -s snapshot.yaml \
  --emit-attestation ./out \
  --push ghcr.io/<your-fork>/aicr-evidence
# Copy to the per-source path printed in the emit 'copyTo' hint:
#   recipes/evidence/<slug>/<source>/<bundle-digest>.yaml

This gate is warning-only and never blocks merge. See ADR-007 for the trust model.

@coderabbitai

coderabbitai Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

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

AKS recipes now use nodewright-customizations tuning profiles for A100 and H100 training or inference configurations. Nodewright setup packages are updated to 0.5.0, the previous AKS IB configuration path is removed, and Network Operator dependencies and opt-out settings are revised. A wildcard accelerated-node toleration validation, tests, documentation, tuning expectations, and container-image inventory are added or updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Suggested labels: theme/validation

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately captures the main change: replacing the AKS ib-node-config DaemonSet with nodewright tuning.
Description check ✅ Passed The description is clearly aligned with the changeset and explains the AKS nodewright migration and related updates.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/aks-ib-rdma-via-nodewright

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

@github-actions

github-actions Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Coverage Report ✅

Metric Value
Coverage 78.7%
Threshold 75%
Status Pass
Coverage Badge
![Coverage](https://img.shields.io/badge/coverage-78.7%25-green)

Merging this branch will increase overall coverage

Impacted Packages Coverage Δ 🤖
github.com/NVIDIA/aicr/pkg/bundler/validations 87.26% (+2.65%) 👍

Coverage by file

Changed files (no unit tests)

Changed File Coverage Δ Total Covered Missed 🤖
github.com/NVIDIA/aicr/pkg/bundler/validations/checks.go 96.15% (+1.35%) 104 (+27) 100 (+27) 4 👍

Please note that the "Total", "Covered", and "Missed" counts above refer to code statements instead of lines of code. The value in brackets refers to the test coverage of that file in the old version of the code.

@ayuskauskas
ayuskauskas force-pushed the feat/aks-ib-rdma-via-nodewright branch from 7186f16 to 5705691 Compare July 9, 2026 23:34
@ayuskauskas ayuskauskas changed the title feat(recipes): replace AKS ib-node-config DaemonSet with nodewright nvidia-setup aks-h100 feat(recipes): replace AKS ib-node-config DaemonSet with nodewright tuning Jul 9, 2026
@ayuskauskas

Copy link
Copy Markdown
Contributor Author

Reworked per review: no separate AKS manifest. The AKS accelerator overlays now reuse the shared tuning.yaml (setup and tuning) with service: aks, and tuning.yaml bumps nvidia-setup to 0.5.0, which is EKS-compatible (the 0.5.0 delta is only the aks-h100 combination and the KERNEL-unset no-op). This matches the CR shape that was verified on the live AKS cluster.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pkg/tuning/compute_test.go`:
- Around line 40-41: Update the AKS test cases in the compute test table to
include expected package versions, specifically asserting the nvidia-setup 0.5.0
pin for the changed rows. Extend the relevant test comparison logic to validate
both package names and versions, including the nvidia-tuned version where
applicable.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 34ae8668-0699-4c30-acb5-dcca7ad584b0

📥 Commits

Reviewing files that changed from the base of the PR and between 7186f16 and 5705691.

📒 Files selected for processing (9)
  • docs/integrator/components/nodewright.md
  • docs/user/container-images.md
  • pkg/tuning/compute_test.go
  • recipes/components/network-operator/manifests/ib-node-config-aks.yaml
  • recipes/components/nodewright-customizations/manifests/tuning.yaml
  • recipes/overlays/a100-aks-training.yaml
  • recipes/overlays/aks.yaml
  • recipes/overlays/h100-aks-inference.yaml
  • recipes/overlays/h100-aks-training.yaml
💤 Files with no reviewable changes (1)
  • recipes/components/network-operator/manifests/ib-node-config-aks.yaml

Comment thread pkg/tuning/compute_test.go

@mchmarny mchmarny 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.

Solid replacement of the privileged ib-node-config DaemonSet — the AKS wiring exactly mirrors the EKS pattern, the live-cluster verification is thorough, and docs/BOM/tuning-docs are all regenerated. One high-severity concern blocks: the default aicr bundle path injects the wildcard operator: Exists toleration into the Skyhook CR, which is exactly the nodewright#296 deadlock the manifest comment warns about — and since nvidia-setup-full carries a reboot interrupt, a default AKS bundle deadlocks on first install where the old DaemonSet worked out of the box. A bundle-time validation warning (the framework already supports service conditions) and/or a user-docs note would resolve it. Two minor items: a stale comment in nfd-network-rule.yaml and a double blank line. CI green so far (Tier 1 matrix still in progress).

Comment thread recipes/components/nodewright-customizations/manifests/tuning.yaml Outdated
Comment thread recipes/overlays/aks.yaml
Comment thread recipes/overlays/aks.yaml Outdated
@github-actions

Copy link
Copy Markdown
Contributor

@ayuskauskas this PR now has merge conflicts with main. Please rebase to resolve them.

@ayuskauskas
ayuskauskas force-pushed the feat/aks-ib-rdma-via-nodewright branch from 5705691 to 73a37a5 Compare July 10, 2026 23:53
@ayuskauskas ayuskauskas added theme/recipes Recipe expansion, overlays, mixins, and component registry and removed needs-rebase labels Jul 10, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
recipes/overlays/aks.yaml (1)

56-76: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Add the Nodewright tuning to the direct AKS overlays
recipes/overlays/aks-training.yaml and recipes/overlays/aks-inference.yaml still inherit from aks without nodewright-customizations, so those AKS variants lose the RDMA/memlock setup now that ib-node-config-aks is gone. Add the component there, or document that these two recipes intentionally opt out.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@recipes/overlays/aks.yaml` around lines 56 - 76, Add
nodewright-customizations to both aks-training.yaml and aks-inference.yaml so
they retain the RDMA and MEMLOCK tuning inherited from the base AKS setup. Match
the component configuration and dependency references used by the direct AKS
overlay, or explicitly document the intentional opt-out in both recipes if that
is the desired behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@recipes/registry.yaml`:
- Around line 266-274: The CheckWildcardAcceleratedToleration validation is too
permissive for a configuration that can cause an unrecoverable AKS installation
deadlock. Change its severity from warning to error so bundle generation is
blocked until users provide a keyed --accelerated-node-toleration value.

---

Outside diff comments:
In `@recipes/overlays/aks.yaml`:
- Around line 56-76: Add nodewright-customizations to both aks-training.yaml and
aks-inference.yaml so they retain the RDMA and MEMLOCK tuning inherited from the
base AKS setup. Match the component configuration and dependency references used
by the direct AKS overlay, or explicitly document the intentional opt-out in
both recipes if that is the desired behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 2e9b26d9-84ce-42b2-903f-18bcbdf60644

📥 Commits

Reviewing files that changed from the base of the PR and between 5705691 and 73a37a5.

📒 Files selected for processing (15)
  • docs/contributor/validator.md
  • docs/integrator/aks-gpu-setup.md
  • docs/integrator/components/nodewright.md
  • docs/user/container-images.md
  • pkg/bundler/validations/checks.go
  • pkg/bundler/validations/checks_test.go
  • pkg/tuning/compute_test.go
  • recipes/components/network-operator/manifests/ib-node-config-aks.yaml
  • recipes/components/network-operator/manifests/nfd-network-rule.yaml
  • recipes/components/nodewright-customizations/manifests/tuning.yaml
  • recipes/overlays/a100-aks-training.yaml
  • recipes/overlays/aks.yaml
  • recipes/overlays/h100-aks-inference.yaml
  • recipes/overlays/h100-aks-training.yaml
  • recipes/registry.yaml
💤 Files with no reviewable changes (1)
  • recipes/components/network-operator/manifests/ib-node-config-aks.yaml

Comment thread recipes/registry.yaml
…uning

Removes the privileged ib-node-config-aks DaemonSet from the AKS
network-operator component and wires the AKS accelerator overlays
(h100-aks-inference, h100-aks-training, a100-aks-training) to the same
nodewright-customizations tuning manifest EKS uses, with service: aks.

nvidia-setup is bumped to 0.5.0 in tuning.yaml, which adds the aks-h100
combination (NVIDIA/nodewright-packages#42): host IB RDMA setup
(ib_umad/rdma_ucm module loading persisted via modules-load.d, memlock
limits, LimitMEMLOCK=infinity drop-ins for containerd/kubelet), replacing
what the DaemonSet did. 0.5.0 is otherwise identical to 0.4.0 for EKS, so
the shared manifest keeps working for the existing services. On AKS the
nvidia-setup-kernel package is a designed no-op (aks defaults omit KERNEL)
and nvidia-tuned applies the aks-h100-{intent} profiles.

Guards the AKS wildcard-toleration deadlock at bundle time: a new
CheckWildcardAcceleratedToleration validation (registry-scoped to
service: aks on nodewright-customizations) warns when the effective
accelerated-node tolerations include a keyless wildcard — the default
aicr bundle path injects one via DefaultTolerations(), and AKS admission
collapses toleration lists to the wildcard, which breaks the nodewright
drain exemption for its own package pods and deadlocks interrupt-bearing
packages on first install (NVIDIA/nodewright#296). The caveat is
documented in the shared manifest and in docs/integrator/aks-gpu-setup.md
alongside the RDMA opt-out instructions.

Verified end to end on AKS v1.35.5 with 2x Standard_ND96isr_H100_v5 running
this package chain (kernel no-op, nvidia-tuned aks-h100-inference profile,
IB modules + effective unlimited memlock, reboot persistence).

Regenerates the tuning-status table (aks rows) and the container-images BOM,
and updates the tuning structure test rows.

Signed-off-by: Alex Yuskauskas <ayuskauskas@nvidia.com>
@ayuskauskas
ayuskauskas force-pushed the feat/aks-ib-rdma-via-nodewright branch from 73a37a5 to b4850ef Compare July 13, 2026 16:02

@mchmarny mchmarny 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.

LGTM. All review threads resolved and verified against the head commit:

  • CheckWildcardAcceleratedToleration wired on nodewright-customizations at severity: error, with the disabled-component guard so the nodewrightcustomizations:enabled=false opt-out isn't false-flagged — correct, not just strict.
  • Stale nfd-network-rule.yaml DaemonSet comment rewritten to the NicClusterPolicy nodeAffinity intent.
  • wantRow kept version-agnostic; pins stay CI-gated by make tuning-check + TestCompute_VersionsMatchBOM.

The default-bundle deadlock concern is now fenced off by a blocking check with two documented escape hatches (keyed toleration / component disable), both live-verified. Coverage up (+2.31% on pkg/bundler/validations). Approving once the in-flight CI run is green.

@mchmarny
mchmarny enabled auto-merge (squash) July 13, 2026 16:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/bundler area/docs area/recipes area/tests size/XL theme/recipes Recipe expansion, overlays, mixins, and component registry

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants