Dit achtergrond artikel is onderdeel van de longread over het finetunen van modellen.
<Terug naar overzicht Artikelen:
🔧 Deel 2: Praktische stap voor stap guide
Achtergrond:
🤖 LLM’s lokaal draaien - 2 simpele methodes
🛣️ LLM’s lokaal draaien - De weg naar ondevice LLM’s
💻 LLM’s lokaal draaien - Je systeem in relatie tot de modelspecificaties
⚖️ Wat is lora?
Groter = Beter
lange tijd was het adagium binnen de wereld van AI modellen “Hoe groter, hoe beter”. Het bleek zo te zijn dat door simpelweg meer resources te geven aan de modellen, dat ze op veel verschillende taken beter gingen presteren. Die schaal voordelen golden voor verschillende factoren van de LLM ontwikkeling:
- de trainingsdataset
- de gealloceerde rekencapaciteit tijdens training
- de grootte van het model zelf
Een bekend onderzoek door OpenAI uit 2020 laat de relatie tussen de groei van deze factoren en het loss verlies zien. Een paar van de conclusies:
-Elk van de drie factoren dient geschaald te worden voor een optimale verbetering van de prestaties van het model. het opschalen van slechts 1 van de 3 factoren draagt relatief minder bij.
-Om “overfitting” te voorkomen kun je niet alleen de modelgrootte verhogen en de datagrootte niet; echter toont het onderzoek aan dat naarmate beide factore groeien de datagrootte minder hard hoeft “mee te groeien” met het model voor de optimale verbetering in loss verlies.
Een ander onderzoek van Google toont ook een positieve relatie tussen de modelprestaties en de grootte. In dit onderzoek trainde Google een model PaLM, van maarliefst 540 miljard parameters:
”A significant number of BIG-bench tasks showed discontinuous improvements from model scale, meaning that performance steeply increased as we scaled to our largest model.”
Dit soort research heeft de afgelopen jaren geresulteerd in een enorme behoefte aan compute, wat je bijvoorbeeld terug ziet in de NVidia koers:
..Maar groter is ook onhandiger
De hierboven genoemde schaalvoordelen zijn een gegeven, daar veranderen we weinig aan. En de aller-intelligentste state of the art modellen zullen vermoedelijk nog wel even blijven opschalen in grootte en rekenkracht. Toch zijn er ook een heleboel makkelijk te bedenken nadelen aan deze modellen. Ten eerste natuurlijk dat je enorme hoeveelheden GPU’s en LPU’s nodig hebt om ze te kunnen gebruiken. Daarin kunnen enkel een handjevol bedrijven voorzien. Bedrijven die vaak ook al een voorsprong hebben qua toegang tot data. Mozilla publiceerde enkele dagen geleden het rapport “Stopping big tech from becoming big AI”, waarin helder wordt uitgelegd hoe dit de competitie en gezonde concurrentie tussen meerdere bedrijven tegenhoudt:
“The sheer cost of training and hosting large-scale AI models on servers makes it nearly impossible for independent AI startups to survive without some kind of external sponsor. Thus, having a viable business model requires either securing a large capital buffer and/or striking a bespoke deal with a large cloud provider, often provided by the same firm. The role of these deals in weakening competition in AI is explored further in the next section.” Het hele rapport is hier te lezen.
Los van de concurrentiepositie komen de grote hoeveelheden rekenkracht natuurlijk ook met grote hoeveelheden energieverbruik. Nog niet zo lang geleden kwam Microsoft in het nieuws met het feit dat ze een oude kerncentrale weer wouden openen specifiek om hun datacenters van stroom te voorzien, wat de energiebehoefte van AI goed illustreert.
En dan zijn er ook nog nadelen in termen van gebruikerservaring; een kleiner model kan bijvoorbeeld een stuk sneller reageren op vragen dan een groter model. Ook kan een groter model natuurlijk nooit lokaal draaien, wat sommigen zorgen geeft om hun privacy e dus ook zorgt dat je nooit je LLM kunt raadplegen zonder internet.
Recente verbeteringen in prestaties van kleine modellen
In oktober 2023 kondigde Qualcomm op haar jaarlijkse summit de Snapdragon 8 Gen 3 aan. Een groot deel van die presentatie werd besteed aan het demo-en van on-device AI systemen. Het idee van een lokale LLM op je telefoon is verleidelijk. Potentieel hebben we daarmee een sleutel in handen voor allerlei innovaties.
Phi
Er is het afgelopen jaar dan ook veel research gedaan naar methodes om kleine modellen ondanks hun limitaties goede output te laten genereren. Limitaties prikkelen de creativiteit, en er zijn allerlei leuke onderzoeken om in dit kader te noemen. De Phi modellen van Microsoft zijn misschien wel het beste voorbeeld van hoever we zijn gekomen met onze pogingen tot nu toe. Deze modellen presteren verrassend goed op heel veel benchmarks, ondanks een relatief zeer gering aantal parameters. Microsoft heeft dit weten te realiseren door aan 2 belangrijke knoppen te draaien:
- de datakwaliteit - veel meer dan bij andere modellen die enorm grote hoeveelheden data hebben gebruikt in hun training, is Phi getraind op veel preciezer gecureerde data van hoge kwaliteit. Door alleen deze data te gebruiken kon Phi goed meekomen met modellen met meer parameters.
- de trainingsmethode - In plaats van het leren van 0 af aan op een enorme dataset, heeft Microsoft er bij Phi voor gekozen om te beginnen met trainen van een veel kleiner model met de veel preciezer gecureerde data. Bij elke volgende stap heeft het model daardoor al een bepaalde "basiskennis", die helpt bij het verwerken van elke nieuwe batch. De voordelen van deze aanpak zijn tweeledig. Allereerst is het een efficiëntere methode om te trainen; omdat het model sneller bepaalde basiskennis heeft met de training op de kleinere dataset. Ook verbetert de overall output na de vollledige training. Dit komt doordat het model beter instaat is bepaalde kernconcepten te generaliseren.
Knowledge Distillation
Een andere recente gave techniek is Knoledge Distillation. Bij deze techniek wordt een groter model (een “Teacher”) gebruikt om een kleiner model (een “student”) te trainen. De methode werkt heel hoog over door het grotere vooraf getrainde teacher model voorspellingen te laten doen of antwoorden te laten genereren. Het Student Model wordt getraind om het grotere model te imiteren. Het grote voordeel van deze aanpak, in plaats van het direct trainen op de data waar het grotere model op getraind was, is dat het student model bij het direct trainen op data alleen het juiste antwoord ziet, terwijl bij knoledge distillation niet alleen het juiste antwoord wordt gebruikt om van te leren, maar ook alle waarschijnlijkheidspercentages van andere antwoorden die het grotere model had overwogen, deze “onjuiste” maar waarschijnlijke antwoorden worden “soft labels” genoemd.
Quantization
Een laatste zeer waardevolle methode om modellen te verkleinen is quantization. Deze methode is al wat ouder en grijpt terug op de kern van hoe de parameter informatie van het model opgeslagen is. Bij de meeste modellen wordt hierbij gekozen voor een 32 (FP32
) bits notatie. Dat betekent dat we per gewicht van ons model 32 nullen en enen gebruiken om het getal binair te noteren. Bij quantization converteren we al deze geregistreerde gewichten van het model naar een kleinere bits notatie, bijvoorbeeld 8 bits (INT8
) notatie.
Je kunt je wel voorstellen dat je wanneer je 32 bits mag gebruiken om een getal uit te drukken, dit getal preciezer kunt uitdrukken dan wanneer je maar 8 bits hebt. Je zult voor deze conversie moeten afronden, waarbij precisie verloren gaat. Tegelijkertijd blijven al deze afrondingsfouten binnen een bepaalde marge en zullen grofweg de onderlinge verhoudingen relatief gelijkwaardig blijven aan de oorspronkelijke situatie. Je kunt je ook wel voorstellen dat de totale ruimte die je model op je computer of in je RAM in beslag neemt, wanneer je voor alle van de x miljard gewichten 3 kwart minder bits gebruikt (32-8). Kort gezegd lever je bij quantization dus precisie in om een compacter model te krijgen. En omdat blijkt dat heel veel modellen een veel preciezere notatie hanteren dan redelijkerwijs noodzakelijk is*, is die tradeoff de moeite heel vaak wel waard.
Ik vroeg me tijdens het lezen over quantization nog af waarom er niet direct al van de kleinere notatie gebruik gemaakt wordt bij het trainen van de LLM, maar dat blijkt wel een negatieve impact op het eindresultaat te hebben. Achteraf ook wel logisch; door dat er in rondes getraind wordt tellen de afrondingsfoutjes op.
Wat het bovenstaande wat mij betreft vooral schetst is dat we er met slimme trucs steeds beter in slagen om de informatie van een AI model efficiënter op te slaan, waardoor ook veel kleinere modellen inmiddels nuttige toepassingen hebben. Het blijft natuurlijk wel zo dat de extra precisie en gewichten van grote modellen een positieve rol spelen in de output kwaliteit. Soms hebben we echter voldoende aan de kleinere modellen.
Prestaties verbeteren met finetunen
Als we zo’n kleiner model gebruiken is het extra belangrijk dat we deze zo precies mogelijk hebben afgestemd voor de taak waarvoor we het model gebruiken. Dit is waar finetuning een belangrijke taak kan vervullen.
De basis LLM’s die we lokaal kunnen gebruiken, zoals Phi, Lama, Mistral etc. zijn namelijk getraind als generalisten, ze moeten heel veel gebruikers bij heel veel van hun taken redelijk goed kunnen helpen. Maar wij zijn maar 1 gebruiker, met maar een paar taken voor de LLM. Soms zijn er al bepaalde dingen waar de modellen die we hebben gedownload voor geoptimaliseerd zijn, zoals coderen, maar ook in die gevallen kunnen we vast nog specifieker maken voor welk doeleinde wij van plan zijn het model in te zetten.
Door het model met finetuning van een generalist te veranderen in een specialist, zijn we in staat om de output kwaliteit van het model te maximaliseren voor ons doel.