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.
Spine 1 Spine 2 Spine 3 Spine 4 Leaf 1 Leaf 2 Leaf 3 Leaf 4

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.

Nó 1 GPU0 GPU1 GPU2 GPU3 Rail 0 Rail 1 Rail 2 Rail 3 Spine 0 Spine 1 Spine 2 Spine 3 8 fat-trees independentes, uma por slot de GPU (Rail). O allreduce no GPU N usa apenas o Rail N — zero colisões ECMP entre rails.

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.

Grupo A s s s s s s intragrupo Grupo B s s s s s s intragrupo Grupo C s s s s s s intragrupo Grupo D s s s s s s intragrupo Ligações globais (cada par de grupos diretamente ligado)

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.

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

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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. 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.
  3. Execute o nccl-tests/all_reduce_perf numa 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.
  4. 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.
  5. 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.
  6. 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.