Mijn aantekeningen over nanochat, inclusief links naar de trainingsdata die het gebruikt
Andrej Karpathy
Andrej Karpathy13 okt, 23:16
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.
Sam Dobson heeft een build van het model naar Hugging Face gepusht - het heeft CUDA nodig om te draaien, maar ik heb Claude Code een tijdje ermee laten rommelen en hij heeft een script voor me gebouwd om het op de macOS CPU te draaien, details hier:
131,53K