Je bent in een sollicitatiegesprek voor Onderzoekswetenschapper bij OpenAI. De interviewer vraagt: "Hoe zou je de contextlengte van een LLM uitbreiden van 2K naar 128K tokens?" Jij: "Ik zal het model fijn-tunen op langere documenten met 128K context." Interview voorbij. Dit is wat je gemist hebt:
Het uitbreiden van de contextvenster gaat niet alleen om grotere matrices. In een traditionele transformer verhoogt het uitbreiden van tokens met 8x de geheugeneisen met 64x vanwege de kwadratische complexiteit van aandacht. Zie de afbeelding hieronder! Dus, hoe beheren we dit? ga door...👇
1) Spaarzame Aandacht Het beperkt de aandachtberekening tot een subset van tokens door: - Lokale aandacht te gebruiken (tokens letten alleen op hun buren). - Het model te laten leren op welke tokens het zich moet concentreren. Maar dit heeft een afweging tussen computationele complexiteit en prestaties.
Een vergelijkbaar idee werd gebruikt in ModernBERT. → Volledige globale aandacht elke 3e laag → Lokale aandacht (128 tokens) anders Resultaat: - 16x grotere sequentielengte - Veel betere prestaties - Meest geheugenefficiënte encoder Eenvoudig maar krachtig.
Hier is een intuïtieve uitleg uit het paper: Stel je voor dat je een boek leest. Voor elke zin die je leest, moet je dan volledig op de hoogte zijn van de hele verhaallijn om het meeste te begrijpen (volledige globale aandacht)? Of is het bewustzijn van het huidige hoofdstuk voldoende (lokale aandacht), zolang je af en toe terugdenkt aan de betekenis ervan voor de hoofdverhaallijn (globale aandacht)? In de overgrote meerderheid van de gevallen is het het laatste.
2) Flash Attention Dit is een snelle en geheugenefficiënte methode die de nauwkeurigheid van traditionele aandachtmechanismen behoudt, d.w.z. het gebruikt globale aandacht maar efficiënt. Het hele idee draait om het optimaliseren van de gegevensbeweging binnen het GPU-geheugen. Laten we het begrijpen!
Enkele achtergronddetails: - Een thread is de kleinste eenheid van uitvoering. - Meerdere threads vormen een block. Ook: - Threads in een block delen een snelle (maar schaarse) geheugen genaamd SRAM. - Alle blocks delen een globaal geheugen genaamd HBM (overvloedig maar traag). Bekijk dit 👇
Aandacht verplaatst grote matrices tussen SRAM en HBM: Om QK te berekenen: - verdeel matrices over threads - bereken, en - stuur het product naar HBM Om softmax te berekenen: - verdeel product over threads - bereken, en - stuur output naar HBM Herhaal voor alle lagen. Controleer dit 👇
Flash attention omvat hardware-niveau optimalisaties waarbij het SRAM gebruikt om de tussenresultaten op te slaan. Op deze manier vermindert het overbodige bewegingen, wat een versnelling tot 7,6x biedt ten opzichte van standaard aandachtmethoden. Bekijk dit 👇
3) DeepSeek Sparse Attention (DSA) DeepSeek’s nieuwe V3.2 model introduceert DeepSeek Sparse Attention (DSA), wat de complexiteit verlaagt van O(L²) naar O(Lk), waarbij k vast is. Hoe het werkt: Een lichte Lightning Indexer beoordeelt welke tokens daadwerkelijk belangrijk zijn voor elke query. Klein aantal heads, draait in FP8, computationeel goedkoop. Vervolgens haalt een selectiemechanisme alleen de top-k key-value entries op. De belangrijkste inzicht is dat slechts 2048 tokens per query worden geselecteerd, ongeacht de contextlengte. Dus de dure aandachtberekening gebeurt op deze kleine subset, niet de volledige 128K reeks.
Bij 128K context dalen de kosten voor pre-filling van ~$0,65 naar ~$0,35 per miljoen tokens. En decoderen daalt van ~$2,4 naar ~$0,8. En de prestaties blijven hetzelfde. Bij sommige benchmarks met lange contexten scoort V3.2 zelfs hoger. Sparce aandacht is niet nieuw. Maar het werkend krijgen zonder kwaliteitsverlies is moeilijk. Wat zijn enkele andere technieken om de contextlengtes van LLM's te vergroten?
229,12K