- A GPU desempenha um papel central no machine learning moderno e é estruturada pela combinação de inúmeros Streaming Multiprocessors (SMs), especializados em operações de multiplicação de matrizes em alta velocidade, com HBM (memória de alta largura de banda)
- O SM da GPU é dividido em Tensor Core (multiplicação de matrizes) e CUDA Core (operações vetoriais), oferecendo suporte a computação paralela em larga escala e programação flexível
- GPU e TPU diferem em estrutura interna e configuração de rede; a GPU tem maior versatilidade e escalabilidade, mas alcançar o desempenho ideal exige mais considerações
- Dentro de um nó (Node), é possível realizar comunicação ultrarrápida entre GPUs por meio de NVLink e NVSwitch; entre nós, elas se conectam por redes como InfiniBand, atendendo ao treinamento distribuído em grande escala
- Em GPUs, as operações coletivas (Collectives) (ex.: AllReduce, AllGather etc.) variam muito em desempenho conforme a estrutura de hardware e as camadas de rede, e na prática tendem a ficar abaixo da largura de banda teórica
O que é uma GPU?
- As GPUs modernas de ML (ex.: H100, B200) combinam dezenas a centenas de Streaming Multiprocessors (SMs) especializados em multiplicação de matrizes com memória HBM rápida
- Cada SM possui Tensor Core (multiplicação de matrizes), Warp Scheduler (operações vetoriais) e SMEM (cache on-chip)
- Diferentemente da TPU, a GPU permite processamento paralelo mais flexível e em maior escala por meio de mais de 100 SMs
Estrutura detalhada do SM
- O SM é dividido em 4 subpartições, e cada subpartição contém seu próprio Tensor Core, CUDA Core (operações vetoriais), Warp Scheduler, arquivo de registradores etc.
- O CUDA Core é responsável por operações aritméticas vetoriais (SIMD/SIMT), enquanto o Tensor Core é especializado em multiplicação de matrizes
- Os FLOPs de Tensor Core são esmagadoramente maiores, e em operações de menor precisão a velocidade de processamento aumenta ainda mais
- GPUs mais recentes (ex.: B200) adicionam uma grande TMEM para suportar entradas volumosas do Tensor Core
A flexibilidade do CUDA Core
- O CUDA Core da GPU usa o modelo SIMT (Single Instruction Multiple Threads), executando uma instrução em paralelo em múltiplas threads
- Cada thread possui um ponteiro de instrução independente (program counter), oferecendo flexibilidade para desvios condicionais etc.; porém, quando há muita divergência de instruções dentro de um warp, o desempenho cai
- Cada CUDA Core tem estado individual e acesso à memória livremente (a TPU só consegue lidar com memória contígua)
Escalonamento/paralelismo
- O SM agenda vários warps (até 64) para execução simultânea, e cada warp scheduler executa um programa por vez
- Graças a essa estrutura, a GPU consegue oferecer alta simultaneidade mantendo considerável flexibilidade
Estrutura de memória da GPU
- A GPU tem a HBM como memória de maior capacidade e também possui uma hierarquia com L2/L1 (SMEM)/TMEM/registradores
Resumo das especificações das GPUs modernas
- A quantidade de SMs (Streaming Multiprocessors), clock, memória, FLOPs e largura de banda (BW) varia conforme o modelo
- A capacidade de memória (HBM), a largura de banda e os FLOPs (ponto flutuante / inteiro / baixa precisão) aumentam a cada geração
- Principais características na tabela (omitida): a Blackwell (B200) tem HBM de 192GB, HBM BW de 8.0TB/s, FP8 FLOPs de 4.5e15 etc.
- Em cada geração, são evidentes os avanços de hardware como aumento de registradores e cache on-chip (SMEM), além da adição de TMEM
Comparação entre GPU e TPU
- A GPU é de uso geral e modularizada em muitos SMs pequenos (unidades paralelas), com muito controle de hardware, o que dificulta o entendimento/otimização
- A TPU é composta por poucos Tensor Cores grandes e muitos ALUs vetoriais (VPUs), usando um modelo de controle de thread único que simplifica o hardware e reduz custos
- Por isso, na TPU a otimização por compilador é indispensável, enquanto na GPU vários kernels podem ser executados de forma independente, o que facilita o uso
- Em termos de desempenho/preço, recentemente a GPU H200 oferece cerca de 2x os FLOPs/s da TPU v5p, 1,5x a HBM e preço em torno de 2,5x maior
- A TPU tem muita VMEM (cache on-chip) rápida, o que pode gerar grande vantagem em inferência de modelos LLM etc.
Pontos do Q&A sobre hardware de GPU
- O H100 tem ao todo 16.896 núcleos CUDA fp32 (132 SM x 4 x 32), e o B200 tem 18.944
- Os FLOPs de operações vetoriais chegam a no máximo 33,5TFLOPs/s no H100, cerca de 30x menos que os FLOPs de multiplicação de matrizes do Tensor Core (990TFLOPs/s)
- A soma da capacidade de L1/SMEM e registradores do H100 é de 66MB, enquanto a VMEM da TPU é de 120MB
- A relação entre Bandwidth (largura de banda) e FLOPs (intensidade computacional teórica) é de cerca de 280-300 tanto no H100/B200 quanto na TPU
Networking de GPU (estrutura de comunicação)
Estrutura de nó/cluster
- Um nó de GPU geralmente agrupa 8 GPUs, conectadas diretamente em largura de banda total por NVLink (ultrarrápido) e NVSwitch (switch)
- Entre nós, é possível fazer scale-out usando InfiniBand (Ethernet etc.)
- As GPUs mais recentes (Blackwell) têm uma estrutura escalável até 72 nós
Características por camada de rede
- Dentro do nó (domínio NVLink): egress de 450GB/s por GPU (H100), 900GB/s (B200), e até 1.6TB/s por NVSwitch
- Camada superior entre nós (InfiniBand Leaf/Spine): estrutura com Leaf Switch (8) até Spine Switch (16), mantendo teoricamente 400GB/s de largura de banda total entre GPU~GPU
- Em arquiteturas de grande porte como o SuperPod, há 1024 GPUs (128 nós), e o GB200 (nó de 72 GPUs) tem largura de banda ampliada em 9x (3600GB/s)
Pontos sobre desempenho de rede
- Em teoria, a estrutura de rede (Full Fat Tree) é projetada para oferecer largura de banda máxima também entre nó~nó
- Devido a restrições de portas de hardware etc., ao escalar para 1024~4096 GPUs usa-se uma abordagem hierárquica com mais Spine/Core Switches
- A transição de largura de banda dentro do nó (450GB/s) para largura de banda entre nós (400GB/s) gera diferença de desempenho em operações coletivas
Estrutura das operações coletivas (Collectives)
- Há suporte a operações coletivas de alto nível como AllGather, AllReduce (soma), AllToAll (distribuição)
- Dentro do nó, o NVLink permite conexão direta com desempenho ideal possível (largura de banda teórica); entre nó~nó, passa-se pelo InfiniBand
- Utilizam-se as bibliotecas NCCL e NVSHMEM da NVIDIA
Análise de desempenho das operações coletivas
- AllGather/ReduceScatter: implementados em anel (Ring) na B/W (450GB/s no H100), com possibilidade de modo em árvore (Tree) para mensagens pequenas
- AllToAll: cada GPU envia diretamente para a GPU de destino; como a largura de banda é dividida por N, dentro do nó isso é teoricamente 2x mais rápido
- Em medições reais, o AllReduce fica em torno de 370GB/s, não atingindo o máximo do hardware
- Em comparação com a TPU, só em volumes grandes (dezenas de MB ~ GB) é que se aproxima do pico de largura de banda do hardware
Resumo geral e insights
- A GPU tem como pontos fortes a versatilidade e a escalabilidade, mas, dependendo da estrutura de hardware/rede, a dificuldade de otimização e observabilidade de desempenho é maior do que na TPU
- O networking (Intra-Node/NVLink/InfiniBand/Leaf/Spine etc.) é central para o desempenho em treinamento em larga escala, e é preciso atenção à diferença entre largura de banda real e teórica
- Entender as operações coletivas e a estrutura de rede é um elemento essencial em treinamento/serving de modelos distribuídos em escala extrema
- É necessário um processo baseado em benchmarks reais e na compreensão detalhada da estrutura de hardware para identificar gargalos de desempenho e condições ideais de otimização
Ainda não há comentários.