Goal
Make the nccl-all-reduce-bw-net performance validator work on a ConnectX RoCE fabric (e.g. the DGXC GB300 p6e-gb300r clusters), so RoCE training recipes get a real NET performance gate instead of failing or skipping. Today the NET test is hardwired for AWS EFA, so --phase performance on a RoCE recipe cannot run the NET transport.
This issue tracks the RoCE NET variant specifically. The broader question of making fabric a first-class, discoverable dimension is captured as an open question below — not committed here.
Background — nccl-all-reduce-bw-net is EFA-hardwired
The NET validator forces the EFA libfabric provider and requests the EFA extended resource, neither of which exists on RoCE nodes.
In validators/performance/testdata/gb200/eks/runtime-net.yaml:
- EFA-packaged image:
public.ecr.aws/hpc-cloud/nccl-tests:cuda12.8.1-efa1.43.2-ofiv1.16.3-ncclv2.27.7-...
- EFA-provider env:
FI_PROVIDER=efa, FI_EFA_USE_DEVICE_RDMA=1, FI_EFA_FORK_SAFE=1
- Requests the EFA extended resource:
vpc.amazonaws.com/efa (buildEFAResourceLine in nccl_all_reduce_bw_constraint.go)
GB300 reuses the GB200 NCCL testdata — nccl_all_reduce_bw_constraint.go aliases accelerator == gb300 → gb200 for templatePath, so GB300 inherits the EFA-only NET test.
On a RoCE node this fails two ways:
vpc.amazonaws.com/efa does not exist → the NET pod is Unschedulable.
- Even if scheduled,
FI_PROVIDER=efa + the EFA-only image cannot drive ConnectX RoCE → no NET transport.
The nccl-all-reduce-bw-nvls variant is unaffected — it exercises NVLink/IMEX (ComputeDomain), independent of the external fabric.
Confirmed by the DGXC platform team (GB300 = ConnectX-8 RoCE, deliberate). Required RoCE config:
apiVersion: resource.k8s.io/v1
kind: ResourceClaimTemplate
metadata:
name: eight-roce-rct
spec:
spec:
devices:
requests:
- name: roce
exactly:
deviceClassName: roce.networking.k8s.aws
count: 8 # adjust to GPUs/NICs per pod
---
# pod / worker container:
spec:
containers:
- name: worker
resources:
claims:
- name: roce-channel
resourceClaims:
- name: roce-channel
resourceClaimTemplateName: eight-roce-rct
Scope (this issue)
A RoCE NET variant of the NCCL all-reduce test:
- Transport config: drop
FI_PROVIDER=efa / FI_EFA_*; use the verbs/IB RDMA path over the ConnectX VFs (NCCL_IB_HCA=CX8 interface names, appropriate NCCL_SOCKET_IFNAME).
- Resource request: request RoCE NICs via the RoCE DRA class (
roce.networking.k8s.aws) instead of vpc.amazonaws.com/efa.
- Image: an nccl-tests image with the RDMA/verbs transport (the current one is EFA-packaged).
- Testdata selection by fabric: pick the NET runtime by fabric rather than the current
gb300→gb200 alias that always yields the EFA template.
- Verify-transport assertion: the RoCE variant must assert the verbs/RoCE transport banner instead of the EFA banner.
Implementation: #1428 (RoCE NET variant keyed by AICR_NCCL_FABRIC=roce, default efa).
Acceptance
Open question — make fabric a first-class dimension (not committed here)
The same accelerator can run different fabrics, even on the same service: GB300 on EKS is ConnectX-8 RoCE on the NVIDIA-integrated p6e-gb300r, but EFAv4 on the public p6e-gb300. So (accelerator, service) does not determine the fabric. Fabric affects both the driver/runtime config (verbs/IB vs libfabric; RoCE DRA vs vpc.amazonaws.com/efa) and the perf thresholds.
We do not run both fabrics in one recipe (one fabric per repo/recipe — see #1318), so there is no in-recipe runtime selection. But the right variant still has to be chosen for the node's actual fabric. Open design question — how should fabric be expressed/known?
- Add
fabric as a recipe criterion (efa / roce), and/or
- Discover it from the snapshot via the existing snapshot → fingerprint → criteria path: EFA = AWS EFA PCI function (vendor
1d0f) / vpc.amazonaws.com/efa; ConnectX RoCE = Mellanox VFs (vendor 15b3) and/or /sys/class/infiniband/*/ports/*/link_layer == Ethernet (works pre-GPU-stack, like PCI-based accelerator detection).
This is TBD and should likely be split into its own issue once more fabric-divergent recipes exist; the RoCE NET variant above does not block on it (it can key off AICR_NCCL_FABRIC in the interim).
Links
Goal
Make the
nccl-all-reduce-bw-netperformance validator work on a ConnectX RoCE fabric (e.g. the DGXC GB300p6e-gb300rclusters), so RoCE training recipes get a real NET performance gate instead of failing or skipping. Today the NET test is hardwired for AWS EFA, so--phase performanceon a RoCE recipe cannot run the NET transport.This issue tracks the RoCE NET variant specifically. The broader question of making fabric a first-class, discoverable dimension is captured as an open question below — not committed here.
Background —
nccl-all-reduce-bw-netis EFA-hardwiredThe NET validator forces the EFA libfabric provider and requests the EFA extended resource, neither of which exists on RoCE nodes.
In
validators/performance/testdata/gb200/eks/runtime-net.yaml:public.ecr.aws/hpc-cloud/nccl-tests:cuda12.8.1-efa1.43.2-ofiv1.16.3-ncclv2.27.7-...FI_PROVIDER=efa,FI_EFA_USE_DEVICE_RDMA=1,FI_EFA_FORK_SAFE=1vpc.amazonaws.com/efa(buildEFAResourceLineinnccl_all_reduce_bw_constraint.go)GB300 reuses the GB200 NCCL testdata —
nccl_all_reduce_bw_constraint.goaliasesaccelerator == gb300 → gb200fortemplatePath, so GB300 inherits the EFA-only NET test.On a RoCE node this fails two ways:
vpc.amazonaws.com/efadoes not exist → the NET pod is Unschedulable.FI_PROVIDER=efa+ the EFA-only image cannot drive ConnectX RoCE → no NET transport.The
nccl-all-reduce-bw-nvlsvariant is unaffected — it exercises NVLink/IMEX (ComputeDomain), independent of the external fabric.Confirmed by the DGXC platform team (GB300 = ConnectX-8 RoCE, deliberate). Required RoCE config:
FI_PROVIDER=efa; setNCCL_IB_HCAto the CX8 interface names.ResourceClaimTemplatereferencingroce.networking.k8s.aws.Scope (this issue)
A RoCE NET variant of the NCCL all-reduce test:
FI_PROVIDER=efa/FI_EFA_*; use the verbs/IB RDMA path over the ConnectX VFs (NCCL_IB_HCA=CX8 interface names, appropriateNCCL_SOCKET_IFNAME).roce.networking.k8s.aws) instead ofvpc.amazonaws.com/efa.gb300→gb200alias that always yields the EFA template.Implementation: #1428 (RoCE NET variant keyed by
AICR_NCCL_FABRIC=roce, defaultefa).Acceptance
nccl-all-reduce-bw-netselects the EFA or RoCE variant for the node's actual fabric.>= 40is a GB200/EFA-inherited placeholder, never measured on RoCE — see [Epic]: Performance-phase constraints: empirically-grounded thresholds for testbed-blocked overlays #1043/nccl-all-reduce-bw training gate is a fixed absolute fabric-specific busbw value applied to SKU-agnostic recipes → false-fails EKS/H100 small SKUs #1256).Open question — make fabric a first-class dimension (not committed here)
The same accelerator can run different fabrics, even on the same service: GB300 on EKS is ConnectX-8 RoCE on the NVIDIA-integrated
p6e-gb300r, but EFAv4 on the publicp6e-gb300. So(accelerator, service)does not determine the fabric. Fabric affects both the driver/runtime config (verbs/IB vs libfabric; RoCE DRA vsvpc.amazonaws.com/efa) and the perf thresholds.We do not run both fabrics in one recipe (one fabric per repo/recipe — see #1318), so there is no in-recipe runtime selection. But the right variant still has to be chosen for the node's actual fabric. Open design question — how should fabric be expressed/known?
fabricas a recipe criterion (efa/roce), and/or1d0f) /vpc.amazonaws.com/efa; ConnectX RoCE = Mellanox VFs (vendor15b3) and/or/sys/class/infiniband/*/ports/*/link_layer == Ethernet(works pre-GPU-stack, like PCI-based accelerator detection).This is TBD and should likely be split into its own issue once more fabric-divergent recipes exist; the RoCE NET variant above does not block on it (it can key off
AICR_NCCL_FABRICin the interim).Links