Topologie přepínaných clusterů: Fat-Tree, Leaf-Spine, Dragonfly+, Tesseract

Každé schéma clusteru v prezentaci dodavatele začíná stejně: řada obdélníků s popiskem „node“, řada obdélníků s popiskem „switch“ a šipky mezi nimi. Schémata jsou záměrně jednoduchá, protože skutečná volba, která se pod nimi skrývá — která topologie, s jakou mírou oversubscription, s jakou rychlostí na port — je po samotných GPU tím největším nákladovým rozhodnutím v AI clusteru.

Tento článek je topologickou vrstvou mezi N02 (který protokol — InfiniBand, RoCE, běžný Ethernet) a N06–N08 (jak se kabeláž skutečně chová, jakmile je topologie zapojená). Pokrývá čtyři rodiny, na kterých v roce 2026 záleží: fat-tree / Clos / leaf-spine, dragonfly / dragonfly+, tesseract / hyperkrychle a rodinu torus, která přežila ve dvou konkrétních koutech HPC. Končí upřímným závěrem: zhruba devět z deseti zákazníků Kentina nic z toho nepotřebuje a článek existuje pro toho desátého.

Pro koho: pro ty, kdo dimenzují trénovací cluster o 8 až 64 uzlech a síť kolem něj. Není to konfigurační kuchařka Cisco/NVIDIA — je to myšlenkový model, díky kterému taková kuchařka dává smysl.

Tři různé věci, kterým se říká „šířka pásma“

Než začneme kreslit obdélníky a šipky, slovník. Tři pojmy se v prodejních materiálech ke clusterům používají zaměnitelně, a přitom to nejsou stejná čísla:

Pojem Co doopravdy měří Kde vás to doběhne
Agregovaná šířka pásma Součet kapacit všech linek ve fabric. Číslo z katalogového listu dodavatele. Samo o sobě k ničemu. I fabric s agregovanou kapacitou 1 TB/s může být úzkým hrdlem pro jediný tok.
Průřezová šířka pásma Propustnost přes libovolný řez fabric. Skutečná propustnost workloadu, když provoz není rovnoměrný — to, co naměříte při allreduce.
Bisekční šířka pásma Průřezová šířka pásma přes nejhorší řez, který rozdělí uzly na dvě stejné poloviny. Číslo, které rozhoduje, jestli allreduce ve velkém měřítku dosáhne linkové rychlosti.

32portový switch 400 GbE má 12.8 Tb/s agregované šířky pásma. Připojte na něj 16 uzlů po 400 GbE a dostanete 3.2 Tb/s bisekční šířky pásma (8 uzlů × 400 Gb/s na každé straně řezu). Při kroku allreduce, kdy každá z 16 GPU posílá polovinu svého gradientu přes bisekci, se čas kroku dělí právě těmi 3.2 Tb/s — ne 12.8.

Zkratka: bisekční šířka pásma je z těchto tří čísel jediná, která předpovídá dobu trénovacího kroku u workloadu limitovaného allreduce. Když brožura dodavatele uvádí agregovanou hodnotu, představte si v duchu nejhorší řez a vydělte si ji zpět na bisekční.

Pro 16uzlový cluster s 8 GPU na uzel (celkem 128 GPU) a jednou síťovou kartou 100 GbE na uzel:

Topologie Agregovaná BW Průřezová BW (prům.) Bisekční BW
Jeden 32portový switch 100 GbE 1.6 Tb/s 800 Gb/s 800 Gb/s
Fat-tree, 1:1 (plná bisekce) 3.2 Tb/s 1.6 Tb/s 1.6 Tb/s
Fat-tree, oversubscription 2:1 2.4 Tb/s 800 Gb/s 800 Gb/s
Dragonfly+ (4 skupiny po 4) 2.0 Tb/s ~1.0 Tb/s ~800 Gb/s (nejhorší dvojice)
4D tesseract (bez switche) 1.6 Tb/s ~800 Gb/s 800 Gb/s
3D torus 4×2×2 1.5 Tb/s ~600 Gb/s 600 Gb/s

Stejný počet uzlů, stejná rychlost linky, různá čísla podle toho, co máte na mysli. S tímto rámcem pracuje zbytek článku.

Fat-tree, Clos, leaf-spine — totéž ve třech nářečích

Charles Clos v roce 1953 dokázal, že vícestupňová síť malých crossbar switchů může být neblokující — libovolný vstup se dostane na libovolný výstup bez kolizí — za zlomek ceny jednoho obřího crossbaru. Každá moderní síť v datacentru je nějakou variantou této myšlenky. Názvosloví se mezitím zamotalo:

  • Clos síť je matematická struktura: vstupní, střední a výstupní stupeň menších switchů.
  • Fat-tree (Charles Leiserson, 1985) je varianta Clos, kde jsou svazky blíž ke kořeni postupně tlustší, takže bisekční šířka pásma škáluje s N.
  • Složený Clos (folded Clos) přehýbá výstupní stupeň zpět na vstupní. Leaf-spine je dvoustupňový složený Clos. Třístupňový složený Clos s vrstvami leaf, spine a super-spine je to, čemu se v praxi nejčastěji říká fat-tree.
Spine 1 Spine 2 Spine 3 Spine 4 Leaf 1 Leaf 2 Leaf 3 Leaf 4

Dvoustupňový leaf-spine: každý leaf je propojen s každým spine. Libovolné dva uzly spolu komunikují přesně přes dva skoky. Plná bisekce = žádná oversubscription na vrstvě spine.

Každý leaf je propojen s každým spine. Provoz any-to-any projde nejvýše trasou leaf → spine → leaf, tedy dvěma skoky. Při dostatečné kapacitě vrstvy spine je fabric neblokující: každý uzel může současně komunikovat s každým jiným uzlem linkovou rychlostí.

Poměr oversubscription je páka, která rozhoduje o ceně. Pokud má každý leaf 32 downlinků po 100 GbE (3.2 Tb/s dovnitř racku) a 8 uplinků po 100 GbE (800 Gb/s z racku ven), je oversubscription 4:1 — čtyřikrát víc pásma dovnitř racku než ven. Plná bisekce znamená 1:1: stejně uplinku jako downlinku. 2:1 je běžné v univerzálních datacentrech. 1:1 (plná bisekce) je výchozí standard pro AI cluster.

Konfigurace Uplinky leaf Počet spine Přibližná cena switchů + optiky (2026) Bisekční BW
Jeden 64portový switch 400 GbE (jeden rack) n/a 1 ~$50k 12.8 Tb/s (jeden rack)
Dvoustupňový leaf-spine, oversubscription 4:1 8× 100 GbE 2× 32portový ~$120k 800 Gb/s
Dvoustupňový leaf-spine, oversubscription 2:1 16× 100 GbE 4× 32portový ~$180k 1.6 Tb/s
Dvoustupňový leaf-spine, plná bisekce (1:1) 32× 100 GbE 8× 32portový ~$280k 3.2 Tb/s
Dvoustupňový, uplinky 400 GbE, plná bisekce 8× 400 GbE 4× 32portový ~$220k 3.2 Tb/s, méně kabelů

Při přechodu ze 4:1 na 1:1 se cena zhruba zdvojnásobí, protože kupujete dvakrát více portů na spine a dvakrát více optiky. Důvod, proč každý seriózní AI cluster tuto přirážku zaplatí: oversubscription ničí propustnost allreduce. Synchronizovaný allreduce s osmi toky na fabric s oversubscription 4:1 neběží na čtvrtinové rychlosti — zhroutí se pod PFC backpressure (N07) a v praxi může ztratit 60–80 % teoretické propustnosti. Matematika říká „vydělte čtyřmi“. Realita říká „vydělte pěti až deseti“.

Referenční architektura NVIDIA DGX SuperPOD předepisuje třístupňový fat-tree s plnou bisekcí na Quantum-2 NDR InfiniBandu s 400 Gb/s na port. Publikované trénovací RoCE clustery Meta i Azure ND-series od Microsoftu stavějí stejný tvar na Spectrum-X Ethernetu. Obor se u trénování AI sjednotil na fat-tree s plnou bisekcí a vývoj v letech 2024–2026 dělá fat-tree širší (400 GbE → 800 GbE na port) nebo rail-optimized (viz další sekce), nemění ale základní topologii.

Rail-optimized fat-tree — dialekt specifický pro AI

Standardní fat-tree zachází se všemi síťovými kartami stejně. Trénování AI ale záleží na tom, která karta které GPU posílá který gradient, protože provozní vzory allreduce nejsou rovnoměrné. Varianta rail-optimized přiřadí každou GPU v uzlu ke konkrétnímu „railu“ — vyhrazené cestě leaf-spine — a zajistí, že i-tá GPU na každém uzlu komunikuje přes i-tý rail jen s i-tou GPU na všech ostatních uzlech.

Uzel 1 GPU0 GPU1 GPU2 GPU3 Rail 0 Rail 1 Rail 2 Rail 3 Spine 0 Spine 1 Spine 2 Spine 3 8 nezávislých fat-tree sítí, jedna na každý GPU slot (Rail). Allreduce na GPU N využívá jen Rail N — žádné kolize ECMP mezi raily.

Rail-optimized fat-tree: každý GPU slot má vlastní nezávislou rovinu spine. Allreduce kruh na GPU 3 využívá jen Rail 3.

Osm nezávislých dvoustupňových fat-tree sítí, jedna na každý GPU slot. Allreduce kruh na GPU 3 napříč 16 uzly využívá jen Rail 3 a nikdy nepřechází do jiných railů. Přínosy: nulové ECMP kolize mezi raily, jednodušší směrování, nižší radix switche na rovinu. Kompromis: úloha, která se rozkládá přes několik GPU slotů (tensor-parallel uvnitř uzlu, data-parallel mezi uzly), je stejně NCCL rozdělena napříč raily, takže topologie pomůže jen tehdy, když jí workload odpovídá. Pro data-parallel a rail-aware NCCL je to jasná výhra; u tensor-parallel přes více railů se úspora vytrácí.

Dragonfly a Dragonfly+ — když si fat-tree nemůžete dovolit

Cena fat-tree roste zhruba jako N log N — každé zdvojnásobení počtu uzlů vyžaduje víc kapacity na spine a třetí stupeň zdvojnásobí počet switchů na koncový bod. Pro 1024 uzlů je neblokující třístupňový fat-tree postavitelný. Pro 10,000 uzlů začne být počet switchů a cena optiky trestající. Dragonfly, který v roce 2008 navrhli John Kim, William Dally a další, vznikl právě proto, aby tuto zeď překonal.

Myšlenka: seskupte uzly do skupin. Uvnitř skupiny jsou všechny switche hustě propojené (často menším Closem). Mezi skupinami má každá skupina jednu přímou linku do každé jiné skupiny. Výsledkem je síť s průměrem 3 (skok uvnitř skupiny, skok mezi skupinami, skok uvnitř skupiny), která škáluje k obrovským počtům uzlů s podstatně menším počtem dálkových kabelů než fat-tree.

Skupina A s s s s s s uvnitř skupiny Skupina B s s s s s s uvnitř skupiny Skupina C s s s s s s uvnitř skupiny Skupina D s s s s s s uvnitř skupiny Globální linky (každá dvojice skupin přímo propojena)

Dragonfly: hustý Clos uvnitř skupiny, jedna globální linka na dvojici skupin. Průměr 3. Škáluje na 1000+ uzlů s menším počtem dálkových kabelů než fat-tree.

Velká úspora je v optické kabeláži. Dálková optika mezi racky je nejdražší částí fat-tree. Dragonfly ji nahrazuje jednou tlustou linkou na dvojici skupin, ne jednou na každou kombinaci leaf-spine. Pro cluster s G skupinami po S uzlech potřebuje fat-tree zhruba G × S × log(G × S) kabelů; dragonfly potřebuje G(G − 1)/2 meziskupinových kabelů plus fabric uvnitř každé skupiny. Při G = 32 skupinách po 32 uzlech (celkem 1024) klesne počet dálkových kabelů zhruba o řád.

Dragonfly+ (Mellanox, 2017) tuto myšlenku zpřesňuje pro InfiniBand. Fabric uvnitř skupiny se mění na malý bipartitní Clos, takže rozšíření skupiny nevyžaduje přepojování, a linky mezi skupinami používají adaptivní směrování, aby se vyhnuly zahlceným skupinám. Tuto topologii mají Frontier (ORNL, exascale AMD MI250X) i El Capitan (LLNL, MI300A) — obojí zapojené na switchích HPE Slingshot-11 v uspořádání dragonfly, maximální průměr tři skoky, 12.8 Tb/s na switch.

Háček je ve způsobu selhání u malých úloh, které zasahují do více skupin. Ve fat-tree vidí dva uzly na opačných koncích clusteru stejnou bisekční šířku pásma jako dva uzly vzdálené o jeden rack (až na počet skoků). V dragonfly sdílejí dva uzly v různých skupinách svou meziskupinovou linku se všemi ostatními toky mezi skupinami. Pokud vaše trénovací úloha na 16 GPU přistane na 8 uzlech ve skupině A a 8 ve skupině B, sdílíte jednu meziskupinovou linku se všemi, kdo zrovna zasahují do téže dvojice. Adaptivní směrování pomůže, ale soupeření o kapacitu neodstraní.

Praktický důsledek: dragonfly funguje skvěle v měřítku hyperscalerů (1000+ uzlů, úlohy dimenzované tak, aby zaplnily skupiny) a hůř u středních clusterů s pestrou směsí malých úloh. Pro 16uzlový trénovací cluster je to špatná topologie — fat-tree je v tomto měřítku levnější i rychlejší. Správná je pro superpočítač s 1024 uzly a smíšenou zátěží.

Tesseract — čtyřrozměrná hyperkrychle

Tesseract je čtyřrozměrná hyperkrychle: 16 vrcholů, každý propojený přesně se 4 sousedy, průměr 4 (nejdelší z nejkratších cest mezi libovolnými dvěma uzly). Zobecněte to na k rozměrů a dostanete k-krychli: 2k uzlů, každý s k přímými linkami, průměr k. Směrování podle Hammingovy vzdálenosti — XOR zdrojové a cílové adresy, překlopí se vždy jeden bit — je triviálně deterministické a při náhodném provozu rovnoměrně zatížené.

1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111

Tesseract (čtyřrozměrná hyperkrychle): 16 uzlů, každý se 4 sousedy. Plné čáry = hrany 3D krychle; čárkované = linky čtvrtého rozměru. Průměr 4. Popisek každého uzlu je 4bitová adresa; sousedé se liší přesně v jednom bitu.

Hyperkrychlové topologie dominovaly masivně paralelním výpočtům v 80. letech. Connection Machine CM-2 (Thinking Machines, 1987) měl 65,536 uzlů zapojených jako dvanáctirozměrná hyperkrychle. Intel iPSC/2 používal 7rozměrné hyperkrychle. CM-5 (Thinking Machines, 1991) hyperkrychle opustil ve prospěch fat-tree, protože tento přístup nad zhruba 1024 uzly přestával elegantně škálovat — každý nový rozměr zdvojnásobí počet uzlů a vyžaduje přepojení všech stávajících.

V roce 2026 se pojem „tesseract“ stále objevuje na třech místech, která stojí za rozlišení:

  1. Jako název výzkumného / DiRAC HPC systému. DiRAC Tesseract na EPCC (Edinburgh) je cluster HPE SGI 8600 o 1476 uzlech na Intel Omni-Path. „Tesseract“ je značka; fabric má blíž k fat-tree.
  2. Jako výzkumný pojem z oblasti „SDN control plane“ (Tesseract: a 4D control plane, Yan et al.). S fyzickou topologií nemá nic společného.
  3. Jako vlastní topologie kompaktních akcelerátorových clusterů bez switche. Šestnáctiuzlový cluster zapojený doslova jako čtyřrozměrná hyperkrychle má zajímavé vlastnosti: každý uzel má přesně 4 síťové karty, žádný centrální switch, deterministické směrování, průměr 4. Pořádně to probíráme v N05 (topologie bez switche).

Co tesseract v roce 2026 nabízí: žádnou daň za switche, deterministické směrování přes XOR Hammingovy vzdálenosti a malý průměr (log₂(N)). Co ho komplikuje: pevné N (musí být mocnina 2), složitost kabeláže roste s rozměrem, počet síťových karet na uzel se rovná k a moderní AI kolektivy (NCCL ring/tree) strukturu hyperkrychle nativně nevyužívají.

Torus — přeživší ve dvou konkrétních koutech

k-ární n-krychle hyperkrychli zobecňuje: místo binární adresy s jednou linkou na rozměr použijete mřížku k×k×k s přetočením na okrajích. V 3D torusu je každý uzel propojen se 6 sousedy (±x, ±y, ±z). 6D torus má 12 sousedů.

IBM Blue Gene/L a /P běžely na 3D torusu a škálovaly na statisíce uzlů, přičemž každý uzel měl jen 6 vysokorychlostních linek. Fujitsu Tofu (propojení počítače K, 2011) to zobecnilo na 6D mesh/torus — 158,976 uzlů na Fugaku (v provozu i v roce 2026), uspořádaných 24×23×24×2×3×2.

Cerebras Wafer-Scale Engine používá 2D torus přímo na waferu: každý výpočetní element má 4 sousedy, s přetočením na okrajích a ~1 ns na skok. Funguje to proto, že spoje na waferu jsou prakticky zdarma; kabely mimo wafer by zdarma nebyly.

Proč torus všude jinde prohrál: nesymetrické cesty a špatné chování u nerovnoměrných AI workloadů. Moderní AI workloady (NCCL ring/tree, hierarchické algoritmy NVIDIA) předpokládají any-to-any s rovnoměrnou šířkou pásma. Torus to porušuje. V roce 2026 torus přežívá na třech místech: v propojení Cerebras na waferu, ve Fujitsu Fugaku a jeho nástupcích a uvnitř SXM uzlů přes NVSwitch. Mimo tyto niky je každý nový AI cluster v letech 2025–2026 postavený na Closu.

Srovnávací tabulka

Topologie Průměr Bisekční BW (16 uzlů, 100 GbE) Potřebné switche Kabely (přibližně) Poměr ceny vs. fat-tree 1:1 Model růstu
Jeden switch 1 800 Gb/s (limitováno switchem) 1× 32portový 16 0.3× Tvrdý strop daný radixem switche
Fat-tree 1:1 (plná bisekce) 2 1.6 Tb/s 2 spine + 2 leaf 64 1.0× Přidat leafy / spiny
Fat-tree 2:1 2 800 Gb/s 2 spine + 2 leaf 48 0.7× Přidat leafy
Dragonfly+ 3 800 Gb/s (limitováno dvojicí skupin) 4 (2 na skupinu) 32–40 0.6× při 16 uzlech; nad 64 uzlů se obrací Přidat skupiny
4D tesseract (bez switche) 4 ~800 Gb/s (efektivně) 0 32 0.4× Zdvojnásobení přidáním rozměru
3D torus (4×2×2, bez switche) 4 ~600 Gb/s 0 48 0.5× Libovolný obdélníkový rozměr

Uplink clusteru — jak se topologie potkává s vnějším světem

Switchovaný fabric je ostrov. Musí se připojit k firemní síti (registry modelů, úložiště datasetů, S3, telemetrie), k vývojářským workstationům (SSH, Jupyter, kopírování checkpointů) a k dalším clusterům (předání z trénování do inference). Tomuto spojení se říká uplink clusteru.

Dva modely s velmi odlišnými důsledky:

Jeden uplinkový bod. Veškerou externí konektivitu ukončuje dvojice spine switchů (nebo vyhrazený uplinkový router). Snadno se firewalluje, snadno se omezuje rychlost, snadno se monitoruje. Způsob selhání: tato linka je jediným bodem selhání; jakmile ji zahltíte (velké kopírování checkpointu ven, stažení shardu datasetu o velikosti 10 GB), dopadne to naráz na všechny uzly.

Distribuovaný uplink. Každý leaf má vlastní uplink do kampusové sítě, často pomalejší 25 GbE nad rámec fabric o rychlosti 100 GbE. Stahování datasetů a externí provoz zůstávají lokální u daného leafu — žádné zahlcení interního fabric. Způsob selhání: každý leaf je bezpečnostní hranicí, firewallování je N× více práce a monitoring je těžší.

Pro základní scénář Kentina (trénovací cluster o 4–16 uzlech) je správnou odpovědí jeden uplinkový bod. Interní fabric je čistě RDMA (RoCE nebo InfiniBand), vyladěný na nízkou latenci a bezztrátové chování. Uplink je běžný Ethernet, TCP, normální QoS. Nedávejte objektové úložiště datasetů na stejný bezztrátový fabric jako allreduce mezi GPU — nevychovaný S3 klient by neměl být schopen spustit PFC backpressure na trénovacím provozu. Dva fabricy: datová rovina (bezztrátové RDMA) a správní/uplinková rovina (ztrátové TCP). Praktické nastavení pokrývá N08.

Upřímný pohled Kentina

Většina zákazníků Kentina kupuje 1 až 4 uzly. V tomto měřítku:

  • 1 uzel. Žádná otázka topologie. PCIe uvnitř skříně (K07), jedna 25 GbE management karta ven, hotovo.
  • 2 uzly. Přímý kabel mezi dvěma RDMA kartami. Žádný switch. Není co volit.
  • 3–4 uzly. Jediný 32portový switch 100 GbE zvládne každý s každým při plné bisekci za $30k–50k se vším všudy. Pořád není co volit.

Debata o topologii začíná u 8 uzlů, kdy začne být počet portů jednoho switche těsný, a povinnou se stává u 16 uzlů. Pod touto hranicí zní správná odpověď „jeden dobrý switch, plná bisekce na každém portu a jděte dělat něco užitečnějšího“. Nad ní zní „dvoustupňový leaf-spine, 100 nebo 200 GbE na uzel, plná bisekce (1:1) a na páku oversubscription nesahejte, dokud vás k tomu někdo nedonutí“.

Dragonfly+ je správná odpověď v měřítku hyperscalerů. Tesseract / hyperkrychle je zajímavá jako volba bez switche pro kompaktní clustery (N05). Torus je vendor-lock volba pro HPC provozovatele s workloady, které topologii zohledňují. Pro všechny ostatní v cenové hladině Kentina je výchozí volbou fat-tree. Plná bisekce, pokud si ji můžete dovolit; 2:1, pokud ne; nikdy 4:1 pro trénování AI.

Co dělat dál

Pokud dimenzujete switchovaný fabric pro reálný cluster:

  1. Zapište si počet uzlů, GPU na uzel a linkovou rychlost na kartu. Vynásobte. Vydělte dvěma. To je vaše cílové bisekční číslo.
  2. Rozhodněte, zda vaše úlohy zabírají celý cluster, nebo se vejdou do jednoho racku. Úlohy lokální v racku oversubscription snesou. Úlohy přes celý cluster ne.
  3. Spusťte nccl-tests/all_reduce_perf na dočasné fat-tree konfiguraci dřív, než se zavážete ke kabeláži. Pokud už osmiuzlový allreduce ztrácí 20 % teoretické busbw, máte jiný problém než topologii.
  4. Neoptimalizujte na příštích 5 let. Kupujte cluster, který potřebujete letos, s jasnou cestou k rozšíření. Fat-tree leaf-spine se rozšiřuje po krocích nejlevněji.
  5. Uplink přizpůsobte rychlosti nahrávání datasetů, ne rychlosti interního fabric. Většina clusterů potřebuje ven 25–100 GbE, ne 400.
  6. Vždy dva fabricy. Datová rovina a správní rovina odděleně, i při 4 uzlech.

Navazující díly této řady jdou hlouběji: N05 pokrývá topologie bez switche (varianty tesseract a torus, když opravdu nechcete žádný switch); N06 rozebírá, odkud se po zprovoznění fabric bere každá mikrosekunda latence; N07 se věnuje směrování a řízení zahlcení, které rozhodují, jestli vaše krásná topologie skutečně podává výkon; N08 je praktické nastavení RDMA a návrh uplinku clusteru.


Tento text je součástí Kentino Wiki, referenční série o AI výpočtech, robotice a systémech, které je propojují. Připomínky a opravy uvítáme na info@kentino.com.