Google TPUs: arquitetura, gerações e modelos

Tux de pé num arranjo sistólico diante do G do Google e de um pod de TPUs

Por volta de 2013 o Google fez a conta que assustou Mountain View: se cada usuário Android usasse o comando de voz da Busca por três minutos ao dia, em CPU x86, a empresa teria de dobrar os data centers só para inferência. GPU de consumo ainda era placa de jogo adaptada. A resposta foi um ASIC só de álgebra linear: a TPU (Tensor Processing Unit). Este texto é o mapa do silício — MXU sistólica, bfloat16, OCS — e das gerações até o TPU7x Ironwood de 2026. O recorte GPU vs TPU, lado a lado, está no post GPU vs TPU.

Por que um ASIC, não uma GPU

CPU gasta transistor com preditor de desvio, cache e decodificador. GPU gasta com SIMT genérico. A TPU dedica o die a uma conta: MAC (multiply-accumulate). Quase todo o serviço do Google — Busca, Tradutor, Fotos, YouTube, Cloud — e o treino de Transformer, BERT, AlphaFold, PaLM e Gemini passou por esse silício.

HBM  <=>  VMEM (SRAM on-die)
              │
     ┌────────┴────────┐
     v                 v
  MXU sistólica     VPU
  (MatMul pura)     (softmax, GELU, LayerNorm)
  128×128 MACs
  (16.384 células)

Nas gerações novas o SparseCore entra para embedding esparso (anúncio, YouTube, Busca). v6e e Ironwood usam MXU 256×256.

Arranjo sistólico: o dado não volta para a HBM

Num processador comum, cada MAC intermediário lê e grava registrador/cache — o memory wall do post das placas de vídeo. Na MXU:

  1. Weight-stationary: os pesos da camada saem da HBM uma vez e estacionam na célula.
  2. Sístole: o vetor de entrada entra pela esquerda e anda uma coluna por ciclo.
  3. Acúmulo: cada célula multiplica entrada × peso local, soma o que veio de cima, empurra para baixo.
  4. Saída: a coluna da matriz resultante escorre pela base.

O número pulsa de vizinho para vizinho. Energia vira conta, não trânsito. É o oposto do KV cache gordo que o MLA da DeepSeek tenta encolher na GPU.

bfloat16: a faixa do FP32 na metade dos bits

FP32 gasta banda. FP16 IEEE corta o expoente para 5 bits e o treino de rede grande estoura (overflow/underflow). O Google inventou o bfloat16:

FP32      1 sinal | 8 expoente | 23 mantissa
FP16      1 sinal | 5 expoente | 10 mantissa   (faixa estreita)
bfloat16  1 sinal | 8 expoente |  7 mantissa   (mesma faixa do FP32)

Metade do tráfego, multiplicador menor, treino sem malabarismo de loss scaling. NVIDIA, Intel, AMD e ARM adotaram. Hoje é o default de JAX, PyTorch e dos LLMs.

VPU, SparseCore, ICI e OCS

MatMul densa não é o modelo inteiro. A VPU faz GELU, ReLU, softmax, LayerNorm/RMSNorm. O SparseCore (v4 em diante) trata embedding esparso largo demais para a MXU.

O superpoder não é o chip: é o Pod.

chip <== ICI (Inter-Chip Interconnect) ==> chip
         malha 2D ou 3D torus
         OCS: espelhos MEMS desviam o laser
              topologia reconfigurável em software

ICI liga vizinhos sem TCP/IP. Torus 3D fecha as bordas. OCS (v4, v5p, Ironwood): em vez de switch elétrico que converte luz↔elétron, um microespelho aponta o feixe. Isola chip morto, muda o recorte (data / tensor / pipeline parallel) em milissegundos.

Gerações (números oficiais do Cloud TPU, 2026)

Geração Ano Foco Pico/chip HBM Pod
v1 2015 só inferência INT8 ~92 TOPS 8 GB DDR3 PCIe avulso
v2 2017 treino + inferência, BF16 45 TFLOPS 16 GB HBM 256 chips (11,5 PFLOPS)
v3 2018 líquido, escala ~123 TFLOPS 32 GB HBM2 1.024 chips
v4 2021 OCS, torus 3D 275 TFLOPS 32 GB HBM2 4.096 (1,1 EFLOPS)
v5e 2023 custo/watt 197 TFLOPS BF16 16 GB HBM2e 256 chips
v5p 2023 LLM (Gemini) 459 TFLOPS BF16 95 GB HBM3 8.960 chips
v6e Trillium 2024 MXU 256×256 918 TFLOPS BF16 32 GB, 1.638 GB/s 256 chips
TPU7x Ironwood 2025 dois chiplets, FP8 2.307 BF16 / 4.614 FP8 192 GB, 7.380 GB/s 9.216 chips

Ironwood é o primeiro TPU pensado com inferência no centro: 2 TensorCores, 4 SparseCores, ICI 1.200 GB/s. Um pod inteiro passa de 40 EFLOPS em FP8. No Cloud o recorte típico é a VM tpu7x-standard-4t (4 chips, 768 GiB de HBM). v6e continua o custo/benefício para Gemma, Llama e difusão.

Software: XLA e JAX

Sem compilador o ASIC é um tijolo. O XLA (Accelerated Linear Algebra) lê o grafo, funde ops num kernel só, aloca VMEM e programa a sístole. O JAX é a linguagem da DeepMind: Python → XLA, com pmap e shard_map. PyTorch/XLA cobre quem já tem o modelo em PyTorch. No Linux de casa isso não aparece: TPU vive em VM Debian/Ubuntu no GCP. GPU local continua CUDA/ROCm — o post do servidor recondicionado e o do Ollama são o outro lado da cerca.

O que nasceu nesse silício

2017  Transformer          ("Attention Is All You Need", pods v2)
2018  BERT                 (v2/v3)
2020  AlphaFold 2          (pods v3, 200 milhões de proteínas)
2022  PaLM 540 B           (dois pods v4, Pathways)
2023–  Gemini 1.0 / 1.5 / 2.x   (v4, v5p; contexto 1–2 M tokens)

O Transformer abandonou a RNN porque a MXU faz atenção em paralelo. BERT virou o paradigma de pré-treino mascarado. AlphaFold fechou o enovelamento. PaLM mostrou 540 B em dois pods geograficamente ligados. Gemini 1.5 Pro só abre janela de milhão de tokens porque HBM3 + OCS partem o tensor sem o barramento virar fila — o mesmo problema que o MLA ataca no cache, do outro lado da indústria.

Referências

Enquanto o mercado disputa H100 e Blackwell, o Google colhe uma década de ASIC, formato numérico próprio, laser no pod e compilador. A TPU não é “GPU do Google”. É a prova de que, em treino e inferência de tensor, especializar o silício ainda ganha da força bruta genérica.