Part II · Chapter 05
Fat-Trees, Rails and Oversubscription
A fabric's shape is not an aesthetic choice. Given a switch with a fixed number of ports, the shape determines how many endpoints you can reach, how many hops away they are, how much optics you buy, and whether an all-reduce runs at full speed or at a quarter of it.
Why a tree, and why a fat one
Switches have a fixed number of sockets. A Q3400 has 144. If you need to connect more machines than that, you have to connect switches to each other - and now some of those 144 sockets are used up talking to other switches instead of to machines.
Arrange them in a tree and a problem appears: everything at the bottom eventually has to squeeze through the top. A fat tree fixes that by making the upper branches as thick as everything below them, so nothing narrows on the way up. That is more switches and far more cable than a thin tree - and it is the difference between a network that slows down when everyone talks at once and one that does not.
The arithmetic is simple enough to do in your head. Take a switch of radix k and point half its ports down at endpoints and half up at the tier above. A two-tier fat tree then holds k × k/2 endpoints: at k = 144 that is 144 × 72 = 10,368, which is why NVIDIA quotes over 10,000Endpoints in a two-tier fat tree NVIDIA’s figure for Quantum-X800. The arithmetic behind it: a radix-144 switch with half its ports facing downward gives 144 × 72 = 10,368 endpoints before a third tier is needed. NVIDIA for a two-level fat tree on Quantum-X800.NVIDIA
The property that matters is uniformity. Every endpoint is the same number of hops from every other, and every pair has a path that does not contend with every other pair. For a collective - whose completion time is set by its slowest participant - a uniform fabric is worth more than a fast but lumpy one.
Radix is the lever with the most leverage, because tiers multiply cost non-linearly. Each additional tier adds two hops to every cross-fabric path, adds a full set of switches, and - since inter-tier links cross rows - turns copper into optics. Doubling radix from 72 to 144 quadruples two-tier capacity, which is why switch vendors chase port count rather than per-port rate alone.
It is also why NVIDIA's fabrics are not only fat trees. The reference architecture notes support for "fat-tree, Dragonfly, and multi-dimensional Torus" topologies.NVIDIA Docs Fat trees dominate for AI because they are uniform and because collectives are the workload; the alternatives trade uniformity for cable count once a fat tree would need a third tier to fit the endpoints.
This figure is interactive and needs JavaScript. The prose around it states every number it shows.
The thing you sell to save money
Oversubscription means fitting less upward capacity than downward - pointing more of each leaf's ports at endpoints and fewer at the tier above. A 2:1 upper tier roughly halves the spine switches and the optics between tiers. Put the builder above at radix 144, two tiers, 1:1 and it reports 72 spine switches and 10,368 inter-tier cables; at 2:1 that becomes 48 and 6,912. Those saved cables are the ones crossing rows, so they are the expensive optical ones rather than the copper.
It is invisible to traffic that stays local, which is most enterprise traffic and almost none of this. An all-reduce is the pattern in which every endpoint transmits across the fabric simultaneously - precisely the case oversubscription bets against. Which is why AI fabrics are usually built non-blocking where general-purpose data-centre fabrics are not, and why the SuperPOD design is explicit about being "a fully non-blocking fat tree topology for each SU".NVIDIA Docs
Bisection bandwidth is the honest measure and aggregate bandwidth is the flattering one. Aggregate counts every link in the fabric, including the ones a given traffic pattern will never use; bisection counts only what crosses the worst-case cut, which is exactly what an all-to-all has to push through.
Note what adaptive routing can and cannot do about it. It chooses among paths that exist, so on an oversubscribed fabric it will distribute contention evenly across uplinks that are collectively too few. Even distribution of an inadequate resource is still inadequate. Oversubscription is a capacity decision, not a scheduling one, and no amount of cleverness at run time recovers it.
Rails: making the common case one hop
Here is a trick that costs nothing in hardware and removes two hops from the traffic that matters most. Each compute tray has four network connections, one per GPU. Instead of wiring them arbitrarily, wire GPU number one in every rack to the same switch, GPU number two in every rack to a second switch, and so on.
Now when the GPUs numbered one across the whole cluster want to talk to each other - which is exactly what they do during a collective - they are all already plugged into the same switch. The traffic never climbs the tree at all.
That is rail alignment. A compute tray carries 4InfiniBand rails per compute tray One per GPU - the tray carries four ConnectX-7 NICs. Same-numbered GPUs across racks share a rail, so "traffic per rail of each compute tray is always one hop away from other compute trays in the same Scalable Unit". NVIDIA Docs · NVIDIA Docs - one per GPU - and racks are rail-aligned so that, in NVIDIA's words, "traffic per rail of each compute tray is always one hop away from other compute trays in the same Scalable Unit".NVIDIA Docs
The structure follows from it. Each Scalable Unit contains four spine-leaf groups, one per rail, and each group has 8Leaf switches per spine-leaf group One for each compute rack. NVIDIA Docs - one per compute rack - and 6Spine switches per spine-leaf group Giving a fully non-blocking fat tree per Scalable Unit, attached to six core groups. NVIDIA Docs .NVIDIA Docs The rail count and the group count are the same number for the same reason.
This is the scale-out restatement of the trick that makes the in-rack fabric single-layer. Chapter 5 of Part I matches NVLink port n on every GPU to NVSwitch n, so any peer is one hop away. Rail alignment matches NIC n on every tray to leaf switch n, so any same-indexed peer is one hop away. Same reasoning, one tier out: collectives dominate, so build the topology the collective wants rather than a general-purpose one.
It also pays for itself physically. A rail hop is tray-to-leaf, which the layout can usually keep inside the copper envelope; a hop across tiers crosses rows and must go optical. Rail alignment converts the dominant traffic of a collective into the cheapest link in the building.
Topology figures
| Endpoints in a two-tier fat tree | over 10,000 | NVIDIA’s figure for Quantum-X800. The arithmetic behind it: a radix-144 switch with half its ports facing downward gives 144 × 72 = 10,368 endpoints before a third tier is needed. |
|---|---|---|
| InfiniBand rails per compute tray | 4 | One per GPU - the tray carries four ConnectX-7 NICs. Same-numbered GPUs across racks share a rail, so "traffic per rail of each compute tray is always one hop away from other compute trays in the same Scalable Unit". |
| Leaf switches per spine-leaf group | 8 | One for each compute rack. |
| Spine switches per spine-leaf group | 6 | Giving a fully non-blocking fat tree per Scalable Unit, attached to six core groups. |
| BlueField-3 per compute tray | 2 × 200 Gb/s | Separate from the compute fabric entirely: in-band management and storage. The scale-out GPU traffic never touches these. |
| Leaf switches at maximum scale | 128 | ± sources disagree: 128 (GB200 product page) vs 64 leaf and 384 spine (DGX GB200 SuperPOD reference architecture at 16 SUs). Almost certainly two different reference designs rather than a genuine contradiction - the product page and the SuperPOD architecture do not describe the same build. Do not mix the two figures inside one calculation. |
| Maximum GPUs in one fabric | 9,216 | With 128 leaf switches, rail-optimised. |
One switch count this site will not state confidently
The GB200 product page puts the maximum fabric at 9,216Maximum GPUs in one fabric With 128 leaf switches, rail-optimised. NVIDIA GPUs with 128 leaf switches. The DGX GB200 SuperPOD reference architecture, describing sixteen Scalable Units, implies a different arrangement - 64 leaf and 384 spine.NVIDIA,NVIDIA Docs
These are almost certainly two different reference designs rather than a contradiction: a product-page maximum and a specific validated architecture do not have to describe the same build. But "almost certainly" is not the standard this site holds itself to, so 128Leaf switches at maximum scaleSources disagree: 128 (GB200 product page) vs 64 leaf and 384 spine (DGX GB200 SuperPOD reference architecture at 16 SUs) Almost certainly two different reference designs rather than a genuine contradiction - the product page and the SuperPOD architecture do not describe the same build. Do not mix the two figures inside one calculation. NVIDIA · NVIDIA Docs is marked disputed and shows both. The practical instruction is the useful part: do not mix the two figures inside one calculation.