Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -363,9 +363,17 @@
// workload-side daemon (tcpgpudmarxd-dev) must move together; an
// independent Renovate bump on this image alone would create
// stack version skew. See docs/integrator/gke-tcpxo-networking.md.
// - tcpgpudmarxd-dev: the workload-side half of the same TCPXO pair.
// Pre-emptive rather than an active guard today: the kubernetes manager
// above is narrowed to recipes/components/*/manifests, and the daemon
// appears only in demos/ and validators/**/testdata/, so Renovate does not
// extract it at present. Listed so that widening those patterns cannot
// silently let the daemon move on its own — the same stack version skew as
// bumping the installer alone, from the opposite direction.
ignoreDeps: [
"602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/aws-efa-k8s-device-plugin",
"us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev",

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.

🔵 Nitpick — ignoreDeps daemon entry is pre-emptive, not an active drift guard today

Worth keeping, but the comment (:366-370) and the PR body frame this entry as symmetric with the installer entry, and today it isn't in effect. Renovate never extracts tcpgpudmarxd-dev: the image appears only in demos/** (not covered by the kubernetes manager's managerFilePatterns, which is narrowed to ^recipes/components/[^/]+/manifests/[^/]+\.ya?ml$) and in validators/**/testdata/** (excluded by ignorePaths). The sibling nccl-plugin-gpudirecttcpx-dev entry IS load-bearing because that image lives in the scanned recipe manifest nccl-tcpxo-installer.yaml:101.

Blast radius: None functionally — the entry is harmless and correctly becomes load-bearing if the daemon ever lands in a scanned manifest. This is a wording accuracy note, not a defect.

Fix: Consider softening the comment, e.g. "pre-emptive symmetry — the daemon isn't in a Renovate-scanned path today, but this keeps the pair coupled if it ever lands in recipes/components/*/manifests/."

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

You're right, and my reasoning was wrong. I had assumed demos/ was scannable because it isn't in ignorePaths — but managerFilePatterns is the actual gate, and the kubernetes manager is narrowed to ^recipes/components/[^/]+/manifests/. The daemon appears only in demos/ and validators/**/testdata/, so Renovate never extracts it.

Fixed in 9035485. The comment now says the entry is pre-emptive rather than an active guard, explains why (manager scope, not ignorePaths), and states what it does buy: a future widening of those patterns can't silently let the daemon move alone. PR body corrected to match — it made the same overstatement.

"us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev",
],

// Paths Renovate should not scan.
Expand Down
22 changes: 14 additions & 8 deletions demos/workloads/training/gke-nccl-test-tcpxo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,17 @@
# - GPU Operator with driver.enabled=false (GKE COS manages drivers)
#
# Image version note:
# The nccl-test container image must match the cluster's installed TCPXO
# plugin version. Check with:
# Google ships the plugin installer and the tcpxo-daemon as a coupled release
# pair; running a mismatched pair is unsupported. This manifest is pinned to
# v1.0.15 (nccl-plugin-gpudirecttcpx-dev) with v1.0.21 (tcpgpudmarxd-dev),

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.

🔵 Nitpick — Version pair now also stated in prose

Adds the v1.0.15 / v1.0.21 pair in prose alongside the two image lines, growing the hand-maintained-literal surface. It also helps the reader by naming the pinned pair where they'll edit it, and the single-source-of-truth follow-up is already tracked in #2378.

Fix: No action needed here; noting for completeness.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Agreed on both halves. It does grow the hand-maintained surface, and that's the tradeoff — but naming the pair where the reader is about to edit it is the point of the header, since the whole failure mode is updating one image and not the other. #2378 tracks collapsing these literals to a single source of truth; its drift-surface inventory counts every site, this prose included.

# matching the installer the AICR recipe deploys.
#
# If your cluster runs a different installer version, check it with:
# kubectl get ds nccl-tcpxo-installer -n kube-system \
# -o jsonpath='{.spec.template.spec.containers[?(@.name=="nccl-tcpxo-installer")].image}'
# Then update the nccl-plugin-gpudirecttcpx-dev tag below to match.
# -o jsonpath='{.spec.template.spec.initContainers[?(@.name=="nccl-tcpxo-installer")].image}'
# then update BOTH images below to that installer's pair, per Google's
# release notes: https://github.com/GoogleCloudPlatform/container-engine-accelerators/blob/master/gpudirect-tcpxo/README.md
# Updating only one half recreates the mismatch this pairing exists to avoid.
#
# Usage:
# kubectl create ns nccl-test
Expand Down Expand Up @@ -127,7 +133,7 @@ spec:
cloud.google.com/gke-accelerator: nvidia-h100-mega-80gb
containers:
- name: tcpxo-daemon
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.20
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.21
imagePullPolicy: Always
command: ["/bin/sh", "-c"]
args:
Expand All @@ -150,7 +156,7 @@ spec:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
- name: nccl-test
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.14
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.15
imagePullPolicy: Always
command:
- /bin/sh
Expand Down Expand Up @@ -242,7 +248,7 @@ spec:
cloud.google.com/gke-accelerator: nvidia-h100-mega-80gb
containers:
- name: tcpxo-daemon
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.20
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.21
imagePullPolicy: Always
command: ["/bin/sh", "-c"]
args:
Expand All @@ -265,7 +271,7 @@ spec:
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
- name: nccl-test
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.14
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/nccl-plugin-gpudirecttcpx-dev:v1.0.15
imagePullPolicy: Always
command:
- /bin/sh
Expand Down
7 changes: 4 additions & 3 deletions docs/integrator/gke-tcpxo-networking.md
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ Running a **Kubeflow TrainJob** rather than a bare Pod? A TrainJob cannot add
the `tcpxo-daemon` sidecar, so the wiring must live in a `TrainingRuntime` — see
[Attaching a Training Workload to the Cluster Fabric](../user/fabric-attached-training.md).

See [`demos/workloads/training/gke-nccl-test-tcpxo.yaml`](https://github.com/NVIDIA/aicr/blob/main/demos/workloads/training/gke-nccl-test-tcpxo.yaml) for a complete 2-node NCCL benchmark example. (pinned to an earlier coupled pair, plugin `v1.0.14` with daemon `v1.0.20`)
See [`demos/workloads/training/gke-nccl-test-tcpxo.yaml`](https://github.com/NVIDIA/aicr/blob/main/demos/workloads/training/gke-nccl-test-tcpxo.yaml) for a complete 2-node NCCL benchmark example. (pinned to the same coupled pair the recipe ships, plugin `v1.0.15` with daemon `v1.0.21`)

## NCCL Plugin Version Matching

Expand Down Expand Up @@ -258,8 +258,9 @@ NRI profile (recommended, no `hostNetwork`):

```shell
kubectl create ns nccl-test
# Note: this manifest is pinned to the earlier v1.0.14 / v1.0.20 pair.
# Update both images to your cluster's pair before applying.
# Note: this manifest is pinned to the v1.0.15 / v1.0.21 pair, matching the
# installer the recipe deploys. If your cluster runs a different installer
# version, update both images to that cluster's pair before applying.
kubectl apply -f demos/workloads/training/gke-nccl-test-tcpxo.yaml -n nccl-test

# Wait for pods to be 2/2 Running
Expand Down
2 changes: 1 addition & 1 deletion validators/performance/testdata/h100/gke/runtime.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ spec:
# alongside the worker. Uses NRI device injection (devices.gke.io
# annotation) for GPU device access instead of privileged mode.
- name: tcpxo-daemon
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.20
image: us-docker.pkg.dev/gce-ai-infra/gpudirect-tcpxo/tcpgpudmarxd-dev:v1.0.21
imagePullPolicy: Always
restartPolicy: Always
command: ["/bin/sh", "-c"]
Expand Down
Loading