Avançado

MQA, GQA e MLA

Os 24 query heads do Qwen3.8-27B compartilham 4 KV heads — um encolhimento de 6× no cache em relação a um MHA de mesma geometria; MQA e MLA levam o trade entre compartilhamento e capacidade adiante.

Atualizada em

01 · Conceito

Conceito

Abra a config do Qwen3.8-27B e uma assimetria salta aos olhos: 24 query heads, mas apenas 4 key/value heads. Por que uma equipe de design daria a uma camada seis vezes mais perguntas do que respostas? Porque, durante o serving, as queries são computadas do zero a cada passo e custam apenas pesos — mas cada key e cada value precisam ser armazenados para todo token passado. Os KV heads são os caros, e esta lição é sobre a família de designs que economizam neles: MQA, GQA e MLA.

Monte a contabilidade. Com HqH_q query heads e HkvH_{kv} KV heads, o tamanho do cache por token por camada é proporcional a HkvH_{kv} (vezes a head dimension, vezes dois para K e V, vezes os bytes por elemento). A multi-head attention clássica define Hkv=HqH_{kv} = H_q: cada query head possui uma visão privada de key/value.

Aqui está o desvio a encenar deliberadamente, porque você vai vê-lo por aí. Alguém lê “24 heads, head dimension 256, bf16” e calcula o cache do Qwen como 24×256×2×2 B=24 KiB24 \times 256 \times 2 \times 2\ \text{B} = 24\ \text{KiB} por token por camada. Esse é o número do MHA — ele ignora a grouped-query attention e superestima exatamente pelo fator que os projetistas eliminaram por engenharia. O número real, derivado uma vez na lição 7.2 e apenas referenciado aqui, usa os 4 KV heads: 4 KiB por token por camada com cache, 64 KiB por token através das 16 camadas de full attention, 16 GiB por sequência no contexto nativo de 262.144 tokens. Rode a variante hipotética de MHA pelo mesmo pipeline e a comparação é gritante:

24×256×2×2 BMHA de mesma geometria=24 KiBvs4×256×2×2 BGQA do Qwen=4 KiB por token por camada,\underbrace{24 \times 256 \times 2 \times 2\ \text{B}}_{\text{MHA de mesma geometria}} = 24\ \text{KiB} \quad\text{vs}\quad \underbrace{4 \times 256 \times 2 \times 2\ \text{B}}_{\text{GQA do Qwen}} = 4\ \text{KiB por token por camada},

um encolhimento de 6× — por token isso é 384 KiB contra 64 KiB, e em contexto completo hipotéticos 96 GiB por sequência contra os 16 GiB reais. A variante MHA não conseguiria segurar nem uma única sequência de comprimento total ao lado dos 54 GB de pesos em bf16 num acelerador de 80 GB; o design com GQA consegue. O mesmo fator governa a banda do decode, já que o cache precisa ser lido a cada passo por toda camada com cache.

A multi-query attention (MQA) leva o compartilhamento ao limite: Hkv=1H_{kv} = 1. Para a geometria do Qwen isso significaria 1×256×2×2 B=1 KiB1 \times 256 \times 2 \times 2\ \text{B} = 1\ \text{KiB} por token por camada — 16 KiB por token, cerca de 4 GiB em contexto completo, um encolhimento de 24× em relação ao MHA. O preço é representacional: todos os 24 query heads precisam ler de um único subespaço compartilhado de key/value. Os query heads ainda podem fazer perguntas diferentes, mas todas consultam o mesmo índice e a mesma carga, e se a qualidade sobrevive depende do modelo, da escala e da receita de treinamento — não dá para ler isso no diagrama da arquitetura.

A grouped-query attention (GQA) é a interpolação, e a escolha do Qwen3.8-27B assenta bem nela: 24 query heads em 4 grupos de 6, cada grupo compartilhando um K/V head. Os grupos preservam alguma diversidade de subespaços de key/value enquanto dividem cache e banda por seis. O artigo de GQA (Ainslie et al.) mostrou que o design também pode ser convertido: agrupe os K/V heads de um checkpoint MHA por grupo, e então continue treinando brevemente. O mapeamento é estrutural — os kernels precisam saber quais query heads leem qual K/V head, e os checkpoints codificam os formatos das projeções (lembre da lição 4.2 que as projeções de K e V do Qwen produzem 1024 dimensões, 4 heads × 256, contra 12288 para Q — 6144 de queries interleaved por head com 6144 de gate).

A multi-head latent attention (MLA), introduzida com o DeepSeek-V2, abandona o eixo HkvH_{kv} por completo. Em vez de guardar keys e values por head, ela guarda em cache um vetor latente aprendido de baixa dimensão por token e reconstrói os componentes da attention por projeções, com tratamento desacoplado da parte posicional de RoPE. O tamanho do seu cache é definido pela dimensão latente, não por uma contagem de heads, e sua álgebra difere — o ponto de qualidade contra tamanho que ela alcança não está na linha MHA-GQA-MQA de forma alguma.

A implantação é o filtro final. Um cache menor só compensa quando kernels, quantização e layouts paralelos implementam a variante exata de forma eficiente; cair de volta em caminhos genéricos de attention pode apagar o ganho. Compare candidatos por bytes de cache por token, banda do decode, vazão sob concorrência realista e qualidade em contextos longos — um design de cache pequeno frequentemente vence no nível de sistema por admitir mais sequências concorrentes, um ganho que benchmarks de requisição única nunca enxergam.

O espectro, com o nosso espécime posicionado nele: o MHA dá a cada query head uma visão privada de K/V (24 KiB por token por camada, na geometria do Qwen). O GQA compartilha dentro de grupos — os 24-sobre-4 do Qwen3.8-27B compram um encolhimento de 6× e são metade da sua história de memória, ao lado do layout híbrido que limita o cache a 16 camadas em primeiro lugar. O MQA compartilha uma visão globalmente (1 KiB, 24×). O MLA recodifica o problema num cache latente. Cada um troca estado repetido por uma restrição estrutural mais forte — e os projetistas do Qwen, notavelmente, pegaram duas dessas economias de uma vez.

02 · Analogia

Analogia

Numa coletiva há muitos jornalistas fazendo perguntas especializadas. A multi-head attention padrão dá a cada jornalista um tradutor privado e uma transcrição privada. O MQA faz todos os jornalistas compartilharem um tradutor e uma transcrição. O GQA designa um tradutor para cada pequena bancada de jornalistas. O MLA guarda uma taquigrafia multilíngue compacta e reconstrói a informação de que cada bancada precisa. Compartilhar economiza espaço de transcrição, mas o desenho da comunicação precisa preservar distinções suficientes para uma boa reportagem.

03 · Explique de volta

Explique de volta

Usando os números do Qwen3.8-27B, quantifique o que o GQA economiza em relação a um MHA de mesma geometria e ao MQA, e explique por que o MLA não é apenas outro ponto no mesmo eixo.

Mínimo: 80 caracteres e 15 palavras. Seu texto fica somente neste navegador.

Aguardando sua explicação.

Comparar com uma resposta-modelo

O tamanho do cache escala com os KV heads. A lição 7.2 derivou 4 KiB por token por camada com cache para os 4 KV heads do Qwen com dimensão 256 em bf16. Um MHA de mesma geometria com 24 KV heads armazenaria 24 × 256 × 2 × 2 B = 24 KiB por token por camada — seis vezes mais, o que em contexto completo seriam 96 GiB por sequência em vez de 16 GiB. O MQA com um único KV head armazenaria 1 KiB por token por camada, um encolhimento adicional de 4× até cerca de 4 GiB, mas força todos os 24 query heads por uma única visão de K/V. O MLA sai desse eixo por completo: ele guarda em cache um latente aprendido de baixa dimensão por token e reconstrói keys e values por projeções, com tratamento especial dos componentes de RoPE, então o tamanho do seu cache depende da dimensão latente e sua álgebra difere de qualquer contagem de grupos.

04 · Teste seu entendimento

Teste seu entendimento

01Por token, o KV cache do Qwen3.8-27B somando suas 16 camadas com cache totaliza quanto (o número da lição 7.2)?
Resposta e explicação

64 KiB — 4 KiB por token por camada com cache × 16 camadas de full attention = 64 KiB por token; as 48 camadas de DeltaNet não fazem cache de nada por token.

02Comparado a um MHA de mesma geometria (24 KV heads), em que fator os 4 KV heads do Qwen3.8-27B encolhem o KV cache?
Resposta e explicação

— O tamanho do cache é proporcional à contagem de KV heads: 24 ÷ 4 = 6, então 24 KiB por token por camada viram 4 KiB.

Conclua o teach-back e acerte o quiz para finalizar a aula.

◎ · Marcador de evidência

Fontes

  1. Qwen Team (2026). Qwen3.8-27B Model Card.
  2. Joshua Ainslie et al. (2023). GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints.
  3. DeepSeek-AI (2024). DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model.