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" Sollicitatiegesprek 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 👇
98,93K