Ești într-un interviu de cercetător la OpenAI. Intervievatorul întreabă: "Cum ai extinde lungimea contextului unui LLM de la 2K la 128K tokenuri?" Tu: "Voi ajusta modelul pe documente mai lungi cu context de 128K." Interviul s-a încheiat. Iată ce ai ratat:
Extinderea ferestrei de context nu este doar despre matrice mai mari. Într-un transformator tradițional, extinderea jetoanelor de 8 ori crește nevoile de memorie de 64 de ori datorită complexității pătratice a atenției. Consultați imaginea de mai jos! Deci, cum o gestionăm? continua... 👇
1) Atenție redusă Limitează calculul atenției la un subset de jetoane prin: - Utilizarea atenției locale (jetoanele se ocupă doar de vecinii lor). - Lăsând modelul să învețe pe ce jetoane să se concentreze. Dar acest lucru are un compromis între complexitatea computațională și performanță.
O idee similară a fost folosită în ModernBERT. → Atenție globală completă la fiecare al treilea strat → Atenție locală (128 tokens) altfel Rezultat: - Lungimea secvenței de 16 ori mai mare - Performanțe mult mai bune - Cel mai eficient codificator din punct de vedere al memoriei Simplu, dar puternic.
Iată o explicație intuitivă preluată din lucrare: Imaginează-ți că citești o carte. Pentru fiecare propoziție pe care o citiți, trebuie să fiți pe deplin conștienți de întreaga intrigă pentru a înțelege cea mai mare parte a acesteia (atenție globală completă)? Sau este suficientă conștientizarea capitolului curent (atenție locală), atâta timp cât te gândești ocazional la semnificația sa pentru intriga principală (atenția globală)? În marea majoritate a cazurilor, este cea de-a doua.
2) Atenție fulgerătoare Aceasta este o metodă rapidă și eficientă din punct de vedere al memoriei, care păstrează exactitatea mecanismelor tradiționale de atenție, adică folosește atenția globală, dar eficient. Întreaga idee se învârte în jurul optimizării mișcării datelor în memoria GPU. Să înțelegem!
Câteva detalii de fundal: - Un fir este cea mai mică unitate de execuție. - Mai multe fire formează un bloc. Și: - Firele dintr-un bloc împărtășesc o memorie rapidă (dar rară) numită SRAM. - Toate blocurile împărtășesc o memorie globală numită HBM (abundentă, dar lentă). Verificați acest lucru 👇
Atenția mută matricele mari între SRAM și HBM: Pentru a calcula QK: - distribuie matrice pe fire - calculează, și - trimite produsul la HBM Pentru a calcula softmax: - distribuie produsul pe fire - calculează, și - trimite ieșire la HBM Repetați pentru toate straturile. Verificați acest lucru 👇
Atenția flash implică optimizări la nivel hardware în care utilizează SRAM pentru a memora în cache rezultatele intermediare. În acest fel, reduce mișcările redundante, oferind o viteză de până la 7,6x față de metodele standard de atenție. Verificați acest lucru 👇
3) DeepSeek Atenție Rară (DSA) Noul model V3.2 al DeepSeek introduce DeepSeek Sparse Attention (DSA), care reduce complexitatea de la O(L²) la O(Lk), unde k este fix. Cum funcționează: Un Lightning Indexer ușor evaluează ce tokenuri contează cu adevărat pentru fiecare interogare. Număr mic de capete, rulează în FP8, este ieftin din punct de vedere computațional. Apoi, un mecanism de selecție recuperează doar primele k intrări cheie-valoare. Ideea cheie este că doar 2048 de tokenuri sunt selectate pe interogare, indiferent de lungimea contextului. Așadar, calculul scump al atenției are loc pe acest subset mic, nu pe întreaga secvență de 128K.
La un context de 128K, costurile de preumplere scad de la ~0,65 la ~0,35 dolari pe milion de tokenuri. Iar Decodarea scade de la ~$2,4 la ~$0,8. Și performanța rămâne aceeași. Pe unele benchmark-uri cu context lung, versiunea 3.2 obține de fapt scoruri mai mari. Atenția slabă nu este ceva nou. Dar să faci să funcționeze fără să pierzi calitatea este greu. Care sunt alte tehnici pentru a mări lungimea contextului LLM-urilor?
152,61K