Topologias de Cluster Comutadas: Fat-Tree, Leaf-Spine, Dragonfly+, Tesseract
Todos os diagramas de cluster numa apresentação de fornecedor começam da mesma maneira: uma fila de caixas rotuladas "nó", uma fila de caixas rotuladas "switch" e setas entre elas. Os diagramas são deliberadamente simples porque a verdadeira escolha que está por baixo — que topologia, com quanta sobresubscrição, com que velocidade por porta — é a maior decisão de custo num cluster de IA depois dos próprios GPUs.
Este artigo é a camada de topologia entre N02 (que protocolo — InfiniBand, RoCE, Ethernet simples) e N06–N08 (como o cabo se comporta de facto depois de a topologia estar montada). Abrange as quatro famílias que contam em 2026: fat-tree / Clos / leaf-spine, dragonfly / dragonfly+, tesseract / hipercubo e a família torus, que sobreviveu em dois nichos muito concretos da HPC. Termina com a avaliação honesta: cerca de nove em cada dez clientes da Kentino não precisam de nada disto, e o artigo existe para o décimo.
Público: quem está a dimensionar um cluster de treino de 8 a 64 nós e a rede à sua volta. Não é um manual de configuração Cisco/NVIDIA — é o modelo mental que torna esse manual legível.
Três coisas diferentes a que se chama "largura de banda"
Antes de desenharmos caixas e setas, o vocabulário. Há três termos que a literatura comercial sobre clusters usa indistintamente e que não são o mesmo número:
| Termo | O que mede realmente | Onde o penaliza |
|---|---|---|
| Largura de banda agregada | Soma da capacidade de todas as ligações do fabric. O número que consta da ficha técnica do fornecedor. | Inútil por si só. Um fabric com 1 TB/s agregados pode continuar a ser um estrangulamento para um único fluxo. |
| Largura de banda de secção transversal | Débito através de um corte arbitrário no fabric. | Débito real da carga de trabalho quando o tráfego não é uniforme — aquilo que se mede durante um allreduce. |
| Largura de banda de bissecção | Largura de banda de secção transversal no pior corte que divide os nós em duas metades iguais. | O número que determina se o allreduce atinge o débito nominal à escala. |
Um switch 400 GbE de 32 portas tem 12.8 Tb/s de largura de banda agregada. Ligue-lhe 16 nós a 400 GbE cada e fica com 3.2 Tb/s de largura de banda de bissecção (8 nós × 400 Gb/s de cada lado do corte). Num passo de allreduce em que cada um dos 16 GPUs envia metade do seu gradiente através da bissecção, é por esses 3.2 Tb/s que o tempo do passo é dividido — não por 12.8.
O atalho: a largura de banda de bissecção é o único destes três números que prevê o tempo de passo de treino numa carga de trabalho limitada pelo allreduce. Quando uma brochura de fornecedor indica o valor agregado, pense no pior corte possível e divida em conformidade para regressar à bissecção.
Para um cluster de 16 nós com 8 GPUs cada (128 GPUs no total) em nós 100 GbE com uma única NIC:
| Topologia | BW agregada | BW de secção transversal (média) | BW de bissecção |
|---|---|---|---|
| Um único switch 100 GbE de 32 portas | 1.6 Tb/s | 800 Gb/s | 800 Gb/s |
| Fat-tree, 1:1 (bissecção total) | 3.2 Tb/s | 1.6 Tb/s | 1.6 Tb/s |
| Fat-tree, sobresubscrito 2:1 | 2.4 Tb/s | 800 Gb/s | 800 Gb/s |
| Dragonfly+ (4 grupos de 4) | 2.0 Tb/s | ~1.0 Tb/s | ~800 Gb/s (pior par) |
| Tesseract 4D (sem switches) | 1.6 Tb/s | ~800 Gb/s | 800 Gb/s |
| Torus 3D 4×2×2 | 1.5 Tb/s | ~600 Gb/s | 600 Gb/s |
O mesmo número de nós, a mesma velocidade de ligação, números diferentes consoante aquilo de que se está a falar. É este o enquadramento usado no resto do artigo.
Fat-tree, Clos, leaf-spine — a mesma coisa em três sotaques
Charles Clos provou em 1953 que uma rede multiestágio de pequenos switches crossbar pode ser não bloqueante — qualquer entrada chega a qualquer saída sem contenção — por uma fração do custo de um único crossbar gigante. Todas as redes modernas de centro de dados são uma variante desta ideia. A nomenclatura tornou-se confusa:
- Uma rede Clos é a estrutura matemática: estágios de entrada, intermédio e de saída compostos por switches mais pequenos.
- Uma fat-tree (Charles Leiserson, 1985) é uma variante Clos em que os troncos mais próximos da raiz vão ficando progressivamente mais largos, para que a largura de banda de bissecção escale com N.
- Uma Clos dobrada devolve o estágio de saída sobre o estágio de entrada. Uma leaf-spine é uma Clos dobrada de dois níveis. Uma Clos dobrada de três níveis, com leaf, spine e super-spine, é aquilo a que a maioria das pessoas chama fat-tree na prática.
Leaf-spine de dois níveis: cada leaf liga-se a todos os spines. Dois nós quaisquer comunicam em exatamente dois saltos. Bissecção total = sem sobresubscrição na camada spine.
Cada leaf liga-se a todos os spines. O tráfego any-to-any percorre no máximo leaf → spine → leaf, dois saltos. Com largura de banda suficiente no spine, o fabric é não bloqueante: todos os nós podem falar em simultâneo com todos os outros ao débito nominal.
O rácio de sobresubscrição é o botão que decide o custo. Se cada leaf tiver 32 downlinks de 100 GbE (3.2 Tb/s a entrar no rack) e 8 uplinks de 100 GbE (800 Gb/s a sair do rack), a sobresubscrição é de 4:1 — quatro vezes mais largura de banda a entrar no rack do que a sair dele. Bissecção total significa 1:1: tanto uplink como downlink. 2:1 é comum em centros de dados de uso geral. 1:1 (bissecção total) é a referência para clusters de IA.
| Configuração | Uplinks do leaf | Número de spines | Custo aprox. de switches+ótica (2026) | BW de bissecção |
|---|---|---|---|---|
| Um único switch 400 GbE de 64 portas (um rack) | n/d | 1 | ~$50k | 12.8 Tb/s (um rack) |
| Leaf-spine de 2 níveis, sobresubscrito 4:1 | 8× 100 GbE | 2× de 32 portas | ~$120k | 800 Gb/s |
| Leaf-spine de 2 níveis, sobresubscrito 2:1 | 16× 100 GbE | 4× de 32 portas | ~$180k | 1.6 Tb/s |
| Leaf-spine de 2 níveis, bissecção total (1:1) | 32× 100 GbE | 8× de 32 portas | ~$280k | 3.2 Tb/s |
| 2 níveis, uplinks 400 GbE, bissecção total | 8× 400 GbE | 4× de 32 portas | ~$220k | 3.2 Tb/s, menos cabos |
O custo praticamente duplica ao passar de 4:1 para 1:1, porque está a comprar o dobro das portas de spine e o dobro da ótica. A razão pela qual todos os clusters de IA sérios pagam este prémio: a sobresubscrição destrói o débito do allreduce. Um allreduce sincronizado de 8 fluxos num fabric sobresubscrito 4:1 não corre a um quarto da velocidade — colapsa sob a contrapressão do PFC (N07) e, na prática, pode perder 60–80% do débito teórico. A matemática diz "dividir por 4". A realidade diz "dividir por 5–10".
A arquitetura de referência DGX SuperPOD da NVIDIA especifica uma fat-tree de três níveis com bissecção total sobre InfiniBand Quantum-2 NDR a 400 Gb/s por porta. Os clusters de treino RoCE publicados pela Meta e a série ND do Azure da Microsoft constroem a mesma forma sobre Ethernet Spectrum-X. A indústria convergiu na fat-tree de bissecção total para o treino de IA, e a evolução de 2024–2026 passa por tornar a fat-tree mais larga (400 GbE → 800 GbE por porta) ou otimizada por rail (secção seguinte), não por mudar a topologia de base.
Fat-tree otimizada por rail — o dialeto específico da IA
A fat-tree normal trata todas as NIC da mesma maneira. O treino de IA importa-se com qual a NIC do GPU que envia que gradiente, porque os padrões de tráfego do allreduce não são uniformes. A variante rail-optimized atribui cada GPU de um nó a um "rail" específico — um caminho leaf-spine dedicado — e garante que o i-ésimo GPU de cada nó só fala com o i-ésimo GPU de todos os outros nós através do i-ésimo rail.
Fat-tree otimizada por rail: cada slot de GPU corresponde a um plano de spine independente e dedicado. O anel de allreduce no GPU 3 usa apenas o Rail 3.
Oito fat-trees de dois níveis independentes, uma por slot de GPU. O anel de allreduce no GPU 3 ao longo de 16 nós usa apenas o Rail 3 e nunca passa para outros rails. Vantagens: zero colisões ECMP entre rails, encaminhamento mais simples, menor radix de switch por plano. Contrapartida: um trabalho que abranja vários slots de GPU (tensor-parallel dentro do nó, data-parallel entre nós) acaba na mesma por ser dividido entre rails pelo NCCL, pelo que a topologia só ajuda se a carga de trabalho estiver alinhada. Para data-parallel e para NCCL com consciência dos rails é uma vantagem clara; para tensor-parallel que atravessa rails a poupança evapora-se.
Dragonfly e Dragonfly+ — quando não pode pagar uma fat-tree
O custo da fat-tree cresce aproximadamente com N log N — cada duplicação do número de nós exige mais largura de banda de spine, e o terceiro nível duplica o número de switches por ponto final. Para 1024 nós, uma fat-tree não bloqueante de três níveis é construível. Para 10,000 nós, o número de switches e o custo da ótica tornam-se penosos. A dragonfly, proposta por John Kim, William Dally e outros em 2008, foi concebida precisamente para escalar para lá dessa barreira.
A ideia: agrupar os nós em grupos. Dentro de um grupo, todos os switches estão densamente ligados (muitas vezes numa Clos mais pequena). Entre grupos, cada grupo tem uma ligação direta a todos os outros. O resultado é uma rede com diâmetro 3 (salto local no grupo, salto entre grupos, salto local no grupo) que escala para números enormes de nós com muito menos cabos de longa distância do que uma fat-tree.
Dragonfly: Clos densa dentro do grupo, uma ligação global por par de grupos. Diâmetro 3. Escala para mais de 1000 nós com menos cabos de longa distância do que uma fat-tree.
A grande poupança está na cablagem ótica. A ótica de longa distância entre racks é a parte mais cara de uma fat-tree. A dragonfly substitui-a por uma ligação larga por cada par de grupos, em vez de uma por cada combinação leaf-spine. Para um cluster com G grupos de S nós cada, a fat-tree precisa de cerca de G × S × log(G × S) cabos; a dragonfly precisa de G(G − 1)/2 cabos entre grupos, mais o fabric de cada grupo. Com G = 32 grupos de 32 nós (1024 no total), o número de cabos de longa distância cai cerca de uma ordem de grandeza.
O Dragonfly+ (Mellanox, 2017) refina isto para InfiniBand. O fabric dentro do grupo passa a ser uma pequena Clos bipartida, para que a expansão do grupo não obrigue a refazer a cablagem, e as ligações entre grupos usam encaminhamento adaptativo para contornar os grupos congestionados. É esta a topologia do Frontier (ORNL, AMD MI250X à escala exascale) e do El Capitan (LLNL, MI300A) — ambos cablados com switches HPE Slingshot-11 numa disposição dragonfly, diâmetro máximo de três saltos, 12.8 Tb/s por switch.
O senão é o modo de falha dos trabalhos pequenos que abrangem vários grupos. Numa fat-tree, dois nós em extremos opostos do cluster veem a mesma largura de banda de bissecção que dois nós separados por um rack (salvo o número de saltos). Numa dragonfly, dois nós em grupos diferentes partilham a sua ligação entre grupos com todos os outros fluxos que cruzam grupos. Se o seu trabalho de treino com 16 GPUs for colocado em 8 nós do grupo A e 8 nós do grupo B, está a partilhar uma única ligação entre grupos com todos os outros que calhem abranger o mesmo par. O encaminhamento adaptativo ajuda; não elimina a contenção.
Implicação prática: a dragonfly funciona lindamente às dimensões de problema dos hyperscalers (mais de 1000 nós, trabalhos dimensionados para preencher grupos) e nem por isso em clusters médios com muitos trabalhos pequenos e variados. É a topologia errada para um cluster de treino de 16 nós — a essa escala, a fat-tree é mais barata e mais rápida. É a topologia certa para um supercomputador de 1024 nós com cargas de trabalho mistas.
Tesseract — o hipercubo 4D
Um tesseract é um hipercubo 4D: 16 vértices, cada um ligado a exatamente 4 vizinhos, diâmetro 4 (o mais longo dos caminhos mais curtos entre dois nós quaisquer). Generalize para k dimensões e obtém um k-cubo: 2k nós, cada um com k ligações diretas, diâmetro k. O encaminhamento por distância de Hamming — XOR entre os endereços de origem e de destino, invertendo um bit de cada vez — é trivialmente determinístico e equilibrado sob tráfego aleatório.
Tesseract (hipercubo 4D): 16 nós, cada um com 4 vizinhos. Linhas sólidas = arestas do cubo 3D; linhas tracejadas = ligações da 4.ª dimensão. Diâmetro 4. Cada etiqueta de nó é um endereço de 4 bits; os vizinhos diferem em exatamente um bit.
As topologias em hipercubo dominaram a computação massivamente paralela dos anos 80. A Connection Machine CM-2 (Thinking Machines, 1987) tinha 65,536 nós cablados como um hipercubo de 12 dimensões. O Intel iPSC/2 corria hipercubos 7D. A CM-5 (Thinking Machines, 1991) abandonou os hipercubos a favor da fat-tree, porque a abordagem em hipercubo não escalava bem acima de cerca de 1024 nós — cada nova dimensão duplica o número de nós e obriga a recablar todos os nós existentes.
Em 2026, o termo "tesseract" continua a aparecer em três contextos que vale a pena distinguir:
- Como nome de um sistema de investigação / HPC do DiRAC. O DiRAC Tesseract, no EPCC (Edimburgo), é um cluster HPE SGI 8600 de 1476 nós sobre Intel Omni-Path. "Tesseract" é apenas a marca; o fabric está mais próximo de uma fat-tree.
- Como termo de investigação sobre planos de controlo "SDN" (Tesseract: a 4D control plane, Yan et al.). Sem relação com a topologia física.
- Como topologia subjacente de clusters compactos de aceleradores sem switches. Um cluster de 16 nós cablado como um verdadeiro hipercubo 4D tem propriedades interessantes: cada nó tem exatamente 4 NIC, não há switch central, o encaminhamento é determinístico e o diâmetro é 4. Abordamos o tema em detalhe em N05 (topologias sem switches).
O que um tesseract oferece em 2026: nenhum imposto de switch, encaminhamento determinístico por XOR de distância de Hamming e diâmetro baixo (log₂(N)). O que o torna difícil: N fixo (tem de ser uma potência de 2), a complexidade da cablagem cresce com a dimensão, o número de NIC por nó é igual a k e os coletivos de IA modernos (ring/tree do NCCL) não exploram nativamente a estrutura do hipercubo.
Torus — o sobrevivente em dois nichos específicos
O k-ário n-cubo generaliza o hipercubo: em vez de um endereço binário com uma ligação por dimensão, usa-se uma grelha k por k por k com fecho em anel. Num torus 3D, cada nó está ligado a 6 vizinhos (±x, ±y, ±z). Num torus 6D são 12 vizinhos.
Os IBM Blue Gene/L e /P corriam sobre um torus 3D, escalando para centenas de milhares de nós com apenas 6 ligações de alta velocidade por nó. O Fujitsu Tofu (a interligação do computador K, 2011) generalizou isto para uma malha/torus 6D — 158,976 nós no Fugaku (em atividade ao longo de 2026), dispostos em 24×23×24×2×3×2.
O Cerebras Wafer-Scale Engine usa um torus 2D dentro do wafer: cada elemento de processamento tem 4 vizinhos, com fecho em anel e ~1 ns por salto. Isso funciona porque, dentro do wafer, os fios são praticamente gratuitos; cabos fora do wafer não seriam.
Porque é que o torus perdeu em todo o resto: caminhos assimétricos e mau comportamento com cargas de trabalho de IA não uniformes. As cargas de trabalho de IA modernas (ring/tree do NCCL, algoritmos hierárquicos da NVIDIA) partem do princípio de que existe largura de banda uniforme entre todos os pares. O torus não respeita isso. Em 2026, o torus sobrevive em três sítios: a interligação dentro do wafer da Cerebras, o Fugaku da Fujitsu e os seus sucessores, e o interior dos nós SXM através do NVSwitch. Fora destes nichos, todos os novos clusters de IA de 2025–2026 são Clos.
Tabela comparativa
| Topologia | Diâmetro | BW de bissecção (16 nós, 100 GbE) | Switches necessários | Cabos (aprox.) | Rácio de custo vs fat-tree 1:1 | Modelo de crescimento |
|---|---|---|---|---|---|---|
| Switch único | 1 | 800 Gb/s (limitado pelo switch) | 1× de 32 portas | 16 | 0.3× | Limite rígido no radix do switch |
| Fat-tree 1:1 (bissecção total) | 2 | 1.6 Tb/s | 2 spine + 2 leaf | 64 | 1.0× | Adicionar leaves / spines |
| Fat-tree 2:1 | 2 | 800 Gb/s | 2 spine + 2 leaf | 48 | 0.7× | Adicionar leaves |
| Dragonfly+ | 3 | 800 Gb/s (limitado pelo par de grupos) | 4 (2 por grupo) | 32–40 | 0.6× com 16N; inverte-se acima de 64N | Adicionar grupos |
| Tesseract 4D (sem switches) | 4 | ~800 Gb/s (efetiva) | 0 | 32 | 0.4× | Duplica ao acrescentar uma dimensão |
| Torus 3D (4×2×2, sem switches) | 4 | ~600 Gb/s | 0 | 48 | 0.5× | Qualquer dimensão retangular |
Uplink do cluster — como a topologia se liga ao mundo exterior
Um fabric comutado é uma ilha. Tem de se ligar à rede da empresa (registos de modelos, armazenamento de datasets, S3, telemetria), às estações de trabalho dos programadores (SSH, Jupyter, cópia de checkpoints para fora) e a outros clusters (passagem de treino → inferência). Essa ligação é o uplink do cluster.
Dois modelos, com consequências muito diferentes:
Ponto de uplink único. Um par de switches de spine (ou um router de uplink dedicado) termina toda a ligação ao exterior. Simples de proteger com firewall, fácil de limitar em débito, simples de monitorizar. Modo de falha: essa ligação é um ponto único de falha; saturá-la (a cópia de um checkpoint grande para fora, a transferência de um shard de dataset de 10 GB) afeta todos os nós em simultâneo.
Uplink distribuído. Cada leaf tem um uplink próprio para a rede do campus, muitas vezes a 25 GbE, mais lento do que o fabric de 100 GbE. As transferências de datasets e o tráfego externo ficam locais ao leaf — sem congestionamento no fabric interno. Modo de falha: cada leaf passa a ser uma fronteira de segurança, a configuração de firewall dá N vezes mais trabalho e a monitorização é mais difícil.
Para o caso base da Kentino (cluster de treino de 4 a 16 nós), o ponto de uplink único é a resposta certa. O fabric interno é exclusivamente RDMA (RoCE ou InfiniBand), afinado para baixa latência e comportamento sem perdas. O uplink é Ethernet simples, TCP, QoS normal. Não coloque o object store dos datasets no mesmo fabric sem perdas que o allreduce dos GPUs — um cliente S3 mal comportado não deve conseguir desencadear contrapressão PFC sobre o tráfego de treino. Dois fabrics: plano de dados (RDMA sem perdas) e plano de gestão/uplink (TCP com perdas). O N08 trata da configuração prática.
A opinião honesta da Kentino
A maioria dos clientes da Kentino compra 1 a 4 nós. A essa escala:
- 1 nó. Não há questão de topologia. PCIe dentro da caixa (K07), uma NIC de gestão de 25 GbE para fora, e está feito.
- 2 nós. Um cabo direto entre duas NIC RDMA. Sem switch. Sem topologia para escolher.
- 3–4 nós. Um único switch 100 GbE de 32 portas trata do tráfego de todos para todos com bissecção total, por $30k–50k tudo incluído. Continua a não haver topologia para escolher.
A conversa sobre topologia começa nos 8 nós, quando o número de portas de um switch começa a apertar, e torna-se obrigatória nos 16 nós. Abaixo disso, a resposta certa é "um bom switch, bissecção total em todas as portas, e siga com a sua vida". Acima disso, a resposta certa é "leaf-spine de dois níveis, 100 ou 200 GbE por nó, bissecção total (1:1), e nunca mexer no botão da sobresubscrição a não ser que alguém o obrigue".
O Dragonfly+ é a resposta certa às dimensões de problema dos hyperscalers. O tesseract / hipercubo é interessante como opção sem switches para clusters compactos (N05). O torus é uma escolha presa a um fornecedor, para operadores de HPC com cargas de trabalho conscientes da topologia. Para todos os outros, na faixa de preço da Kentino, a fat-tree é a predefinição. Bissecção total se a puder pagar; 2:1 se não puder; nunca 4:1 para treino de IA.
O que fazer a seguir
Se está a dimensionar um fabric comutado para um cluster real:
- Anote o número de nós, os GPUs por nó e o débito nominal por NIC. Multiplique. Divida por 2. É esse o seu valor de bissecção alvo.
- Decida se os seus trabalhos abrangem todo o cluster ou ficam dentro de um rack. Os trabalhos locais a um rack toleram sobresubscrição. Os que abrangem o cluster não.
-
Execute o
nccl-tests/all_reduce_perfnuma configuração fat-tree temporária antes de se comprometer com a cablagem. Se um allreduce de 8 nós já perde 20% do busbw teórico, o seu problema não é a topologia. - Não otimize para os próximos 5 anos. Compre para o cluster de que precisa este ano, com um caminho de expansão claro. A leaf-spine fat-tree é a topologia mais barata de fazer crescer de forma incremental.
- Ajuste o uplink ao seu ritmo de ingestão de dados, não à velocidade do fabric interno. A maioria dos clusters precisa de 25–100 GbE para o exterior, não de 400.
- Dois fabrics, sempre. Plano de dados e plano de gestão separados, mesmo com 4 nós.
Os artigos seguintes desta série aprofundam o tema: o N05 trata das topologias sem switches (as opções tesseract e torus, quando se quer mesmo prescindir do switch); o N06 disseca a origem de cada microssegundo de latência depois de o fabric estar a funcionar; o N07 cobre o trabalho de encaminhamento e de controlo de congestionamento que decide se a sua bela topologia tem mesmo desempenho; o N08 é a configuração prática de RDMA e o desenho do uplink do cluster.
Isto faz parte da Kentino Wiki, uma série de referência sobre computação de IA, robótica e os sistemas que as ligam. Comentários e correções são bem-vindos através de info@kentino.com.