Ir para o conteúdo

Por Dentro de um LLM Decoder-Only Moderno

Os Capítulos 2 a 4 introduziram os componentes — RoPE, RMSNorm, SwiGLU, GQA, FlashAttention, KV-cache. O Capítulo 7 percorreu a tricotomia arquitetural e encerrou entregando a este capítulo a pergunta sobre por que o modelo decoder-only venceu. A tarefa aqui é integrativa: pegar os componentes, encaixá-los em um bloco decoder de 2024-2025 e recuar para enxergar o que a classe de modelos resultante tem em comum entre fornecedores. A peça central é uma tabela comparativa que coloca Llama, DeepSeek-V3, GPT-3 e ModernBERT no mesmo sistema de coordenadas, de modo que o leitor possa ler tanto a convergência (todo decoder moderno usa pre-RMSNorm + RoPE + SwiGLU + alguma variante de attention agrupado) quanto os deltas que distinguem o MoE de fronteira da linha densa Llama.

O capítulo então se volta para tokenização, o pipeline de inferência (prefill e decode), speculative decoding e o regime de over-training pós-Chinchilla que nos dá modelos de 8B parâmetros treinados em 15 trilhões de tokens. DeepSeek-V3 ganha sua própria seção curta porque seu Multi-head Latent Attention e o balanceamento MoE livre de perda auxiliar são os dois deltas arquiteturais para os quais o restante do campo vem convergindo ao longo de 2025.

Do GPT-3 até hoje

O Transformer decoder-only chegou como candidato sério à fronteira com o GPT-3 em 2020. Brown e colegas mostraram que um modelo decoder-only suficientemente grande — 175 bilhões de parâmetros treinados em aproximadamente 300 bilhões de tokens com previsão vanilla do próximo token — exibia in-context learning zero-shot e few-shot em uma ampla gama de tarefas no momento da inferência, sem nenhuma atualização de parâmetros [src_037]. Esse resultado redefiniu para que serve um modelo decoder-only. Ele não é um truque engenhoso para uma única tarefa; é um substrato que, dada escala e dados suficientes, ganha a capacidade geral de seguir padrões apresentados em seu prompt.

Três anos depois, o lançamento do Llama 2 pela Meta demonstrou que a mesma receita — decoder-only, autorregressiva, escalada — podia ser reproduzida e liberada como pesos abertos nas escalas de 7B e 70B parâmetros [src_029]. O Llama 2 também fixou um conjunto particular de escolhas arquiteturais — pre-RMSNorm, RoPE, SwiGLU e Grouped-Query Attention na escala maior — para o qual o campo então convergiu. A manada Llama 3 em 2024 refinou a mesma receita com uma mistura de dados de treinamento mais ampla, um tokenizador de 128k tokens e GQA em todos os tamanhos de modelo [src_030]. O DeepSeek-V3, lançado no final de 2024, manteve o mesmo vocabulário de componentes mas empurrou dois deltas — Multi-head Latent Attention para compressão de KV-cache e um router mixture-of-experts livre de perda auxiliar — dos quais o restante da fronteira vem adotando variantes [src_031]. A arquitetura, em outras palavras, convergiu. Os eixos de diferenciação remanescentes são a cobertura do tokenizador, a composição dos dados de treinamento, a escolha denso-vs-MoE e a variante específica de attention GQA / MQA / MLA. Este capítulo torna essa afirmação concreta.

🔄 Recapitulação

Antes de prosseguir para o bloco canônico no §2, recupere os componentes dos Capítulos 2-4 que este capítulo assume que você encontrou:

  • Complete a receita da convergência. Todo decoder moderno usa normalização pre-______, RoPE em Q/K, ativação ______ (gated) na FFN e attention grouped-______.
  • Explique com suas palavras. Por que o in-context learning emerge apenas de escala + previsão do próximo token, sem nenhuma supervisão explícita por tarefa?
  • Preveja os quatro eixos de diferenciação. Dada a lista da convergência acima, nomeie os quatro eixos em que as decisões de design restantes para um decoder de 2024-2026 são tomadas.

O bloco decoder canônico de 2026

Bloco Transformer decoder-only moderno (visão de residual stream): pre-RMSNorm e RoPE alimentam um sublayer de Grouped-Query Attention, seguido por pre-RMSNorm e por uma rede feed-forward SwiGLU. Cada capítulo da Parte II elabora um componente.

A Figura 1 mostra o bloco para o qual a família Llama / Qwen / Gemma / DeepSeek-V3 convergiu. Um residual stream com formato \([B, T, D]\) entra no bloco. Ele é dividido em dois caminhos. O primeiro caminho normaliza a entrada com RMSNorm, projeta em queries, keys e values, aplica RoPE em queries e keys, executa Grouped-Query Attention com máscara causal (ou, no DeepSeek-V3, Multi-head Latent Attention) e soma o resultado de volta no residual stream. O segundo caminho normaliza novamente com RMSNorm, executa a rede feed-forward SwiGLU e soma esse resultado de volta no residual stream também [src_002, src_047].

Três pontos merecem ênfase. Primeiro, a posição da normalização. Na configuração pre-norm o RMSNorm é aplicado antes da transformação de cada sublayer, deixando o próprio residual stream não normalizado; a soma residual é entre a entrada não normalizada e a saída do sublayer. Isso é mais estável em profundidade do que o posicionamento post-norm do Transformer original de Vaswani, no qual o LayerNorm ficava depois da soma residual — uma configuração que tinha dificuldade para treinar nas contagens de layer que decoders modernos utilizam [src_002, src_006].

🤔 Pause e pense

Antes de seguir: pre-norm normaliza a entrada de cada sublayer e deixa o residual stream em si sem normalização; post-norm normaliza depois da soma residual, de modo que o próprio residual stream é normalizado a cada passo. Preveja — em qual configuração as normas do residual stream crescem com a profundidade, e em qual elas permanecem aproximadamente constantes? (Não olhe adiante — escreva a resposta ou diga em voz alta.)

O Capítulo 3 desenvolve essa história em detalhes.

Segundo, RoPE é aplicado apenas às projeções de query e key, não a values. O mecanismo é uma rotação dependente da posição em pares de dimensões do embedding, e os scores de attention resultantes dependem da posição relativa de dois tokens por meio dessa rotação.

🎯 Intuição

Imagine cada par de dimensões do embedding como um ponteiro de relógio cujo ângulo cresce linearmente com o índice do token. Dois tokens nas posições \(m\) e \(n\) têm seus pares de ponteiros rotacionados por \(m\theta\) e \(n\theta\); o produto interno entre os pares rotacionados depende apenas da diferença de ângulo \((m-n)\theta\), de modo que os scores de attention enxergam a posição relativa automaticamente — nenhum embedding posicional separado é adicionado ao fluxo de values.

A frequência base \(\theta\) do RoPE é um hiperparâmetro; o Llama-3 usa \(\theta = 500{,}000\), o que estende a banda de frequências que a rotação consegue resolver e ajuda o modelo a usar contextos longos [src_030]. O próprio RoPE é o tópico do Capítulo 2.

Terceiro, GQA substitui a Multi-Head Attention dos manuais. No MHA cada head de query tem seus próprios heads de key e value; no MQA todas as queries compartilham um único par key/value head; no GQA as queries são divididas em grupos, e cada grupo compartilha um par key/value [src_006, src_030]. A troca é definida pela razão \(h / h_{kv}\), onde \(h\) é o número de query heads e \(h_{kv}\) é o número de key/value heads. O Llama-3 70B usa \(h = 64\) e \(h_{kv} = 8\), uma razão de compartilhamento de 8 para 1 [src_030].

🎯 Intuição

Imagine 64 query heads como 64 leitores todos consultando a mesma biblioteca. Com MHA, cada leitor tem um caderno privado (64 cadernos no total); com MQA, todos os 64 compartilham um caderno (barato de armazenar mas cada leitura é contendida); com GQA em \(h_{kv} = 8\), os leitores se dividem em 8 grupos de 8, cada grupo compartilhando um caderno. Isso é uma redução de ×8 no armazenamento de cadernos com contenção de leitura desprezível — o ponto ideal de engenharia entre a redundância do MHA e o gargalo do MQA.

A memória de KV-cache de um passo de decode escala linearmente em \(h_{kv}\), então essa razão define a pegada de memória da inferência. Voltamos a esse cálculo no §5.

O bloco é, fora isso, sem surpresas: a expansão FFN passa por SwiGLU, a soma residual fecha cada sublayer, e a saída é outro tensor com formato \([B, T, D]\) que alimenta o próximo layer.

💡 Resultado-chave

O bloco decoder de 2024-2026 é pre-RMSNorm + RoPE em Q/K + Grouped-Query Attention + FFN SwiGLU, com soma residual fechando cada sublayer — a receita que a tabela comparativa do §3 vai demonstrar como convergente entre fornecedores.

Tabela comparativa de arquiteturas

A tabela abaixo coloca cinco modelos no mesmo sistema de coordenadas. Três são decoders densos (Llama-3 8B, Llama-3 70B, GPT-3 175B); um é um decoder MoE esparso (DeepSeek-V3); e um é um encoder incluído por contraste (ModernBERT). O Llama-2 está implícito: as colunas Llama-3 são refinamentos diretos da receita Llama-2, não rupturas com ela.

Dimensão Llama-3 8B Llama-3 70B DeepSeek-V3 ModernBERT (encoder) GPT-3 175B (histórico)
Família decoder denso decoder denso decoder MoE esparso encoder denso decoder denso
Normalização Pre-RMSNorm Pre-RMSNorm Pre-RMSNorm Pre-LN com LayerNorm sem viés (sem parâmetro de viés aprendível) Pre-LN
Codificação posicional RoPE, \(\theta = 500{,}000\) RoPE, \(\theta = 500{,}000\) RoPE RoPE (alternando \(\theta = 160{,}000\) global / \(\theta = 10{,}000\) local) absoluta aprendida
Ativação FFN SwiGLU SwiGLU SwiGLU GeGLU GELU
Variante de attention GQA, \(h = 32\), \(h_{kv} = 8\) GQA, \(h = 64\), \(h_{kv} = 8\) MLA (KV-cache latente) + FFN MoE bidirecional pleno, sliding global / local alternando 128 MHA
Vocabulário \(V\) \(128{,}000\) (BPE estilo tiktoken) \(128{,}000\) \(128{,}000\) \(50{,}368\) (BPE OLMo modificado) \(\approx 50{,}257\)
Hidden \(D\) \(4{,}096\) \(8{,}192\) \(7{,}168\) (encoder, varia por checkpoint) \(12{,}288\)
Layers \(L\) \(32\) \(80\) \(61\) (encoder) \(96\)
Contexto nativo \(8{,}192\) tokens (estendido depois) \(8{,}192\) tokens (estendido depois) \(128{,}000\) tokens \(8{,}192\) tokens \(2{,}048\) tokens
Parâmetros totais \(\approx 8 \times 10^9\) \(\approx 70 \times 10^9\) \(671 \times 10^9\) (encoder) \(175 \times 10^9\)
Parâmetros ativos por token denso, \(\approx 8 \times 10^9\) denso, \(\approx 70 \times 10^9\) \(37 \times 10^9\) denso denso, \(175 \times 10^9\)
Tokens de pretraining \(\approx 15 \times 10^{12}\) \(\approx 15 \times 10^{12}\) \(14.8 \times 10^{12}\) \(\approx 2 \times 10^{12}\) \(\approx 0.3 \times 10^{12}\)
Compute de pretraining (grande; ver paper) (grande; ver paper) \(\approx 2.788 \times 10^6\) H800 GPU-hours (encoder; escala menor) (grande; ver paper)

🔗 Conexão

O attention global / local alternado por janela deslizante do ModernBERT é desempacotado no Capítulo 7 — Encoder, Decoder e Encoder-Decoder. O truque de dois bases de RoPE (160K global / 10K local) é o análogo, em contexto longo, da pilha de layers com attention alternado.

🤔 Pause e pense

Antes de ler as observações abaixo, percorra a tabela de cima a baixo e preveja: qual linha tem mais convergência entre as colunas decoder? Qual linha tem mais divergência? Qual célula do DeepSeek-V3 tem maior probabilidade de te surpreender dadas as quatro colunas anteriores? (Não olhe adiante — escreva as respostas antes de prosseguir.)

Referências para as colunas: Llama-3 [src_030]; DeepSeek-V3 [src_031]; ModernBERT [src_016]; GPT-3 [src_037]; baseline Llama-2 por trás da coluna Llama-3 [src_029]. A glosa narrativa que enquadra a tabela — de que todo modelo bem-sucedido é uma fundação conhecida modificada para necessidades específicas — vem do Smol Playbook [src_006]. As colunas de Qwen e Gemma não aparecem na tabela porque ela fixa um retrato do final de 2024; os relatórios técnicos primários da família Qwen3 [src_057] e do Gemma 3 [src_058] chegaram em meados de 2025 e em março de 2025, respectivamente, e tratamos esses dois lançamentos na subseção O cenário aberto em abril de 2026 mais adiante, em vez de retroajustá-los à comparação histórica.

Algumas observações vale extrair da tabela.

A convergência é real. Fora a coluna histórica do GPT-3, todo decoder usa pre-RMSNorm, RoPE, SwiGLU e alguma variante de attention agrupado. A coluna do encoder (ModernBERT) compartilha tudo isso exceto a escolha de ativação (GeGLU vs SwiGLU) e a direcionalidade do attention (bidirecional pleno com o padrão alternado global/local descrito no Capítulo 7) [src_016].

A razão de compartilhamento do GQA é conservadora ao longo da família densa Llama. Tanto o checkpoint Llama-3 8B quanto o 70B usam \(h_{kv} = 8\), embora o modelo 70B tenha oito vezes mais query heads [src_030]. Esse é o design que faz a memória de KV-cache escalar de forma suave com o tamanho do modelo; é também o que torna o modelo 70B viável em um único host de 8 GPUs com batch sizes modestos.

O vocabulário saltou da codificação classe 50k do GPT-3 para uma codificação classe 128k para a linha Llama-3 e o DeepSeek-V3 [src_030, src_031]. O vocabulário maior melhora a compressão em dados multilíngues e de código e reduz comprimentos de sequência para um mesmo conteúdo de texto. Discutimos isso no §4.

A razão tokens-para-parâmetros nas linhas inferiores é a história do over-training. O Llama-3 8B treinado em 15T tokens tem uma razão tokens-por-parâmetro de aproximadamente \(1{,}875\), muito acima do \(\approx 20\) Chinchilla-ótimo que o Capítulo 9 deriva. Desempacotamos isso no §7.

DeepSeek-V3 é a primeira coluna que rompe o padrão denso. Ele tem \(671 \times 10^9\) parâmetros totais, mas roteia cada token para apenas \(37 \times 10^9\) parâmetros ativos por forward pass por meio de uma FFN mixture-of-experts [src_031]. A distinção total/ativo é a característica definidora da economia de inferência MoE, e o Capítulo 10 desenvolve em detalhes a maquinaria de routing e balanceamento de carga. O attention MLA na mesma coluna é um eixo de inovação separado, e voltamos a ele no §8 abaixo.

🔗 Conexão

O routing mixture-of-experts e o balanceamento de carga livre de perda auxiliar do DeepSeek-V3 são desenvolvidos no Capítulo 10; o eixo do Multi-head Latent Attention é desempacotado no §8 abaixo.

💡 Resultado-chave

Fora a coluna histórica do GPT-3, todo decoder moderno usa a mesma receita de quatro componentes — pre-RMSNorm, RoPE, SwiGLU, attention agrupado — e se diferencia na variante de attention, na escolha denso-vs-MoE, no tamanho do vocabulário e na mistura de dados de treinamento; a subseção H3 abaixo registra como esses eixos diferenciadores mudaram até abril de 2026.

O cenário aberto em abril de 2026

A tabela comparativa acima captura um retrato do final de 2024. Em abril de 2026 a fronteira de pesos abertos havia passado por mais duas ondas de lançamento. O núcleo convergente — pre-RMSNorm, codificação posicional no estilo RoPE, SwiGLU e attention agrupado por consulta — sobreviveu. Cada modelo que apareceu entre meados de 2025 e abril de 2026 mantém essa receita. O que mudou foi tudo o que está ao redor dela.

Primeiro, MoE virou padrão na ponta. Llama 4 Scout e Maverick (abril de 2025) foram os primeiros lançamentos MoE da Meta, com 17 bilhões de parâmetros ativos distribuídos por 16 e 128 experts, respectivamente [src_059]. DeepSeek-V4 (abril de 2026) chega com 1,6 trilhão de parâmetros totais e 49 bilhões ativos por token [src_060]. Qwen3-235B-A22B (maio de 2025) ativa 22 bilhões de um total de 235 bilhões de parâmetros, com 128 experts e 8 ativos a cada passo [src_057]. A divisão denso-versus-esparso que a tabela tratava como uma dicotomia Llama-vs-DeepSeek tornou-se agora um eixo de razão de esparsidade, com as razões mais agressivas operando perto de 5 por cento ativos.

Segundo, as variantes de attention se multiplicaram. A trajetória do DeepSeek foi MLA → DeepSeek Sparse Attention → um híbrido entre Compressed Attention e Heavily-Compressed Attention [src_060]. O Gemma 3 apostou em uma proporção de 5:1 entre janelas locais (sliding) e globais, com janela local de 1024 tokens [src_058]. O Llama 4 introduziu o "iRoPE": algumas camadas não carregam embedding posicional algum, combinadas com um escalonamento de temperatura no attention durante a inferência para generalização em comprimentos maiores [src_059].

🎯 Intuição

iRoPE = RoPE intercalado: em algumas layers o RoPE é aplicado normalmente, em outras nenhuma codificação posicional é aplicada. As layers sem informação posicional podem prestar attention em qualquer token independentemente da distância, o que melhora a generalização em comprimentos maiores; as layers com RoPE carregam o sinal posicional. O escalonamento de temperatura na inferência compensa o attention de alcance mais longo que as layers sem-posicional admitem quando o contexto cresce além do comprimento de treinamento.

⚠️ Armadilha

Seis novos identificadores de modelo e quatro novas variantes de attention em três parágrafos é densidade de preview, não densidade para decorar. A lição é o eixo de mistura entre layers (quais blocos alternam, como as posições são codificadas entre eles, quão agressivamente a FFN é esparsificada) — não memorizar qual variante vive em qual modelo.

Terceiro, as frequências base do RoPE subiram. O Llama-3 usava 500K; Qwen3 e Gemma 3 usam 1 milhão [src_057, src_058]. As janelas de contexto nativas saltaram de 128K (a norma do final de 2024) para a faixa de 256K-1M, com o Llama 4 Scout reivindicando 10M [src_059].

A conclusão para o bloco canônico. A lição para este capítulo é que o panorama no nível de bloco que você acabou de aprender ainda descreve o que está em produção. Os deltas estão no nível da mistura entre layers: quais blocos alternam, como as posições são codificadas entre eles e quão agressivamente a FFN é esparsificada. A tabela acima permanece um retrato fiel do final de 2024; esta subseção registra o que está na fronteira de pesos abertos em abril de 2026.

Tokenização

LLMs decoder modernos usam tokenizadores Byte Pair Encoding em nível de byte — o "estilo tiktoken" herdado da linha GPT. (tiktoken é a biblioteca open-source de tokenizador BPE da OpenAI, originalmente liberada com o GPT-3.5 e o GPT-4; o vocabulário-base de 100k que o Llama-3 estende é a codificação cl100k_base.) A base em nível de byte significa que o tokenizador pode codificar qualquer string de entrada, incluindo código, símbolos matemáticos, emoji e texto multilíngue arbitrário, sem nunca recorrer a um marcador de token desconhecido; as fusões BPE então compõem esses bytes em sub-word tokens mais eficientes para o inglês comum e para as línguas dos dados de treinamento do tokenizador [src_030].

O Llama-3 usa um tokenizador de 128k de vocabulário que combina os 100k tokens do vocabulário tiktoken da OpenAI com 28k tokens adicionais escolhidos para melhorar a cobertura de línguas não-inglesas. A taxa de compressão — caracteres por token, em média sobre um corpus representativo — melhora de 3.17 no tokenizador 32k do Llama-2 para 3.94 no tokenizador 128k do Llama-3 [src_030]. Esse número importa porque determina, para um mesmo conteúdo de texto, quantos tokens uma sequência custa. Uma taxa de compressão maior traduz-se diretamente em mais texto cabendo na mesma janela de contexto, menor custo de inferência por caractere e maior throughput de treinamento por token de treinamento.

O DeepSeek-V3 também usa um tokenizador BPE classe 128k com fallback em nível de byte [src_031]. O ModernBERT, no lado do encoder, usa um BPE OLMo modificado de 50,368 tokens — o tamanho do vocabulário é deliberadamente um múltiplo de \(64\) para que a matriz de embedding se posicione de forma limpa no hardware GPU [src_016]. Essa é uma microotimização recorrente em toda a stack de componentes modernos: tamanhos de vocabulário, contagens de heads e dimensões hidden são todos escolhidos como múltiplos de \(64\) ou \(128\) sempre que possível.

Vale nomear brevemente as alternativas históricas. BERT e a linha encoder-only usaram WordPiece, um algoritmo de sub-word relacionado com regras de fusão ligeiramente diferentes; T5 e a linha encoder-decoder usaram SentencePiece, que dobra o whitespace no alfabeto do tokenizador e opera em texto bruto em vez de palavras pré-tokenizadas. O contraste mecanístico é nítido: WordPiece roda sobre palavras já tokenizadas por whitespace e funde pedaços sub-word a partir de um vocabulário aprendido; SentencePiece opera em fluxos de texto bruto (whitespace incluso como um caractere regular) e é agnóstico de língua na fronteira de entrada; o BPE estilo tiktoken em nível de byte desce ainda mais um nível, tratando a entrada como um fluxo de bytes de modo que qualquer sequência de bytes seja codificável. Ambos foram deslocados no lado decoder-only pelo BPE em nível de byte estilo tiktoken porque o tratamento em nível de byte evita os modos de falha de cobertura de língua que algoritmos pré-tokenizados produzem em código e em línguas sem tokenização limpa por whitespace.

Pipeline de inferência: prefill e decode

Um modelo decoder-only moderno na inferência divide seu trabalho em duas fases que têm características de desempenho muito diferentes. A primeira fase, prefill, processa o prompt inteiro em um único forward pass paralelo. Cada token no prompt presta attention em todo token anterior sob a máscara causal, tudo em uma única passagem intensiva em multiplicação de matrizes pela stack. O subproduto do prefill é o KV-cache: para cada layer, para cada token de prompt, as keys e values projetadas são escritas em um cache por layer para que não precisem ser recomputadas [src_002, src_006].

A segunda fase, decode, gera um novo token por vez. Cada passo de decode lê o embedding do token corrente, executa-o pela stack e, no sublayer de attention de cada layer, projeta o novo token em uma query, key e value. A nova key e o novo value são acrescentados ao KV-cache do layer. A query presta attention em todas as keys e values no cache até o passo corrente, inclusive. Após o FFN e o unembedding, o modelo emite uma distribuição de logits sobre o vocabulário, amostra o próximo token e o loop se repete.

Decode é fundamentalmente um trabalho diferente do prefill. Cada passo de decode é um único token movendo-se pela stack, mas ele precisa ler o KV-cache para todos os tokens anteriores em todos os layers. A intensidade aritmética — a razão entre operações de ponto flutuante e tráfego de memória — é baixa. O decode é memory-bandwidth-bound em aceleradores modernos: as leituras do KV-cache dominam, e os FLOPs ficam em grande parte ociosos [src_006]. Esse é o fato que motiva quase toda otimização de inferência na stack moderna — compressão de KV-cache, GQA / MQA / MLA, alocadores paged-attention, speculative decoding. (Paged-attention é o alocador de KV-cache introduzido pelo vLLM que divide o cache em páginas de tamanho fixo e usa tabelas de indireção, permitindo compartilhamento eficiente de memória entre requisições concorrentes.) O Capítulo 4 desenvolve em detalhes a análise de bandwidth.

O tamanho do KV-cache, recapitulado do Capítulo 4, é

\[ \text{bytes de KV-cache por token} = 2 \cdot L \cdot h_{kv} \cdot d_h \cdot b \]

onde \(L\) é o número de layers, \(h_{kv}\) o número de key/value heads, \(d_h\) a dimensão por head, e \(b\) os bytes por elemento armazenado (o \(2\) inicial conta tanto K quanto V).

🤔 Pause e pense

Pause antes de substituir. Dada a fórmula acima e os números do Llama-3 70B (\(L = 80\), \(h_{kv} = 8\), \(d_h = 128\), armazenamento fp16, \(b = 2\)): preveja o tamanho do KV-cache por token dentro de uma ordem de magnitude — são dezenas de KB, centenas de KB, ou megabytes? Depois confira contra a próxima equação.

Para o Llama-3 70B com \(L = 80\), \(h_{kv} = 8\), \(d_h = 128\), e \(b = 2\) (armazenamento fp16), isto é

\[ 2 \cdot 80 \cdot 8 \cdot 128 \cdot 2 = 327{,}680 \text{ bytes por token}, \]

ou aproximadamente \(320\) KiB por token de contexto. Em um comprimento de contexto de \(8{,}192\) isso é aproximadamente \(2.5\) GiB de KV-cache por sequência.

🎯 Intuição

Um modelo de 8B parâmetros em fp16 pesa cerca de \(16\) GiB. Em \(128{,}000\) tokens de contexto, o KV-cache por sequência para uma configuração Llama-3 70B GQA-8 é aproximadamente \(40\) GiB — mais do que o dobro da pegada de pesos de um modelo de 8B. Esse é o desfecho calibrado da fórmula acima: em contextos longos, o cache deixa de ser uma nota de rodapé e passa a ser o termo de memória dominante.

Nos comprimentos de contexto mais longos que o modelo posteriormente suporta (até \(128{,}000\) tokens após a extensão da base RoPE), o KV-cache excede os pesos de um modelo de 8B. Os números de configuração são de [src_030]; a fórmula e sua motivação foram desenvolvidas no Capítulo 4. Esse escalonamento linear em \(h_{kv}\) é a razão arquitetural para a existência do GQA: colapsar \(h\) key-value heads em \(h_{kv} = h/g\) heads dá uma redução imediata de fator \(g\) na memória de cache.

🔄 Recapitulação

Prompts de retrieval sobre o split prefill/decode do §5, a assimetria de intensidade aritmética e a fórmula de tamanho do KV-cache:

  • Complete a fórmula. KV-cache bytes por token = \(2 \cdot \_\_\_ \cdot \_\_\_ \cdot \_\_\_ \cdot \_\_\_\). Nomeie o que cada fator conta.
  • Explique por que o decode é memory-bandwidth-bound. Qual a razão entre quais duas quantidades é "baixa" no momento do decode, e por que reduzir essa razão motiva compressão de KV-cache em vez de kernels de matmul mais rápidos?
  • Preveja o cache por sequência. Para um modelo hipotético com \(L = 32\), \(h_{kv} = 8\), \(d_h = 128\), armazenamento fp16, em \(32{,}768\) tokens de contexto — dentro de uma ordem de magnitude, qual é o KV-cache por sequência?

Speculative decoding

Decode memory-bandwidth-bound admite um truque inteligente de amortização. Speculative decoding usa um modelo draft pequeno para propor uma sequência de \(K\) tokens candidatos seguintes, e então executa o modelo target grande em um único forward pass paralelo sobre a sequência proposta. Esse pass produz a distribuição do modelo target em cada posição; o procedimento mantém o prefixo mais longo dos tokens propostos que o modelo target também teria produzido, e descarta o restante. O efeito líquido é que, quando as predições do modelo draft concordam com as do target, o modelo target emite múltiplos tokens por seu próprio forward pass [src_006].

O ganho é throughput. Cada token rejeitado custa um forward pass do modelo target que não produziu nova saída, mas o pass de verificação em si é barato em relação a \(K\) passos de decode separados porque é arithmetic-intensity-friendly: o target avalia \(K\) tokens em paralelo, e o KV-cache é lido uma vez para todo o batch de posições em vez de \(K\) vezes. O ganho líquido de throughput ocorre quando a taxa de aceitação do draft, multiplicada pela latência por token do draft, é menor do que a latência do target dividida por \(K\). Detalhes de implementação e a implementação de referência gpt-fast são adiados para o Apêndice B. O DeepSeek-V3 incorpora uma capacidade relacionada em seu modelo base na forma de multi-token prediction durante o treinamento — MTP, prevendo os próximos \(k\) tokens conjuntamente a partir de cada posição via cabeças auxiliares sobre o backbone compartilhado, em vez do próximo-1 autorregressivo padrão; o §8 retorna a MTP nos destaques do DeepSeek-V3 [src_031].

A história do over-training pós-Chinchilla

As scaling laws de Chinchilla, que o Capítulo 9 desenvolve, identificam uma alocação compute-ótima de dados e parâmetros: aproximadamente \(20\) tokens de treinamento por parâmetro. Por essa métrica, o Llama-3 8B treinado em \(15 \times 10^{12}\) tokens tem uma razão tokens-por-parâmetro próxima de \(1{,}875\) — quase duas ordens de magnitude além do ponto compute-ótimo [src_030]. O Llama-3 70B na mesma escala de dados de treinamento também está claramente além do Chinchilla-ótimo, embora por um fator menor.

Isso não é um erro. Chinchilla otimiza compute total de treinamento sob um orçamento fixo. Um laboratório de fronteira que precisa servir um modelo a usuários por meses ou anos paga compute de inferência também, e o compute de inferência é pago por token de saída gerada, em toda saída, para sempre. Um modelo menor treinado em mais tokens do que o Chinchilla recomenda tem pior eficiência de training-compute mas menor custo de inferência, e a balança pende fortemente em direção à inferência uma vez que o modelo seja implantado em escala. O relatório da manada Llama-3 faz esse argumento explicitamente quando justifica o regime de over-training [src_030]. O Capítulo 9 desenvolve a figura completa das scaling laws e quantifica o trade-off.

🔗 Conexão

A scaling law de Chinchilla e o regime de over-training pós-Chinchilla são derivados no Capítulo 9. Os números da fronteira DeepSeek-V4 / Llama-4 da subseção H3 do §3 acima (razões de esparsidade, comprimentos de contexto nativos, bases do RoPE em 1M) estão do mesmo lado over-training da linha, alguns anos depois.

💡 Resultado-chave

Quando o custo de inferência domina o custo total de vida do modelo, treinar um modelo menor em mais dados do que o Chinchilla recomenda — Llama-3 8B em 15T tokens, razão ≈ 1875 — é uma troca deliberada de eficiência de training-compute por economia de inference-compute.

Destaques do DeepSeek-V3

O DeepSeek-V3 é o modelo de fronteira mais arquiteturalmente distintivo do final de 2024, e vale tornar visível o que o torna diferente [src_031]. Três deltas importam.

O primeiro é Multi-head Latent Attention (MLA). Em vez de fazer cache de keys e values plenas por head, o MLA faz cache de uma representação latente de baixo posto que o sublayer de attention expande de volta em keys e values por head em tempo real. A dimensionalidade do vetor latente é substancialmente menor do que \(h_{kv} \cdot d_h\), então a memória de KV-cache por token diminui correspondentemente. O MLA é, em certo sentido, o próximo movimento ao longo do mesmo eixo de MHA → MQA → GQA: cada passo troca uma pequena concessão representacional por uma grande redução na memória de KV-cache [src_031]. O Capítulo 4 desenvolve o panorama de variantes de attention; o Capítulo 10 retoma o MLA no contexto da inferência MoE.

O segundo é Mixture-of-Experts com balanceamento de carga livre de perda auxiliar. A FFN do DeepSeek-V3 é substituída por uma stack de experts e um router que envia cada token para um subconjunto desses experts. Os \(671 \times 10^9\) parâmetros totais no modelo incluem todos os experts; apenas os \(37 \times 10^9\) parâmetros ativos por token participam de qualquer forward pass dado [src_031]. Designs MoE anteriores adicionavam um termo de perda auxiliar ao objetivo de treinamento para manter os experts uniformemente utilizados; o DeepSeek-V3 em vez disso usa um esquema de correção de viés no router que atinge balanço sem uma perda auxiliar. As mecânicas pertencem ao Capítulo 10.

O terceiro é a própria escala de treinamento. O DeepSeek-V3 foi pré-treinado em \(14.8 \times 10^{12}\) tokens usando aproximadamente \(2.788 \times 10^6\) H800 GPU-hours [src_031]. Esse número é um dos orçamentos de treinamento em escala de fronteira mais concretamente documentados na literatura aberta, e ele aterra a discussão do Capítulo 9 sobre eficiência efetiva de training-compute em escala MoE.

Resumo de fechamento

A arquitetura convergiu. Um LLM decoder-only de 2024-2025 é uma stack de blocos Transformer pre-RMSNorm com RoPE em Q/K, uma variante de attention agrupado para compressão de KV-cache e uma FFN SwiGLU. Os eixos de diferenciação remanescentes são a variante de attention (GQA na família Llama, MLA no DeepSeek-V3), a escolha denso-vs-MoE, o vocabulário e a cobertura do tokenizador, e a mistura de dados de treinamento. Componentes que este capítulo apenas nomeou de passagem — frequências base RoPE, kernels FlashAttention, a forma exata de pre-RMSNorm — foram desenvolvidos em detalhes nos Capítulos 2 a 4 [src_046].

A próxima parte do livro é sobre escala. O Capítulo 9 deriva as scaling laws de Chinchilla e percorre o regime de over-training pós-Chinchilla que a manada Llama-3 habita [src_030]; o Capítulo 10 desenvolve mixture-of-experts e o balanceamento livre de perda auxiliar do DeepSeek-V3 [src_031]. Após a escala vem o alinhamento: a Parte VI pega o backbone decoder pré-treinado produzido pelas receitas aqui e o converte em um sistema que segue instruções, é alinhado por preferências e é capaz de reasoning. O modelo pré-treinado que este capítulo monta é o substrato sobre o qual todo esse trabalho posterior acontece.

🔗 Conexão

Escala: Cap.9 scaling laws e Cap.10 mixture-of-experts. Alinhamento: a Parte VI do livro cobre SFT/RLHF, DPO e modelos de reasoning. O decoder pré-treinado que este capítulo monta é o substrato para tudo que segue.

🔄 Recapitulação

Prompts de retrieval em nível de capítulo sobre o conteúdo central (bloco do §2 + tabela do §3 + KV-cache do §5 + speculative decoding do §6 + over-training do §7):

  • Complete a lista da convergência. Quais quatro componentes são compartilhados por toda coluna decoder moderna na tabela do §3?
  • Complete o cálculo. Qual é o tamanho por token do KV-cache para o Llama-3 70B (em KiB), e por que esse número sobe acentuadamente em contextos longos?
  • Explique por que o over-training (treinar um modelo menor em muito mais dados do que o Chinchilla recomenda) faz sentido econômico em escala de implantação.
  • Compare o panorama no nível de bloco que você aprendeu no §2 com o panorama no nível de mistura entre layers que a subseção H3 do §3 (fronteira de abril de 2026) introduz. Qual nível está convergido entre fornecedores em abril de 2026, e qual nível é o espaço de design ativo?

References