Summary
An audit of every recipe declaring an nccl-all-reduce-bw* performance check
found four (service, accelerator) tuples where the recipe advertises a check
that the performance validator skips — a skipped check does not fail, so the
performance phase reports passed without ever measuring or enforcing the
threshold (false assurance). The root cause is the validator's
supportedNCCLCombinations support table: it is an exact (variant, service) → []accelerator lookup with no Any fallback, so any declared tuple absent from
the table silently no-ops.
These are pre-existing issues on main (independent of any in-flight PR).
Full audit
| Recipe |
Tuple |
Check / variant |
Validator behavior |
Resolution |
b200-gke-cos-training (+ Kubeflow child) |
gke + b200 |
nccl-all-reduce-bw (default) |
skipped |
remove |
h100-aks-training (+ ubuntu child) |
aks + h100 |
nccl-all-reduce-bw (default) |
skipped |
remove |
h200-eks-training |
eks + h200 |
nccl-all-reduce-bw (default), >= 300 |
skipped |
wire |
(correct, no change) gb200-eks-training, gb200-oke-training, h100-eks-training, h100-gke-cos-training |
— |
net/nvls/default |
enforced |
— |
A100 training recipes (a100-{eks,oke,aks,gke}-…) correctly comment the check
out (no active performance: block); slurm leaves correctly set checks: []
(K8s-native NCCL dropped on Slinky). Those are not affected.
Evidence
The support table (validators/performance/nccl_all_reduce_bw_constraint.go):
variantDefault: {
CriteriaServiceEKS: {CriteriaAcceleratorH100}, // no b200, no h200
CriteriaServiceGKE: {CriteriaAcceleratorH100}, // no b200
CriteriaServiceAny: {CriteriaAcceleratorB200, GB200}, // matches service=any only
// no CriteriaServiceAKS entry at all
},
variantNVLS: { CriteriaServiceEKS: {GB200}, CriteriaServiceOKE: {GB200} },
Resolution is an exact service lookup with no Any fallback:
if supportedAccelerators, ok := supportedNCCLCombinations[variant][service]; ok {
for _, a := range supportedAccelerators { if accelerator == a { supported = true } }
}
// gke+b200 -> byService[gke] = [H100] -> b200 absent -> skip
// aks+h100 -> byService[aks] absent entirely -> skip
// eks+h200 -> byService[eks] = [H100] -> h200 absent -> skip
Each falls through to "skipped - requires Service + Accelerator to be implemented", and the phase passes.
Why some are "remove" and one is "wire"
Enforcing a check requires the validator to actually run it, which needs a
testbed-validated, transport-specific NCCL runtime template — not just a table
entry. The three tuples differ in how cheaply that can be done:
gke + b200 (A4) → remove. The only GKE template is TCPXO/FastRak-specific
to a3-megagpu H100 (tcpxo-daemon sidecar, nccl-tcpxo-installer profile),
and the GKE Go path is hardwired to TCPXO 8-NIC discovery. A4 uses GPUDirect
RDMA over RoCE/CX-7 — a different transport that needs a new, testbed-
validated template (nvcf-dgxc-k8s-gcp-azne1-prd7). Can't author/validate it
without the testbed.
aks + h100 → remove. No AKS template and no AKS scheduling path exist at
all (AKS falls into the service=any bucket). Needs a validated AKS template +
path.
eks + h200 → wire. H200 is Hopper on EFA — electrically identical to H100
for NCCL (NVLink4 intra-node, EFA inter-node). It reuses the existing
testdata/h100/eks/runtime.yaml and the same calibrated >= 300 GB/s floor, so
wiring is a table entry + a NVIDIA-H200- product matcher + the shared
template. (Wants one EFA-testbed confirmation, but the floor is conservative.)
Resolution (this issue's PR)
- Remove the unenforced
nccl-all-reduce-bw check + constraint from
b200-gke-cos-training.yaml (Kubeflow child inherits) and
h100-aks-training.yaml (ubuntu child inherits), replacing each with a comment
explaining why it is intentionally not declared and what wiring it would need.
- Wire
eks + h200: add H200 to variantDefault.EKS, add a NVIDIA-H200-
product matcher, add testdata/h200/eks/runtime.yaml (mirrors the H100 EKS
template), and keep the recipe's >= 300 floor. Tests updated.
Follow-ups (tracked separately, gated on testbed characterization): wire
gke + b200 once the B200 GKE A4 RoCE/RDMA template is validated; wire
aks + h100 once an AKS template + scheduling path exist.
Summary
An audit of every recipe declaring an
nccl-all-reduce-bw*performance checkfound four
(service, accelerator)tuples where the recipe advertises a checkthat the performance validator skips — a skipped check does not fail, so the
performance phase reports
passedwithout ever measuring or enforcing thethreshold (false assurance). The root cause is the validator's
supportedNCCLCombinationssupport table: it is an exact(variant, service) → []acceleratorlookup with noAnyfallback, so any declared tuple absent fromthe table silently no-ops.
These are pre-existing issues on
main(independent of any in-flight PR).Full audit
b200-gke-cos-training(+ Kubeflow child)gke + b200nccl-all-reduce-bw(default)h100-aks-training(+ ubuntu child)aks + h100nccl-all-reduce-bw(default)h200-eks-trainingeks + h200nccl-all-reduce-bw(default),>= 300gb200-eks-training,gb200-oke-training,h100-eks-training,h100-gke-cos-trainingA100 training recipes (
a100-{eks,oke,aks,gke}-…) correctly comment the checkout (no active
performance:block); slurm leaves correctly setchecks: [](K8s-native NCCL dropped on Slinky). Those are not affected.
Evidence
The support table (
validators/performance/nccl_all_reduce_bw_constraint.go):Resolution is an exact service lookup with no
Anyfallback:Each falls through to
"skipped - requires Service + Accelerator to be implemented", and the phase passes.Why some are "remove" and one is "wire"
Enforcing a check requires the validator to actually run it, which needs a
testbed-validated, transport-specific NCCL runtime template — not just a table
entry. The three tuples differ in how cheaply that can be done:
gke + b200(A4) → remove. The only GKE template is TCPXO/FastRak-specificto a3-megagpu H100 (
tcpxo-daemonsidecar,nccl-tcpxo-installerprofile),and the GKE Go path is hardwired to TCPXO 8-NIC discovery. A4 uses GPUDirect
RDMA over RoCE/CX-7 — a different transport that needs a new, testbed-
validated template (
nvcf-dgxc-k8s-gcp-azne1-prd7). Can't author/validate itwithout the testbed.
aks + h100→ remove. No AKS template and no AKS scheduling path exist atall (AKS falls into the
service=anybucket). Needs a validated AKS template +path.
eks + h200→ wire. H200 is Hopper on EFA — electrically identical to H100for NCCL (NVLink4 intra-node, EFA inter-node). It reuses the existing
testdata/h100/eks/runtime.yamland the same calibrated>= 300 GB/sfloor, sowiring is a table entry + a
NVIDIA-H200-product matcher + the sharedtemplate. (Wants one EFA-testbed confirmation, but the floor is conservative.)
Resolution (this issue's PR)
nccl-all-reduce-bwcheck + constraint fromb200-gke-cos-training.yaml(Kubeflow child inherits) andh100-aks-training.yaml(ubuntu child inherits), replacing each with a commentexplaining why it is intentionally not declared and what wiring it would need.
eks + h200: addH200tovariantDefault.EKS, add aNVIDIA-H200-product matcher, add
testdata/h200/eks/runtime.yaml(mirrors the H100 EKStemplate), and keep the recipe's
>= 300floor. Tests updated.Follow-ups (tracked separately, gated on testbed characterization): wire
gke + b200once the B200 GKE A4 RoCE/RDMA template is validated; wireaks + h100once an AKS template + scheduling path exist.