bootgpt: 11,5 KB int8-modell kjører fra oppstartssektoren og dikter opp en Linux-bootlogg
søndag 1. november · KI-generert · Kilde: GitHub
Kjør bootgpt i QEMU og se et nevralt nett på 11 296 parametere dikte opp en Linux-bootlogg uten operativsystem.
510 byte håndskrevet assembly er hele kjøretiden i bootgpt, et MIT-lisensiert prosjekt utvikleren kerlenton nylig la ut på GitHub og Show HN. Master Boot Record-en laster en int8-modell på 11,5 KB fra de 23 neste sektorene og kjører den i 16-bit real mode på en 386, uten OS og uten C-runtime. Ut kommer falske dmesg-linjer med tidsstempler, PCI-adresser og ACPI-hendelser for maskinvare som aldri har eksistert.
Modellen er liten med vilje. Ifølge train.py ser den 8 tegn bakover, har et ordforråd på 64 tegn, embeddinger med 6 dimensjoner og ett skjult lag med 96 enheter, til sammen 11 296 parametere. Alt kvantiseres til int8 med skalaer som er toerpotenser, slik at boot-sektoren klarer hele fremoverpasset med imul og én enkelt idiv. Treningsdataene er 3 MB syntetisk dmesg fra corpus_gen.py, med én kjerneversjon og én disk per oppstart, fordi gjentakelsene får en liten modell til å virke fornuftig.
«Motoren min må få plass i én sektor, og derfor har nettverket mitt bare ett skjult lag med int8-operasjoner for å drømme opp dmesg» — kerlenton, i Show HN-innlegget
Feilsøkingen er like interessant som modellen. train.py simulerer nøyaktig den samme heltallsregningen som assemblykoden, inkludert LCG-sampleren, så utdataene fra Python og QEMU skal være like tegn for tegn. Da de skilte lag etter noen tegn, hentet kerlenton ut det skjulte laget via QEMUs debug-port og sammenlignet nevron for nevron. Feilen: idiv skriver resten til edx, registeret som holdt pekeren til bias-tabellen, så bare det første nevronet fikk riktig bias.
bootgpt er ingen generell språkmodell. Nærmeste slektning, sectorllm, kjører Karpathys stories260K, en llama2-transformer med 5 lag og attention, fra rundt 1,2 KB real mode-assembly. bootgpt går motsatt vei og presser hele motoren inn i selve MBR-en.
Hva bør du gjøre?
- Installer nasm, QEMU og numpy, og kjør build.sh og run.sh. Filen disk.img kan også skrives til en USB-pinne med dd og startes på en BIOS-maskin, siden den bare leser sine egne sektorer.
- Les train.py hvis du vil forstå int8-kvantisering med toerpotens-skalaer i praksis, fordi simulatoren gjør hver heltallsoperasjon eksplisitt.
- Lag en bit-eksakt referansesimulator i Python når du porterer en kvantisert modell til ny maskinvare, for eksempel en mikrokontroller, så kan du diffe utdataene i stedet for å gjette.