{"id":430,"date":"2026-09-05T22:27:01","date_gmt":"2026-09-06T01:27:01","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/como-deepseek-reescreveu-o-transformer-mla\/"},"modified":"2026-09-08T04:51:50","modified_gmt":"2026-09-08T07:51:50","slug":"como-deepseek-reescreveu-o-transformer-mla","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/como-deepseek-reescreveu-o-transformer-mla\/","title":{"rendered":"Como a DeepSeek reescreveu o Transformer"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro ajustando camada MLA no transformer\" src=\"\/wp-content\/uploads\/2026\/09\/deepseek-mla-v3.webp\" width=\"1052\" height=\"652\" \/><\/p>\n<p>Em janeiro de 2025 a <strong>DeepSeek<\/strong> soltou o R1 (e, semanas antes, o V3) competindo com o1 e GPT-4o em racioc\u00ednio \u2014 com uma fra\u00e7\u00e3o do custo de treino e de infer\u00eancia. Os pesos sa\u00edram abertos. O truque n\u00e3o \u00e9 um truque de dataset: \u00e9 uma reescrita do miolo do Transformer, o <strong>Multi-Head Latent Attention (MLA)<\/strong>, atacando o gargalo que trava GPU na hora de gerar texto: o <strong>KV cache<\/strong>. Este texto segue o v\u00eddeo <a href=\"https:\/\/www.youtube.com\/watch?v=0VLAoVGf_74\">How DeepSeek Rewrote the Transformer [MLA]<\/a>, do <strong>Stephen Welch<\/strong> (Welch Labs).<\/p>\n<p><!-- more --><\/p>\n<div style=\"position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin:1.5em 0\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/0VLAoVGf_74\" title=\"How DeepSeek Rewrote the Transformer [MLA] \u2014 Welch Labs\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen style=\"position:absolute;top:0;left:0;width:100%;height:100%;border:0\"><\/iframe>\n<\/div>\n<p>A conta de fundo \u00e9 a mesma do post <a href=\"\/2026\/09\/o-que-e-uma-rede-neural\/\">o que \u00e9 uma rede neural<\/a> e do <a href=\"\/2026\/09\/gpu-vs-tpu-como-funcionam-chips-ia\/\">GPU vs TPU<\/a>: MatMul. Aqui o problema \u00e9 <em>quantos bytes<\/em> essa MatMul precisa puxar da HBM a cada token novo.<\/p>\n<h2>Aten\u00e7\u00e3o cl\u00e1ssica e o custo do KV cache<\/h2>\n<p>O paper de 2017, <em>Attention Is All You Need<\/em>, projeta o embedding <code>X<\/code> em tr\u00eas matrizes:<\/p>\n<pre><code class=\"language-text\">Q = X W_Q     o que o token atual busca\nK = X W_K     o r\u00f3tulo que cada token oferece\nV = X W_V     o conte\u00fado que sai se houver match\n\nAttention(Q, K, V) = softmax( (Q K^T) \/ sqrt(d_k) + M ) V\n<\/code><\/pre>\n<p><code>Q K^T<\/code> mede afinidade. <code>M<\/code> \u00e9 a m\u00e1scara causal (n\u00e3o espiar o futuro). Multiplicar por <code>V<\/code> mistura o que importou.<\/p>\n<p>GPT-2 Small: 12 cabe\u00e7as \u00d7 12 camadas = 144 padr\u00f5es. DeepSeek-V3\/R1: <strong>128 cabe\u00e7as \u00d7 61 camadas = 7.808<\/strong>.<\/p>\n<p>A gera\u00e7\u00e3o \u00e9 autoregressiva: um token por vez, cola no prompt, roda de novo. Recalcular Q, K e V de todo o passado a cada passo seria O(N\u00b2) de conta. O atalho \u00e9 o <strong>KV cache<\/strong>: K e V dos tokens velhos n\u00e3o mudam. Guarda na VRAM. O token novo s\u00f3 calcula a linha nova de Q (e o K\/V dele) e busca no hist\u00f3rico.<\/p>\n<pre><code class=\"language-text\">tokens 1..t-1   K e V j\u00e1 prontos  \u2192  KV cache (HBM)\ntoken t         calcula Q_t       \u2192  l\u00ea o cache inteiro\n<\/code><\/pre>\n<p>A conta cai. A conta de <em>mem\u00f3ria<\/em> explode. No MHA:<\/p>\n<pre><code class=\"language-text\">KV cache = 2 \u00d7 n_tokens \u00d7 d_h \u00d7 n_heads \u00d7 L \u00d7 bytes\n\nV3\/R1, por token (FP16):\n  2 \u00d7 128 \u00d7 128 \u00d7 61 \u00d7 2 = 3.997.696 bytes   (~4 MB)\n<\/code><\/pre>\n<p>Janela de 100 mil tokens (um livro): ~<strong>400 GB<\/strong> lidos da HBM para emitir <em>uma<\/em> palavra. A GPU mais cara do mundo fica memory-bound \u2014 o mesmo muro do post das <a href=\"\/2026\/09\/como-funcionam-placas-de-video\/\">placas de v\u00eddeo<\/a>.<\/p>\n<h2>MQA e GQA: encolher o cache, pagar em qualidade<\/h2>\n<ul>\n<li><strong>MQA:<\/strong> as 128 cabe\u00e7as da camada compartilham <em>um<\/em> par K\/V. Cache \u00f7 128 (~31 KB\/token). As cabe\u00e7as perdem especializa\u00e7\u00e3o.<\/li>\n<li><strong>GQA<\/strong> (Llama 3): grupos \u2014 8 cabe\u00e7as, 1 K\/V. Cache \u00f7 8 (~500 KB\/token). Compromisso. Ainda n\u00e3o \u00e9 MHA.<\/li>\n<\/ul>\n<h2>MLA: comprimir o par, n\u00e3o as cabe\u00e7as<\/h2>\n<p>A pergunta da DeepSeek: e se K e V forem projetados num <strong>espa\u00e7o latente<\/strong> e a pr\u00f3pria rede aprender a comprimir\/descomprimir, em vez de for\u00e7ar as cabe\u00e7as a dividir a mesma chave?<\/p>\n<p>Vale registrar de onde vem a ideia, porque quase todo mundo credita ao R1: o MLA n\u00e3o estreou no V3. Ele aparece no paper do <strong>DeepSeek-V2<\/strong>, publicado em <strong>7 de maio de 2024<\/strong> \u2014 um MoE de 236 B de par\u00e2metros com 21 B ativados e 128 K de contexto. O resumo do paper j\u00e1 d\u00e1 o n\u00famero que interessa: contra o DeepSeek 67B denso, o V2 <strong>cortou 93,3% do KV cache<\/strong>, elevou a vaz\u00e3o m\u00e1xima de gera\u00e7\u00e3o a <strong>5,76\u00d7<\/strong> e ainda economizou 42,5% do custo de treino. O V3 e o R1 herdaram a pe\u00e7a pronta e a levaram para a escala de 671 B.<\/p>\n<pre><code class=\"language-text\">entrada h_t\n    \u2502\n    \u25bc\nc_t^{KV}   vetor latente  (512)\nk_t^R      chave RoPE     (64)\n    \u2502\n    \u2514\u2500 os dois v\u00e3o para o KV cache  \u2192  576 n\u00fameros\n         (~70 KB por token, 61 camadas, FP16)\n\nna infer\u00eancia as 128 cabe\u00e7as reconstroem K e V\na partir do latente \u2014 sem guardar 128 pares\n<\/code><\/pre>\n<p>O tamanho do cache deixa de depender de <code>n_heads<\/code>. S\u00f3 do latente (e do peda\u00e7o de RoPE que o paper desacopla, os 64). 576 \u00d7 61 \u00d7 2 bytes = 70.272 bytes \u2248 <strong>70 KB\/token<\/strong>. Redu\u00e7\u00e3o de ~<strong>57\u00d7<\/strong> contra o MHA de 4 MB.<\/p>\n<p>Descomprimir 128 cabe\u00e7as a cada token parecia conta extra. Associatividade da MatMul:<\/p>\n<pre><code class=\"language-text\">Q K^T = Q (c^{KV} W^{UK})^T\n      = (Q (W^{UK})^T) (c^{KV})^T\n<\/code><\/pre>\n<p><code>W^{UK}<\/code> e <code>W^{UV}<\/code> s\u00e3o fixos depois do treino. Absorvem na matriz de Q e na de sa\u00edda <code>W_O<\/code> <em>antes<\/em> de servir. Na infer\u00eancia a aten\u00e7\u00e3o opera <strong>direto no cache latente<\/strong> \u2014 sem a MatMul intermedi\u00e1ria a cada passo. \u00c9 o mesmo esp\u00edrito do arranjo sist\u00f3lico no post da TPU: n\u00e3o fique carregando o que pode ficar colado no peso.<\/p>\n<h2>Por token, lado a lado<\/h2>\n<table>\n<thead>\n<tr>\n<th>Arquitetura<\/th>\n<th>K\/V<\/th>\n<th>Cache\/token<\/th>\n<th>Fator<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>MHA<\/td>\n<td>par por cabe\u00e7a<\/td>\n<td>~4 MB<\/td>\n<td>1\u00d7<\/td>\n<\/tr>\n<tr>\n<td>GQA (Llama 3, grupos de 8)<\/td>\n<td>par por grupo<\/td>\n<td>~500 KB<\/td>\n<td>8\u00d7<\/td>\n<\/tr>\n<tr>\n<td>MQA<\/td>\n<td>1 par por camada<\/td>\n<td>~31 KB<\/td>\n<td>128\u00d7 (qualidade cai)<\/td>\n<\/tr>\n<tr>\n<td><strong>MLA (V3\/R1)<\/strong><\/td>\n<td>latente 576 + absor\u00e7\u00e3o<\/td>\n<td><strong>~70 KB<\/strong><\/td>\n<td><strong>57\u00d7<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Welch aponta gera\u00e7\u00e3o mais de 6\u00d7 mais r\u00e1pida no R1 contra um Transformer \u201ccheio\u201d no mesmo recorte de mem\u00f3ria: menos byte na HBM por milissegundo. Contexto 64k\u2013128k deixa de exigir um cluster s\u00f3 para o cache de v\u00e1rios usu\u00e1rios. Nos testes da DeepSeek o MLA n\u00e3o s\u00f3 empata o MHA \u2014 em v\u00e1rias tarefas passa, a compress\u00e3o latente funcionando como regulariza\u00e7\u00e3o.<\/p>\n<h2>Depois do MLA: esparso, e depois h\u00edbrido<\/h2>\n<p>O MLA resolveu o <em>tamanho<\/em> do cache. Sobrou o outro lado da conta: mesmo comprimido, a aten\u00e7\u00e3o continua olhando para <strong>todos<\/strong> os tokens anteriores a cada passo \u2014 custo quadr\u00e1tico no comprimento do contexto. A DeepSeek atacou isso em seguida.<\/p>\n<p>Em <strong>novembro de 2025<\/strong> saiu o <strong>DeepSeek-V3.2-Exp<\/strong>, com a <strong>DSA (DeepSeek Sparse Attention)<\/strong>. \u00c9 aten\u00e7\u00e3o esparsa de granularidade fina: um m\u00f3dulo <em>indexer<\/em> escolhe quais posi\u00e7\u00f5es do hist\u00f3rico realmente merecem ser lidas, e s\u00f3 essas entram na conta. O an\u00fancio promete ganho grande em treino e infer\u00eancia de contexto longo mantendo a qualidade da sa\u00edda praticamente id\u00eantica. O MLA n\u00e3o sai de cena \u2014 indexer e MLA convivem no mesmo modelo (a ponto de terem exigido corre\u00e7\u00e3o de layout do RoPE entre os dois m\u00f3dulos, o tipo de detalhe que s\u00f3 aparece quando as duas pe\u00e7as rodam juntas de verdade).<\/p>\n<p>Em <strong>26 de abril de 2026<\/strong> veio o paper do <strong>DeepSeek-V4<\/strong>, subtitulado <em>Towards Highly Efficient Million-Token Context Intelligence<\/em>. Dois MoE, ambos com <strong>1 milh\u00e3o de tokens de contexto<\/strong>:<\/p>\n<pre><code class=\"language-text\">DeepSeek-V4-Pro     1,6 T par\u00e2metros    49 B ativados\nDeepSeek-V4-Flash     284 B             13 B ativados\n<\/code><\/pre>\n<p>A aten\u00e7\u00e3o agora \u00e9 <strong>h\u00edbrida<\/strong>, com duas variantes esparsas trabalhando em conjunto: <strong>CSA<\/strong> (Compressed Sparse Attention) e <strong>HCA<\/strong> (Heavily Compressed Attention). Somam-se a isso as <em>Manifold-Constrained Hyper-Connections<\/em> (mHC) e o otimizador Muon no treino. As vers\u00f5es finais est\u00e3o no Hugging Face sob <strong>licen\u00e7a MIT<\/strong> \u2014 <code>DeepSeek-V4-Flash-0731<\/code> (julho de 2026), <code>DeepSeek-V4-Pro-0813<\/code> (agosto de 2026) e uma variante multimodal experimental, a <code>V4-Flash-Vision-Exp<\/code>. O padr\u00e3o se repete: peso aberto, paper aberto, e a briga travada na arquitetura em vez de no tamanho do cluster.<\/p>\n<h2>O que isso muda no Linux de verdade<\/h2>\n<p>Servir V3\/R1 local ainda pede VRAM de datacenter (671 B no total, 37 B ativos). O MLA \u00e9 o que torna a janela longa <em>cab\u00edvel<\/em>. Distro com llama.cpp\/vLLM recente j\u00e1 fala MLA; quantiza\u00e7\u00e3o GGUF e o fluxo do <a href=\"\/2026\/09\/llama-model-cli\/\">llama-model<\/a> ou do <a href=\"\/2026\/09\/rodando-ia-local-no-linux-com-ollama\/\">Ollama<\/a> cobrem os destilados. Quatro V100 de 16 GB no <a href=\"\/2026\/09\/servidor-ia-recondicionado-64gb-vram-v100-p100-mi25\/\">servidor recondicionado<\/a> n\u00e3o carregam o V3 cheio \u2014 carregam um 27B\/32B. O MLA \u00e9 o motivo de um 671 B aberto n\u00e3o implodir o cache no cluster de verdade.<\/p>\n<h2>Linha do tempo<\/h2>\n<ul>\n<li><strong>jun\/2017<\/strong> \u2014 <em>Attention Is All You Need<\/em> define o Transformer e, com ele, o problema do KV cache.<\/li>\n<li><strong>2019\u20132023<\/strong> \u2014 MQA e depois GQA encolhem o cache trocando qualidade por mem\u00f3ria; o GQA vira padr\u00e3o no Llama.<\/li>\n<li><strong>jul\/2023<\/strong> \u2014 a DeepSeek \u00e9 fundada em Hangzhou, sa\u00edda do fundo quantitativo High-Flyer.<\/li>\n<li><strong>07\/05\/2024<\/strong> \u2014 o paper do DeepSeek-V2 apresenta o <strong>MLA<\/strong>: 93,3% menos KV cache e 5,76\u00d7 de vaz\u00e3o contra o DeepSeek 67B.<\/li>\n<li><strong>dez\/2024<\/strong> \u2014 DeepSeek-V3, MoE de 671 B com 37 B ativados, herda o MLA e abre os pesos.<\/li>\n<li><strong>jan\/2025<\/strong> \u2014 o R1 chega ao n\u00edvel do o1 em racioc\u00ednio, com peso aberto, e vira assunto de mercado, n\u00e3o s\u00f3 de laborat\u00f3rio.<\/li>\n<li><strong>nov\/2025<\/strong> \u2014 DeepSeek-V3.2-Exp estreia a <strong>DSA<\/strong>, aten\u00e7\u00e3o esparsa de granularidade fina com m\u00f3dulo indexer.<\/li>\n<li><strong>26\/04\/2026<\/strong> \u2014 paper do <strong>DeepSeek-V4<\/strong>: aten\u00e7\u00e3o h\u00edbrida CSA + HCA, 1 milh\u00e3o de tokens de contexto, Pro com 1,6 T (49 B ativados) e Flash com 284 B (13 B ativados).<\/li>\n<li><strong>jul\u2013ago\/2026<\/strong> \u2014 saem as vers\u00f5es finais V4-Flash-0731 e V4-Pro-0813 no Hugging Face, sob licen\u00e7a MIT.<\/li>\n<\/ul>\n<h2>Refer\u00eancias<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=0VLAoVGf_74\">Welch Labs \u2014 How DeepSeek Rewrote the Transformer [MLA]<\/a><\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2412.19437\">DeepSeek-V3 Technical Report<\/a> (MLA \u00a72.1, latente + RoPE desacoplado)<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2405.04434\">DeepSeek-V2<\/a> \u2014 o paper que apresentou o MLA (maio de 2024)<\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/2606.19348\">DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence<\/a> (abril de 2026)<\/li>\n<li><a href=\"https:\/\/huggingface.co\/deepseek-ai\">deepseek-ai no Hugging Face<\/a> \u2014 pesos das s\u00e9ries V3 e V4<\/li>\n<li><a href=\"\/2026\/09\/o-que-e-uma-rede-neural\/\">O que \u00e9 uma rede neural?<\/a><\/li>\n<li><a href=\"\/2026\/09\/gpu-vs-tpu-como-funcionam-chips-ia\/\">GPU vs TPU<\/a><\/li>\n<li><a href=\"\/2026\/09\/como-funcionam-placas-de-video\/\">Como funcionam as placas de v\u00eddeo<\/a><\/li>\n<li><a href=\"\/2026\/09\/deep-learning-para-iniciantes\/\">Deep Learning para iniciantes<\/a><\/li>\n<li><a href=\"\/2026\/09\/rodando-ia-local-no-linux-com-ollama\/\">IA local no Linux com Ollama<\/a><\/li>\n<\/ul>\n<p>O R1 n\u00e3o nasceu de um cluster maior. Nasceu de n\u00e3o carregar 4 MB de K\/V por token quando 70 KB de latente, com a MatMul absorvida no peso, fazem o mesmo trabalho. O Transformer ainda tinha essa folga. A DeepSeek s\u00f3 fez a conta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em janeiro de 2025 a DeepSeek soltou o R1 (e, semanas antes, o V3) competindo com o1 e GPT-4o em racioc\u00ednio \u2014 com uma fra\u00e7\u00e3o do custo de treino e de infer\u00eancia. Os pesos sa\u00edram abertos. O truque n\u00e3o \u00e9 um truque de dataset: \u00e9 uma reescrita do miolo do Transformer, o Multi-Head Latent Attention &#8230; <a title=\"Como a DeepSeek reescreveu o Transformer\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/como-deepseek-reescreveu-o-transformer-mla\/\" aria-label=\"Read more about Como a DeepSeek reescreveu o Transformer\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[115,2],"tags":[161,173,116,128,174],"class_list":["post-430","post","type-post","status-publish","format-standard","hentry","category-ia","category-linux","tag-deep-learning","tag-deepseek","tag-ia","tag-llm","tag-transformer"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=430"}],"version-history":[{"count":3,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/430\/revisions"}],"predecessor-version":[{"id":1122,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/430\/revisions\/1122"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}