La atenția multi-head (MHA), cache-ul KV crește cu numărul de capete, dimensiunea lor, numărul de straturi și lungimea contextului. Multi-head Latent Attention (MLA), introdusă în DeepSeek-V2 (arXiv 2405.04434), comprimă cheile și valorile într-un vector latent comun de dimensiune mică (compresie de rang mic). La inferență se păstrează în cache doar acest vector și o cheie decuplată mică pentru RoPE, adică (d_c + d_hR) × l elemente pe token. Matricele de proiecție inversă pot fi absorbite în proiecțiile de interogare și de ieșire, deci cheile și valorile nu mai trebuie calculate explicit. Raportul V2 spune că MLA are un cache cât GQA cu 2,25 grupuri, cu performanță mai bună decât MHA, iar DeepSeek-V2 reduce cache-ul KV cu 93,3% față de DeepSeek 67B.
DeepSeekMoE împarte stratul feed-forward în experți mici și izolează experți partajați, folosiți de toate tokenurile. În DeepSeek-V3 (arXiv 2412.19437), toate straturile în afară de primele trei sunt MoE, cu 1 expert partajat și 256 de experți rutați, din care 8 sunt activați pe token; un token ajunge la cel mult 4 noduri. Echilibrarea încărcării se face în principal fără pierdere auxiliară: fiecare expert are un bias adăugat la scorul de rutare, ajustat dinamic în antrenare și folosit doar la alegerea experților; rămâne o pierdere auxiliară mică la nivel de secvență, contra dezechilibrelor extreme. Rezultatul este un model de 671B parametri, cu 37B activi pe token și context de 128K. V3 adaugă obiectivul Multi-Token Prediction (MTP), folosibil și la speculative decoding.
Generațiile noi au schimbat atenția. DeepSeek-V3.2 păstrează MLA și configurația MoE din V3 (conform config.json) și adaugă DeepSeek Sparse Attention (DSA). DeepSeek-V4 (aprilie 2026; V4-Pro 1,6T / 49B activi, V4-Flash 284B / 13B activi, context 1M) folosește o atenție hibridă Compressed Sparse Attention + Heavily Compressed Attention; la 1M tokeni, V4-Pro are nevoie de 10% din cache-ul KV al lui V3.2. DeepSeek-V4.1-Flash (septembrie 2026; 552B parametri în rețeaua principală, 8B activi la prefill și 16B la decodare, 1 expert partajat + 384 rutați, 6 activi) ajunge, potrivit fișei modelului, la 890 de octeți de cache KV global pe token, aproximativ un sfert din V4-Flash.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
Multi-head Latent Attention (MLA) |
Compresie comună KV de rang mic; în cache rămân doar vectorul latent și cheia RoPE decuplată. |
kv_lora_rank = 512, qk_rope_head_dim = 64 |
Dimensiunile d_c și d_hR din config.json al DeepSeek-V3, pe 61 de straturi. |
DeepSeekMoE |
Experți de granularitate fină plus experți partajați izolați. |
671B total / 37B activi (V3, R1) |
Toți parametrii trebuie încărcați în memorie; doar calculul pe token folosește 37B. |
Echilibrare fără pierdere auxiliară |
Bias pe expert, ajustat dinamic, folosit doar la alegerea top-K; completat de o pierdere mică pe secvență. |
Multi-Token Prediction (MTP) |
Obiectiv de antrenare care prezice și tokenurile următoare; modulul MTP se poate folosi la speculative decoding. |
DSA / CSA + HCA / CSA2 |
Atenția rară din V3.2, atenția hibridă din V4 și varianta ei din V4.1-Flash. |
Exemple practice și scenarii reale
Exemplul 1: Cache-ul KV al MLA în DeepSeek-V3, calculat din config.json
Formula vine din tabelul 1 al raportului DeepSeek-V2. Calculul presupune BF16 și ignoră formatul real din motorul de inferență (de exemplu cache FP8) și memoria suplimentară.
# Valori din config.json (deepseek-ai/DeepSeek-V3)
kv_lora_rank = 512 # d_c, dimensiunea vectorului latent
qk_rope_head_dim = 64 # d_hR, cheia decuplată pentru RoPE
num_hidden_layers = 61 # l
elemente_pe_token = (kv_lora_rank + qk_rope_head_dim) * num_hidden_layers
octeti_pe_token = elemente_pe_token * 2 # BF16: 2 octeți pe element
context = 128 * 1024
print(elemente_pe_token) # 35136
print(octeti_pe_token * context / 2**30) # 8.578125 (GiB la 128K tokeni)
Exemplul 2: Comparația MHA / MLA din raportul DeepSeek-V2
Tabelul 9 al raportului: modele MoE de test antrenate o dată cu MHA și o dată cu MLA.
Cache KV pe token (elemente) MHA MLA
MoE mic (~16B parametri) 110,6K 15,6K
MoE mare (~250B parametri) 860,2K 34,6K
Exemplul 3: Configurația MoE citită direct de pe Hugging Face
import json
from huggingface_hub import hf_hub_download
cfg = json.load(open(hf_hub_download("deepseek-ai/DeepSeek-V3", "config.json")))
print(cfg["n_routed_experts"], cfg["n_shared_experts"], cfg["num_experts_per_tok"]) # 256 1 8
print(cfg["first_k_dense_replace"], cfg["topk_method"]) # 3 noaux_tc
Greșeli frecvente și capcane
- Confunzi parametrii activi cu memoria necesară. Pentru inferență trebuie încărcați toți cei 671B; în Ollama,
deepseek-r1:671bare 404 GB chiar și cuantizat q4_K_M. - Preiei cifre de cache KV fără sursă. Calculează-le din formula raportului V2 și din config.json; rezultatul depinde de precizia cache-ului folosită de motor.
- Aplici explicațiile MLA din V2 / V3 la V4. Fișa DeepSeek-V4 descrie un mecanism nou (CSA + HCA), iar V4.1-Flash o arhitectură encoder-decoder cauzală cu CSA2.