Opgewonden om nieuwe repo uit te brengen: nanochat! (het is een van de meest ongebreidelde die ik heb geschreven). In tegenstelling tot mijn eerdere vergelijkbare repo nanoGPT, die alleen pretraining behandelde, is nanochat een minimale, vanaf nul, full-stack training/inference pipeline van een eenvoudige ChatGPT-kloon in een enkele, afhankelijkheidsminimale codebase. Je start een cloud GPU-box op, draait een enkel script en binnen slechts 4 uur later kun je met je eigen LLM praten in een ChatGPT-achtige web UI. Het weegt ~8.000 regels imo vrij schone code om: - De tokenizer te trainen met een nieuwe Rust-implementatie - Een Transformer LLM voor te trainen op FineWeb, CORE-score te evalueren over een aantal metrics - Midtrain op gesprekken tussen gebruiker en assistent van SmolTalk, meerkeuzevragen, toolgebruik. - SFT, het chatmodel te evalueren op wereldkennis meerkeuze (ARC-E/C, MMLU), wiskunde (GSM8K), code (HumanEval) - RL het model optioneel op GSM8K met "GRPO" - Efficiënte inferentie van het model in een Engine met KV-cache, eenvoudige prefill/decode, toolgebruik (Python-interpreter in een lichte sandbox), erover praten via CLI of ChatGPT-achtige WebUI. - Een enkele markdown rapportkaart schrijven, die het geheel samenvat en gamificeert. Zelfs voor zo laag als ~$100 aan kosten (~4 uur op een 8XH100-node), kun je een kleine ChatGPT-kloon trainen waarmee je een soort van kunt praten, en die verhalen/gedichten kan schrijven, eenvoudige vragen kan beantwoorden. Ongeveer ~12 uur overschrijdt de GPT-2 CORE-metric. Naarmate je verder opschaalt naar ~$1000 (~41,6 uur training), wordt het snel veel coherenter en kan het eenvoudige wiskunde/codeproblemen oplossen en meerkeuzetests afleggen. Bijv. een diepte 30 model dat 24 uur is getraind (dit is ongeveer gelijk aan de FLOPs van GPT-3 Small 125M en 1/1000ste van GPT-3) komt in de 40s op MMLU en 70s op ARC-Easy, 20s op GSM8K, enz. Mijn doel is om de volledige "sterke baseline" stack in één samenhangende, minimale, leesbare, hackbare, maximaal forkbare repo te krijgen. nanochat zal het kroonproject zijn van LLM101n (dat nog steeds in ontwikkeling is). Ik denk dat het ook potentieel heeft om uit te groeien tot een onderzoeksframework, of een benchmark, vergelijkbaar met nanoGPT daarvoor. Het is geenszins af, afgestemd of geoptimaliseerd (eigenlijk denk ik dat er waarschijnlijk nog best veel laaghangend fruit is), maar ik denk dat het op een plek is waar het algemene skelet goed genoeg is dat het op GitHub kan worden geplaatst waar alle onderdelen ervan kunnen worden verbeterd. Link naar repo en een gedetailleerde walkthrough van de nanochat speedrun is in de reactie.
GitHub-repo: Een veel gedetailleerdere en technische walkthrough: Voorbeeldgesprek met de $100, 4-uur nanochat in de WebUI. Het is... vermakelijk :) Grotere modellen (bijv. een 12-uur diepte 26 of een 24-uur diepte 30) worden snel coherenter.
En een voorbeeld van enkele van de samenvattingsstatistieken die zijn geproduceerd door de $100 speedrun in het rapport om mee te beginnen. De huidige codebasis is iets meer dan 8000 regels, maar ik heb geprobeerd ze schoon en goed becommentarieerd te houden. Nu komt het leuke gedeelte - het afstemmen en het beklimmen van heuvels.
1,57M