IA

    Multi-Head Latent Attention (MLA) e DeepSeekMoE: Compressão de KV Cache e Roteamento Esparso em Inferência

    Como a compressão de baixo posto do MLA, o RoPE desacoplado e os experts granulares do DeepSeekMoE reduzem o KV Cache em 98% e viabilizam inferência massiva.

    2026-08-2512 minEquipe MaxVision
    CLIP_001 · DJI O4FPV · 4K · 60FPS
    IA · 2026.08.25

    O consumo de memória do Key-Value (KV) Cache é o principal gargalo na inferência de LLMs. Em janelas longas, a memória para armazenar chaves e valores supera os próprios pesos do modelo.

    A arquitetura Multi-Head Latent Attention (MLA) redefine essa dinâmica. Ela reduz o footprint de memória por token em 98,2% em relação ao Multi-Head Attention (MHA) tradicional.

    Diferente do Grouped-Query Attention (GQA), o MLA não degrada a capacidade representacional. Ele preserva o espaço multidimensional de atenção com projeções de baixo posto e absorção matricial.

    A arquitetura estreou no DeepSeek-V2 e amadureceu no DeepSeek-V3. Ela permite ao DeepSeek-R1 operar 671B de parâmetros. O modelo ativa apenas 37B por token em motores como vLLM e SGLang.

    Console de telemetria de cluster de inferência em rack de alta densidade com conectores ópticos e indicador luminoso carmim

    O gargalo de memória do KV Cache na inferência autoregressiva

    A geração autoregressiva exige carregar todo o histórico de chaves e valores da memória HBM a cada novo token. Em janelas de 64k a 128k tokens, o KV Cache se torna o elemento mais custoso da GPU.

    Em regime de batch unitário, a GPU opera limitada pela largura de banda de memória (memory-bound). O acelerador gasta a maior parte do ciclo transferindo tensores entre a HBM e a SRAM.

    A fórmula exata para o tamanho do KV Cache por token em precisão FP16 (2 bytes por parâmetro) é:

    S_KV = 2 × 2 × n_kv × d_h × L bytes por token

    Na equação, n_kv é o número de cabeças de chave/valor. O termo d_h é a dimensão por cabeça e L é a quantidade de camadas.

    Considere um modelo MHA com 128 cabeças (n_kv = 128), dimensão d_h = 128 e 61 camadas (L = 61). O consumo por camada é:

    S_layer = 2 × 2 × 128 × 128 = 65.536 bytes = 64 KB por token

    Para as 61 camadas do modelo, o custo consolidado atinge:

    S_total = 61 × 64 KB = 3.904 KB por token ≈ 3,81 MB por token

    Uma sequência de 64.000 tokens demanda cerca de 244 GB de VRAM apenas para a tabela de atenção. Em servidores com múltiplas requisições paralelas, esse volume esgota rapidamente a capacidade do hardware.


    Por que o GQA degrada a capacidade representacional?

    O Grouped-Query Attention (GQA) reduz a memória ao forçar múltiplas queries a compartilhar o mesmo conjunto de chaves e valores. No entanto, esse compartilhamento rígido prejudica a precisão do modelo em contextos longos.

    Em testes como Needle In A Haystack e raciocínio multi-hop, aspectos semânticos distintos acabam forçados a convergir para as mesmas representações agrupadas.

    Modelos como LLaMA 3 utilizam GQA com 8 grupos de chave/valor para mitigar a alocação de memória. Contudo, essa compressão impõe limites à capacidade do modelo de reter relações cruzadas finas.

    Mecanismo de AtençãoCabeças de KV (n_kv)Dimensão EfetivaConsumo por Token (61 Camadas, FP16)VRAM para 64k Tokens (1 Stream)
    Multi-Head Attention (MHA)128 cabeças16.384 dimensões3.904 KB244,0 GB
    Grouped-Query Attention (GQA, 8 grupos)8 cabeças1.024 dimensões244,0 KB15,25 GB
    Multi-Query Attention (MQA)1 cabeça128 dimensões30,5 KB1,91 GB
    Multi-Head Latent Attention (MLA)Latente comprimido576 elementos68,63 KB4,29 GB
    MLA em Precisão FP8Latente comprimido576 elementos (1 byte)34,31 KB2,14 GB

    O MLA supera essa restrição. Ele entrega uma compressão superior à do GQA mantendo a riqueza expressiva de um MHA de 128 cabeças completas.

    Módulo de processamento de hardware aberto em bancada de testes de engenharia com conector de diagnóstico carmim iluminado

    A mecânica matemática do Multi-Head Latent Attention

    O MLA comprime chaves e valores em um espaço latente de baixo posto (low-rank joint compression). O vetor de ativação h_t é comprimido em um vetor latente c_t^{KV} antes de ser gravado na memória.

    A projeção descendente ocorre conforme a expressão:

    c_t^{KV} = W^{DKV} × h_t

    A matriz W^{DKV} projeta a ativação para uma dimensão compacta d_c = 512. Isso substitui as 16.384 dimensões exigidas por 128 cabeças convencionais.

    As matrizes de conteúdo para cada cabeça i são calculadas por projeções ascendentes:

    k_{t,i}^C = W^{UK}_i × c_t^{KV}, \quad v_{t,i}^C = W^{UV}_i × c_t^{KV}

    Para viabilizar a fusão matricial na inferência, o MLA adota o Decoupled RoPE. Uma chave posicional dedicada k_t^R de 64 dimensões recebe o Rotary Embedding de maneira isolada:

    k_t^R = RoPE(W^{KR} × h_t)

    A query também é decomposta em parte de conteúdo e parte posicional:

    q_{t,i}^C = W^{UQ}_i × c_t^Q, \quad q_{t,i}^R = RoPE(W^{QR}_i × c_t^Q)

    Apenas o vetor latente c_t^{KV} (512 floats) e a chave posicional k_t^R (64 floats) são salvos no cache. O total por camada é de apenas 576 elementos.

    Em precisão FP16, isso equivale a 1.152 bytes por token por camada. No modelo de 61 camadas, o consumo totaliza 68,63 KB por token.


    Absorção matricial de pesos durante a geração de tokens

    Durante a decodificação autoregressiva, o runtime não descompacta as chaves na memória HBM. O cálculo de atenção funde a matriz de projeção ascendente W^{UK}_i diretamente na query do token atual.

    A pontuação de atenção combina as parcelas de conteúdo e posição:

    Score_content = (q_{t,i}^C)^T × (W^{UK}_i × c_j^{KV})

    Score_rope = (q_{t,i}^R)^T × k_j^R

    Score_total = (Score_content + Score_rope) ÷ √(d_h + d_h^R)

    Pela associatividade matricial, reorganiza-se o termo de conteúdo:

    (q_{t,i}^C)^T × (W^{UK}_i × c_j^{KV}) = ((W^{UK}_i)^T × q_{t,i}^C)^T × c_j^{KV}

    Define-se a query absorvida no espaço latente:

    q_{t,i}^{absorbed} = (W^{UK}_i)^T × q_{t,i}^C

    # Execução do Kernel MLA com absorção matricial no vLLM
    import torch
    
    def mla_decode_step(q_content, q_rope, kv_cache_latent, kv_cache_rope, W_uk, W_uv, scale):
        # 1. Absorve os pesos da chave na query do token atual na SRAM
        q_absorbed = torch.einsum("bhd,hdl->bhl", q_content, W_uk)
        
        # 2. Produto escalar diretamente contra o cache latente comprimido da HBM
        scores_content = torch.einsum("bhl,bsl->bhs", q_absorbed, kv_cache_latent)
        scores_rope = torch.einsum("bhd,bsd->bhs", q_rope, kv_cache_rope)
        
        attn_weights = torch.softmax((scores_content + scores_rope) * scale, dim=-1)
        
        # 3. Agregação no espaço latente antes da projeção final de valores
        latent_out = torch.einsum("bhs,bsl->bhl", attn_weights, kv_cache_latent)
        output = torch.einsum("bhl,hdl->bhd", latent_out, W_uv)
        
        return output
    

    O vetor q_{t,i}^{absorbed} é processado nos registradores locais da GPU para o token ativo. O loop de atenção lê unicamente o vetor comprimido c_j^{KV} da HBM.

    Da mesma forma, a projeção de valores W^{UV}_i é aplicada apenas uma vez na saída condensada. Essa etapa elimina a necessidade de carregar matrizes intermediárias completas.


    DeepSeekMoE: granularidade fina e balanceamento dinâmico sem perda auxiliar

    O DeepSeekMoE expande a especialização particionando a camada Feed-Forward em experts granulares. No DeepSeek-V3, a arquitetura adota 256 routed experts e 1 shared expert fixo, ativando 8 routed experts por token.

    O shared expert processa todos os tokens incondicionalmente. Ele absorve padrões gerais da linguagem, permitindo que os routed experts se concentrem em raciocínio especializado.

    Essa divisão estrutural reduz a sobreposição funcional entre experts. Cada sub-rede roteada desenvolve competências refinadas em lógica formal, programação ou tradução técnica.

    [Token Input h_t]
           │
           ├───► [Shared Expert Fixo (Conhecimento Geral)] ──────────┐
           │                                                         │
           └───► [Roteador Top-8 com Bias Adaptativo b_i]            │
                       │                                             │
                       ├──► [Routed Expert 014 (Lógica)] ────────────┼──► [Soma Ponderada] ──► Output
                       ├──► [Routed Expert 089 (Código)] ────────────┤
                       └──► [Routed Expert 201 (Causal)] ────────────┘
    

    Para manter o cluster equilibrado sem degradar a capacidade do modelo, o DeepSeekMoE utiliza o Auxiliary-Loss-Free Load Balancing:

    • Roteamento com Bias: O roteador calcula as afinidades com um viés aditivo: s_{i,t} = Softmax(TopK(h_t^T × e_i + b_i)).
    • Ajuste Dinâmico: Um controlador proporcional ajusta b_i a cada passo com base na carga observada dos experts.
    • Gradiente Puro: O termo b_i atua no despacho e não injeta gradientes nos pesos, preservando o objetivo de treino original.

    Esse mecanismo atinge mais de 99% de equilíbrio de carga computacional entre os nós do cluster. Ele evita tanto o estrangulamento de nós quanto o colapso de rotas.

    Painel de controle industrial de datacenter com matriz de indicadores de status e conector central com anel carmim iluminado

    Multi-Token Prediction e pipeline DualPipe em escala

    O DeepSeek-V3 incorpora o método de Multi-Token Prediction (MTP). A arquitetura treina módulos encadeados para prever dois ou mais tokens futuros simultaneamente a cada passo.

    Durante o pré-treinamento, o MTP reforça o sinal de supervisão densa. Ele obriga as camadas profundas a planejar dependências contextuais com maior antecedência sintática.

    Em motores como vLLM e SGLang, o MTP opera como decodificação especulativa nativa. A engine também se integra ao TensorRT-LLM para execução em clusters. O sistema emite múltiplos tokens candidatos em um único ciclo de inferência.

    Para viabilizar treinamento e inferência em precisão mista FP8 com eficiência máxima, o framework introduz o pipeline DualPipe. Ele sobrepõe computação e comunicação entre forward e backward passes.

    A tabela a seguir consolida as especificações operacionais de inferência em clusters modernos:

    Parâmetro de SistemaMHA PadrãoGQA ConvencionalMLA com DeepSeekMoE
    Formato de CacheDescompactado (FP16)Agrupado (FP16)Vetor Latente (FP16 / FP8)
    Overhead de KV (128k tokens)~488 GB / stream~30,5 GB / stream~8,58 GB / stream
    Throughput em Batch MassivoBaixo (Memory-Bound)ModeradoElevado (Compute Saturado)
    Compatibilidade de EngineUniversalUniversalvLLM v0.6+, SGLang, TensorRT-LLM
    Gating de ExpertsNão aplicávelNão aplicável256 Routed + 1 Shared (Top-8)

    A combinação de MLA, balanceamento sem perda auxiliar e quantização nativa em FP8 consolida um padrão eficiente para sistemas inteligentes de larga escala.


    Perguntas Frequentes sobre MLA e DeepSeekMoE

    Qual é a diferença fundamental entre GQA e MLA?

    O GQA compartilha chaves e valores entre queries, reduzindo a capacidade do modelo em contextos longos. O MLA projeta chaves e valores para um vetor latente compacto, mantendo a expressividade do MHA com menor consumo de memória.

    O que é Decoupled RoPE e por que ele é necessário no MLA?

    O Decoupled RoPE isola os dados posicionais do conteúdo semântico. Sem esse desacoplamento, a rotação posicional impediria a fusão matricial na query, forçando a descompactação do cache na memória HBM.

    Como o Auxiliary-Loss-Free Load Balancing evita o colapso de experts?

    Ele utiliza um bias aditivo dinâmico para distribuir tokens entre aceleradores. Isso equilibra a carga computacional sem distorcer os gradientes dos pesos nem prejudicar o aprendizado da rede.

    É possível rodar modelos com arquitetura MLA localmente no vLLM?

    Sim. O vLLM (a partir da versão 0.6) e o SGLang possuem suporte nativo a kernels fundidos de MLA, permitindo inferência otimizada de modelos DeepSeek com memória paginada.

    TAGS
    • IA
    • DeepSeek
    • Arquitetura de Software
    • LLM
    • Sistemas Distribuídos
    • Open Source
    • vLLM
    Mascote da MaxVision para contato rápido no WhatsAppFale agora pelo WhatsApp