Skip to content
RA course/2. Sizing/Lesson 2.1

Rail-optimized design and what breaks it

S2·E1The pod that passed every test · A crop insurer's data hall, eleven weeks before the rate filing

S2·E1Analyze~25 minsources checked todayverified against HGX AI Factory RA (Networking Physical Topologies, Components, Networking Logical Architecture) re-fetched 2026-09-07; DGX SuperPOD B300 Spectrum-4/DC-busbar Network Fabrics re-fetched 2026-09-07; NCCL Environment Variables re-fetched 2026-09-07 (NCCL_IB_HCA format, NCCL_IB_TC/SL default 0, NCCL_IB_GID_INDEX default -1); Network Operator 26.4.0 Spectrum-X page re-fetched 2026-09-07; GB200 NVL72 Key Components page fetched 2026-09-09 (four ConnectX-7 and two BlueField-3 per compute tray)

Builds on: The networks in an AI factory, and what the RA refuses to specify

Before you read: what do you already know?

3 quick questions. Wrong answers are fine and expected; trying first makes the lesson stick.

After this lesson you can

  • State what the NVIDIA RAs actually define as rail-optimized and derive the rail count for a given node from its GPU count.
  • Predict which traffic stays one hop and which traverses the spine for a given cabling scheme.
  • Diagnose a below-line-rate all-reduce by separating a cabling fault from an NCCL pinning fault from a traffic-class fault.
  • Name the three host-side knobs that keep NCCL traffic on its rail and state each one's documented default.

Episode 1 — The pod that passed every test

The situation · A crop insurer's data hall, eleven weeks before the rate filing

The customer underwrites hail and drought risk, and once a year they publish new rates on a fixed filing date. Their case for phase two — another 32 nodes, doubling the fabric — rests on the 32-node HGX B300 pod accepted six weeks ago. This morning their ML team reported the hail model’s all-reduce at roughly 60 percent of budget, and the network lead opened a case asking for a switch RMA. The Dell SE is on the bridge with a coffee he has reheated twice and a spreadsheet of every promise he has made about this pod.

Nothing in the hall is broken. The trouble is that the design promised something narrower than “it works”. The HGX B300 RA connects GPUs “using a rail-optimized network topology through their respective NVIDIA ConnectX-8 SuperNICs”, one adapter per GPU on a baseboard that carries eight of them.[1][7] The SuperPOD RA states the payoff in one line: traffic per rail “is always one hop away from the other 64 nodes in a SU”.[2] That is why the wiring rule exists — collectives spend most of their bytes talking to the same-index peer on every other node, so the design buys that dominant pattern a single switch hop and leaves the spine for traffic that genuinely has to cross rails.

A pod can forward every packet correctly and still not be the pod that was designed.

The network lead taps his notebook and says the thing he always says: show me the counter. Segment 1 starts with what the RAs actually say.

1What the RAs actually say

Rail-optimized is a wiring rule, not a protocol. The HGX B300 Enterprise RA states it in one sentence: “GPUs are connected using a rail-optimized network topology through their respective NVIDIA ConnectX-8 SuperNICs.”[1] The load-bearing word is respective. Each GPU owns its own SuperNIC — the HGX B300 baseboard carries “Eight NVIDIA ConnectX-8 SuperNICs per NVIDIA HGX B300 baseboard” at “Up to 800 Gbps per adapter”, a 1:1 GPU-to-NIC ratio.[7] Rail R is then the set of all the rail-R NICs across every node in the scalable unit, and the rule is that they all land on the same leaf switch.

The consequence is what the SuperPOD RAs publish. In the Spectrum-4 Ethernet and DC-busbar DGX B300 RA, “Each group of 64 nodes is rail-aligned” and “Traffic per rail of the DGX B300 systems is always one hop away from the other 64 nodes in a SU.”[2] The Quantum-X800 InfiniBand edition of the same server says the same thing with a different number: “Traffic per rail of the DGX B300 systems is always one hop away from the other 72 nodes in a SU.”[3] Same server, two RAs, two SU sizes — which matters the moment someone quotes leaf counts.

Rail count is not a design choice. The GB200 NVL72 SuperPOD RA fixes it: “Each SU contains 4 SLGs to match with the number of IB rails (which equals the number of GPUs per compute tray).”[4] Four GPUs per tray, four rails. Eight GPUs per HGX node, eight rails. You do not get to round it.

rail →rail 0rail 1rail 2rail 3rail 4rail 5rail 6rail 7node 0n0·g0n0·g1n0·g2n0·g3n0·g4n0·g5n0·g6n0·g7node 1n1·g0n1·g1n1·g2n1·g3n1·g4n1·g5n1·g6n1·g7node 2n2·g0n2·g1n2·g2n2·g3n2·g4n2·g5n2·g6n2·g7node 3n3·g0n3·g1n3·g2n3·g3n3·g4n3·g5n3·g6n3·g7800Geach 800 Gb/s ConnectX-8 port broken out to 2 interfaces, one per fabricleaf P1leaf 0·P1leaf 1·P1leaf 2·P1leaf 3·P1leaf 4·P1leaf 5·P1leaf 6·P1leaf 7·P1leaf P2leaf 0·P2leaf 1·P2leaf 2·P2leaf 3·P2leaf 4·P2leaf 5·P2leaf 6·P2leaf 7·P2spine 1spine — fabric 1: independent, scales to 1,024 interfaces of 400 Gb/sspine 2spine — fabric 2: independent, scales to 1,024 interfaces of 400 Gb/s
showing 4 of 8 nodes · 8 rails · solid links are fabric 1; a selected GPU draws its link in every fabric

Rail-optimized

GPUs are connected "using a rail-optimized network topology through their respective NVIDIA ConnectX-8 SuperNICs" — the same-index NIC on every node lands on the same leaf. Rail count equals GPUs per node.

Click any GPU cell to follow its SuperNIC to a leaf and a fabric.

Dual planerecommended at 64+ nodes

2 × 400 Gb/s per GPU (800 Gb/s ConnectX-8 port, broken out)

"Each GPU generating 800 Gb/s bandwidth through the ConnectX-8 SuperNICs, dual plane topology involves breaking the interface to 2x400 Gb/s interfaces" — each interface goes "to a different leaf switch", and "Each leaf switch is part of an independent fabric that scales to 1024 interfaces of 400 Gb/s". Load balancing is done "by the ConnectX-8 SuperNIC at hardware level".

Transceiver: twin-port transceiver — MMA4Z00-NS, 800 Gb/s twin-port OSFP, 2 × 400 Gb/s, multimode, 50 m max reach. The RA states the fork in the optics: "dual-plane using twin-port transceivers or single-plane using single-port OSFP transceivers".

Host side: NUM_OF_PLANES_P1=2 (hwplb; 0 for swplb/uniplane) · LAG_RESOURCE_ALLOCATION=1 for hwplb · CNP DSCP 48 for hwplb vs 0 · multiplaneMode: "swplb" | "hwplb"

Network Operator 26.4.0 matrix: Dual-Plane on ConnectX-8 with B300 / GB300 — "swplb" GA, "hwplb" tech preview. "hwplb multiplane mode is only supported on ConnectX-8 (device ID 1023)".

  • It is not a bond and not redundancy pairing: two independent fabrics with no links between them.
  • BOM consequence: leaf count doubles versus single plane at the same per-GPU bandwidth, and the customer must operate two IP fabrics.
  • Twin-planar resilience claim on the DGX B300 SuperPOD RA: "A single switch failure, transceiver failure or cable failure will not lead to a catastrophic job abortion".
Sizing this picture

8 nodes × 8 rails = 64 server-facing 400 Gb/s interfaces per fabric × 2 fabrics = 128 total.

Rail-aligned needs at least one leaf per rail per fabric: 8 rails × 1 leaf per rail = 8 leaves per fabric, 16 leaves total. Pure port arithmetic would only need 1 per fabric — the difference is what rail alignment costs. derived

Leaf radix: SN5610 / SN5600 presents 64 OSFP cages = 128 × 400 Gb/s logical; a non-blocking leaf faces 64 of them at the servers and 64 at the spines. derived — the RAs do not print a per-leaf split

Transceiver at the NIC: twin-port OSFP (MMA4Z00-NS class) — this is a BOM fork, not a field option.

8 GPUs / node: HGX B300 node: "Eight NVIDIA B300 GPUs on an HGX B300 baseboard" with "Eight NVIDIA ConnectX-8 SuperNICs per NVIDIA HGX B300 baseboard" — a 1:1 GPU-to-SuperNIC ratio at "800 Gb/s (2 x 400Gb/s Ethernet) per GPU". 8 GPUs per node means 8 rails.

8 nodes: Below the 64-node line where the RA starts recommending dual plane.

Keeping traffic on its rail from the host

  • NCCL_IB_HCA selects the HCAs, format <hca>[:<port>[:<rail>[:<plane>]]]; ^ excludes, = forces an exact match. Default is "All available IB interfaces".
  • NCCL_IB_TC "Defines the InfiniBand traffic class field", default 0, range 0–15 — set it to the traffic class the switch marks as RoCE.
  • NCCL_IB_SL "Defines the InfiniBand Service Level", default 0, range 0–15. NCCL_IB_GID_INDEX "Defines the Global ID index used in RoCE mode", default -1.
  • NCCL_NET_GDR_LEVEL controls GPUDirect RDMA between a NIC and a GPU: LOC (disabled), PIX, PXB, PHB, SYS. NCCL_SOCKET_IFNAME auto-selects, "favoring interfaces starting with ib".
  • NicInterfaceNameTemplate gives "rail/plane-based network device naming via udev rules" — that is how a rail survives a reboot with a stable interface name.
  • SpectrumXRailPoolConfig carries "rail topology, PF selection, IPAM binding, resource exposure"; CIDRPool allocates IPs per rail or per rail/plane.

FAE angle. "We bought the RA and we get 60% of line rate on all-reduce" is the escalation. Check in order: (1) is the cabling actually rail-aligned, or did the installer cable node-sequentially? (2) is NCCL_IB_HCA pinned so rank N uses rail N? (3) is NCCL_IB_TC set to the traffic class the switch marks as RoCE? Two of those three are free to fix.

Where the RA stops. The RA names six logical networks over one physical fabric — GPU Compute, CPU Converged, Storage, Customer, Support Server Networking and OOB — with "VLAN isolation ... to provide logical separation". It publishes no BGP/EVPN configuration, no IP addressing, no MTU, no DSCP/PFC/ECN values and no adaptive-routing or congestion-control parameters. Those live in the Cumulus and Spectrum-X software docs.

Leave it rail-aligned first. Click one GPU and read the hop count to a same-rail peer and to a cross-rail peer, then come back to this panel after segment 3.

2One hop per rail, and what pays for it

The one-hop property applies per rail and nowhere else. Traffic that must cross rails traverses the spine layer, and the RAs treat that as the accepted cost of the design rather than a fault.[2] So a rail-optimized pod has two very different path lengths inside one fabric, and the job’s communication pattern decides which one it gets.

That is also why the design is described as resilient rather than fragile. In the twin-planar Ethernet B300 design “Each GPU has 2x 400GbE connectivity through two different planes”, and the RA claims that “A single switch failure, transceiver failure or cable failure will not lead to a catastrophic job abortion” — the job degrades instead of dying.[2] Rail alignment and plane splitting are separate ideas that ship together: rails decide which leaf, planes decide which fabric. The next lesson takes planes apart on their own.

For a Dell conversation the number to carry is the leaf radix that the rail has to fit into. The SN5600 and SN5610 present 64 OSFP cages that become 128 logical interfaces of 400 GbE in 2U.[8] A rail of 64 nodes is 64 server-facing 400 GbE interfaces on one leaf — comfortably inside that radix, with room left for uplinks. A rail of 128 nodes is not, and that is where the design stops being a single leaf per rail.

3Failure one: the installer cabled it node-sequentially

The first thing that breaks rail optimization is a cable map that nobody checked. Rail-aligned means node N interface R goes to leaf R. Node-sequential means node N’s eight interfaces all go to leaf N, because that is the tidy way to cable a rack and it uses less patch cord.

Node-sequential wiring is not a failure in any operational sense. Every link trains, every counter is clean, BGP comes up, RoCE is configured, and the fabric forwards everything correctly. The only thing that changed is that the same-index peers a collective talks to are now scattered across eight leaves instead of sitting behind one, so the exchange that the RA promises at one hop takes three.[2][1]

Go back to the interactive above and switch the cabling toggle to node-sequential. Watch the same-rail hop count move from one to three while nothing else on the panel changes. That visual is the whole argument to make in front of a customer who wants to “simplify the wiring”.

cabling breaks the one-hop rail property
rail →rail 0rail 1rail 2rail 3rail 4rail 5rail 6rail 7node 0n0·g0n0·g1n0·g2n0·g3n0·g4n0·g5n0·g6n0·g7node 1n1·g0n1·g1n1·g2n1·g3n1·g4n1·g5n1·g6n1·g7node 2n2·g0n2·g1n2·g2n2·g3n2·g4n2·g5n2·g6n2·g7node 3n3·g0n3·g1n3·g2n3·g3n3·g4n3·g5n3·g6n3·g7800Geach 800 Gb/s ConnectX-8 port broken out to 2 interfaces, one per fabricfabric 1leaf 0·P1leaf 1·P1leaf 2·P1leaf 3·P1leaf 4·P1leaf 5·P1leaf 6·P1leaf 7·P1fabric 2leaf 0·P2leaf 1·P2leaf 2·P2leaf 3·P2leaf 4·P2leaf 5·P2leaf 6·P2leaf 7·P2spine 1spine — fabric 1: independent, scales to 1,024 interfaces of 400 Gb/sspine 2spine — fabric 2: independent, scales to 1,024 interfaces of 400 Gb/s
showing 4 of 8 nodes · 8 rails · solid links are fabric 1; a selected GPU draws its link in every fabric

Rail-optimized

GPUs are connected "using a rail-optimized network topology through their respective NVIDIA ConnectX-8 SuperNICs" — the same-index NIC on every node lands on the same leaf. Rail count equals GPUs per node.

Click any GPU cell to follow its SuperNIC to a leaf and a fabric.

Dual planerecommended at 64+ nodes

2 × 400 Gb/s per GPU (800 Gb/s ConnectX-8 port, broken out)

"Each GPU generating 800 Gb/s bandwidth through the ConnectX-8 SuperNICs, dual plane topology involves breaking the interface to 2x400 Gb/s interfaces" — each interface goes "to a different leaf switch", and "Each leaf switch is part of an independent fabric that scales to 1024 interfaces of 400 Gb/s". Load balancing is done "by the ConnectX-8 SuperNIC at hardware level".

Transceiver: twin-port transceiver — MMA4Z00-NS, 800 Gb/s twin-port OSFP, 2 × 400 Gb/s, multimode, 50 m max reach. The RA states the fork in the optics: "dual-plane using twin-port transceivers or single-plane using single-port OSFP transceivers".

Host side: NUM_OF_PLANES_P1=2 (hwplb; 0 for swplb/uniplane) · LAG_RESOURCE_ALLOCATION=1 for hwplb · CNP DSCP 48 for hwplb vs 0 · multiplaneMode: "swplb" | "hwplb"

Network Operator 26.4.0 matrix: Dual-Plane on ConnectX-8 with B300 / GB300 — "swplb" GA, "hwplb" tech preview. "hwplb multiplane mode is only supported on ConnectX-8 (device ID 1023)".

  • It is not a bond and not redundancy pairing: two independent fabrics with no links between them.
  • BOM consequence: leaf count doubles versus single plane at the same per-GPU bandwidth, and the customer must operate two IP fabrics.
  • Twin-planar resilience claim on the DGX B300 SuperPOD RA: "A single switch failure, transceiver failure or cable failure will not lead to a catastrophic job abortion".
Sizing this picture

8 nodes × 8 rails = 64 server-facing 400 Gb/s interfaces per fabric × 2 fabrics = 128 total.

Node-sequential only has to fill ports: 64 ÷ 64 = 1 leaves per fabric, 2 leaves total — fewer leaves than the 8 per fabric rail alignment needs, and no one-hop rail. derived

Leaf radix: SN5610 / SN5600 presents 64 OSFP cages = 128 × 400 Gb/s logical; a non-blocking leaf faces 64 of them at the servers and 64 at the spines. derived — the RAs do not print a per-leaf split

Transceiver at the NIC: twin-port OSFP (MMA4Z00-NS class) — this is a BOM fork, not a field option.

8 GPUs / node: HGX B300 node: "Eight NVIDIA B300 GPUs on an HGX B300 baseboard" with "Eight NVIDIA ConnectX-8 SuperNICs per NVIDIA HGX B300 baseboard" — a 1:1 GPU-to-SuperNIC ratio at "800 Gb/s (2 x 400Gb/s Ethernet) per GPU". 8 GPUs per node means 8 rails.

8 nodes: Below the 64-node line where the RA starts recommending dual plane.

Keeping traffic on its rail from the host

  • NCCL_IB_HCA selects the HCAs, format <hca>[:<port>[:<rail>[:<plane>]]]; ^ excludes, = forces an exact match. Default is "All available IB interfaces".
  • NCCL_IB_TC "Defines the InfiniBand traffic class field", default 0, range 0–15 — set it to the traffic class the switch marks as RoCE.
  • NCCL_IB_SL "Defines the InfiniBand Service Level", default 0, range 0–15. NCCL_IB_GID_INDEX "Defines the Global ID index used in RoCE mode", default -1.
  • NCCL_NET_GDR_LEVEL controls GPUDirect RDMA between a NIC and a GPU: LOC (disabled), PIX, PXB, PHB, SYS. NCCL_SOCKET_IFNAME auto-selects, "favoring interfaces starting with ib".
  • NicInterfaceNameTemplate gives "rail/plane-based network device naming via udev rules" — that is how a rail survives a reboot with a stable interface name.
  • SpectrumXRailPoolConfig carries "rail topology, PF selection, IPAM binding, resource exposure"; CIDRPool allocates IPs per rail or per rail/plane.

FAE angle. "We bought the RA and we get 60% of line rate on all-reduce" is the escalation. Check in order: (1) is the cabling actually rail-aligned, or did the installer cable node-sequentially? (2) is NCCL_IB_HCA pinned so rank N uses rail N? (3) is NCCL_IB_TC set to the traffic class the switch marks as RoCE? Two of those three are free to fix.

Where the RA stops. The RA names six logical networks over one physical fabric — GPU Compute, CPU Converged, Storage, Customer, Support Server Networking and OOB — with "VLAN isolation ... to provide logical separation". It publishes no BGP/EVPN configuration, no IP addressing, no MTU, no DSCP/PFC/ECN values and no adaptive-routing or congestion-control parameters. Those live in the Cumulus and Spectrum-X software docs.

Node-sequential cabling of the same pod. Compare the hop counts against the rail-aligned run above - the switch count and the transceiver count did not change.

4Failures two and three: NCCL is not pinned, and lands in the wrong class

Even on perfect cabling, the host has to cooperate. NCCL_IB_HCA selects which HCAs NCCL may use, with the format <hca>[:<port>[:<rail>[:<plane>]]]; a ^ prefix excludes and = forces an exact match, and when the port is omitted all ports on the HCA are used.[5] The page documents the filter, not a default: with the variable unset NCCL uses every IB Verbs interface it finds, so nothing is rail-pinned until somebody pins it.[5] A rank that picks the wrong device is doing rail-crossing traffic by accident on correctly cabled hardware.

The second host knob is the traffic class. NCCL_IB_TC “Defines the InfiniBand traffic class field”; the page states only that the default value is 0 and refers you to the InfiniBand specification Volume 1 or vendor documentation for the legal values.[5] If the switch marks a different class as the RoCE class, default NCCL traffic is riding in the wrong queue — plenty fast when the fabric is idle and badly behaved the moment it is not. Its siblings matter for the same reason: NCCL_IB_SL (Service Level, default 0, range likewise deferred to the IB spec) and NCCL_IB_GID_INDEX, which “Defines the Global ID index used in RoCE mode”, default -1.[5]

Two more variables belong on the same checklist. NCCL_NET_GDR_LEVEL controls when GPUDirect RDMA is used between a NIC and a GPU, with values LOC (never), PIX, PXB, PHB and SYS (even across the SMP interconnect between NUMA nodes).[5] And NCCL_SOCKET_IFNAME auto-selects by default, favouring interfaces whose names start with ib and skipping lo and docker* unless nothing else exists.[5] On a Kubernetes cluster the naming itself is managed: the Spectrum-X Network Operator supplies NicInterfaceNameTemplate for “predictable rail/plane-based netdev names driven by udev rules” and SpectrumXRailPoolConfig for “rail topology, PF selection, IPAM binding, and DRA / SR-IOV resource exposure”.[6]

5The escalation, in the order that costs least

The classic ticket is “we bought the reference architecture and we get 60% of line rate on all-reduce.” Three causes account for most of them and they have very different costs to check, so check them in cost order: cabling, then NCCL_IB_HCA pinning, then NCCL_IB_TC.[5][1] Two of the three are free.

Walk the tree below on the throughput branch before you open a real case. It is worth internalising that the first question is never “which switch is bad” — it is “is the traffic where the design assumed it would be”.

SymptomBlueField-3 on a Dell Pow…SymptomDev / environment: build,…SymptomSample runs, exits cleanl…CheckAre hugepages allocated…
Symptom

Sample runs, exits cleanly, but zero throughput

Start at the throughput branch. Note how many of the checks are host-side before any switch is touched.
Diagnose a 60-percent all-reduce on a 32-node HGX B300 pod

A Dell-installed 32-node HGX B300 pod (256 GPUs, dual plane). Pair bandwidth tests pass at line rate. A 32-node all-reduce runs at roughly 60% of expected. The customer wants a switch RMA.

  1. Establish what the design promised. 8 GPUs per node, 1 ConnectX-8 SuperNIC per GPU, so eight rails.[7] The RA’s promise is that rail-R traffic is one hop inside the SU.[2] Anything above one hop for same-index peers is a deviation from the design, not a switch defect.
  2. Read the as-built port map, not the design drawing. Look for the mechanical signature: every node’s port 1 on the same leaf. If instead every leaf holds all eight ports of four nodes, the build is node-sequential and you have your answer.[1]
    # on one compute node, list the RDMA devices and their netdevs
    ibdev2netdev
    Expected: eight device-to-netdev pairs, one per SuperNIC. If not: fix the inventory question before the topology question.
  3. Read the job environment.
    env | grep -E '^NCCL_(IB_HCA|IB_TC|IB_SL|IB_GID_INDEX|NET_GDR_LEVEL|SOCKET_IFNAME)='
    Expected on a tuned pod: an explicit NCCL_IB_HCA list and an explicit NCCL_IB_TC. Empty output means NCCL is using every available IB interface and traffic class 0, both defaults.[5]
  4. Compare NCCL_IB_TC against the switch’s RoCE class. Traffic class 0 is the NCCL default; if the fabric marks a different class as RoCE, the traffic is outside the lossless queue.[5]
  5. Change one thing and re-measure. Pin NCCL_IB_HCA so rank N uses its rail-matched device, re-run the same collective, record the number. Then set NCCL_IB_TC and re-run again. Two runs, two deltas, one attributable cause each.
  6. Conclusion to write in the case. “Fabric forwards correctly. Deviation is in cabling/host configuration, not hardware.” That sentence is why no switch was returned.

Episode 1 — Case note: no switch goes back

How it ended

The as-built port map settles it in two minutes, and it exists only because the night-shift operator labelled every cable during the install. Every node’s eight cables land on one leaf, so the same-index peers the collective talks to are scattered across eight leaves and pay a spine crossing the design never sized for.[2][1] The job environment is empty as well, so NCCL was never pinned.[5] What you say: “The fabric forwards correctly — the deviation is cabling plus host configuration, and two of the three fixes cost nothing but a re-run.” Phase two unfreezes that afternoon. Then the network lead mails one condition ahead of the design review: bond both 400 Gb/s halves of every GPU link into a single LACP aggregate.

Lab

Read-only on the Dell lab’s ConnectX / BlueField-3 hosts. No firmware, no mode changes, no persistent configuration.

  1. Pre-flight inventory. On both hosts, capture what you are about to measure:
    ibstat | head -40
    ibdev2netdev
    ibv_devinfo | grep -E 'hca_id|link_layer|state'
    Expected: at least one device with PORT_ACTIVE. Save the output — it is your baseline and your rollback reference.
  2. Record the NCCL-relevant defaults on this host. Nothing is changed, only read:
    env | grep -E '^NCCL_IB_(HCA|TC|SL|GID_INDEX)='
    show_gids 2>/dev/null | head
    Expected: empty environment (defaults: NCCL_IB_TC=0, NCCL_IB_SL=0, NCCL_IB_GID_INDEX=-1).[5] Write the three defaults into your notes as facts you can quote.
  3. Baseline bandwidth pinned to an explicit device. Server side, then client side:
    # host A
    ib_write_bw -d mlx5_0 -x 3 -F --report_gbits
    # host B
    ib_write_bw -d mlx5_0 -x 3 -F --report_gbits <hostA-ip>
    Expected: a stable BW average near line rate for the link. If it errors on the GID index, drop -x 3 and re-read show_gids.
  4. Repeat with the device chosen for you. Run the same test with a second device (-d mlx5_1) and compare. On a two-port host this is the smallest possible model of “the rank picked a different rail”.
  5. Exercise the exclude modifier without changing anything persistent. In a shell only:
    NCCL_IB_HCA='=mlx5_0' env | grep NCCL_IB_HCA
    NCCL_IB_HCA='^mlx5_0' env | grep NCCL_IB_HCA
    Expected: the exact-match and exclude forms echo back. This is a shell-scoped variable — nothing persists past the process, so there is no rollback to name.
  6. Optional, customer lab only. Repeat step 3 across a real rail-aligned leaf and record the hop count from the switch’s own forwarding view. Read-only commands only; do not enable or disable adaptive routing on a live cluster.

Retrieval check

9 questions from memory. Answer before looking anything up; misses become flashcards.

Explain it to a Dell SE

A Dell SE asks why the install guide insists on a wiring map instead of just plugging eight cables into the nearest leaf. Explain in four sentences what rail-optimized means what it buys and what happens if the installer ignores it.

14 flashcards for this lesson — 0 in deck. Spaced review lives at /review.

Sources

Facts in this lesson were checked against HGX AI Factory RA (Networking Physical Topologies, Components, Networking Logical Architecture) re-fetched 2026-09-07; DGX SuperPOD B300 Spectrum-4/DC-busbar Network Fabrics re-fetched 2026-09-07; NCCL Environment Variables re-fetched 2026-09-07 (NCCL_IB_HCA format, NCCL_IB_TC/SL default 0, NCCL_IB_GID_INDEX default -1); Network Operator 26.4.0 Spectrum-X page re-fetched 2026-09-07; GB200 NVL72 Key Components page fetched 2026-09-09 (four ConnectX-7 and two BlueField-3 per compute tray). Dates are when each page was fetched.

  1. Networking Physical Topologies — NVIDIA HGX AI Factory (B300) Enterprise RA · fetched 2026-09-07
  2. Network Fabrics — DGX SuperPOD with DGX B300, Spectrum-4 Ethernet and DC Busbar Power RA · fetched 2026-09-07
  3. Network Fabrics — DGX SuperPOD with DGX B300, Quantum-X800 InfiniBand and AC Power RA · fetched 2026-09-07
  4. Network Fabrics — DGX GB200 NVL72 SuperPOD Reference Architecture · fetched 2026-09-07
  5. Environment Variables — NCCL user guide · fetched 2026-09-07
  6. NVIDIA Spectrum-X Ethernet Networking Platform — Network Operator 26.4.0 · fetched 2026-09-07
  7. Components — NVIDIA HGX AI Factory (B300) Enterprise RA · fetched 2026-09-07
  8. NVIDIA Spectrum SN5600 Series Switches Datasheet (Dell-branded) · fetched 2026-09-07
  9. NVIDIA-Certified Professional: AI Networking (NCP-AIN) exam blueprint · fetched 2026-09-07
  10. Key Components of the DGX SuperPOD — DGX GB200 NVL72 Reference Architecture · fetched 2026-09-09

The same idea elsewhere

Other lessons that cover this ground, sometimes from another course's angle.