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.
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.
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.
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é.
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í:
- 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.
- 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.
- 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:
- 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.
- 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.
- Spusťte
nccl-tests/all_reduce_perfna 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. - 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.
- 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.
- 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.