ESP32-S3 mikrokontrollerim ir 512 kilobaiti ātrās SRAM atmiņas. Uz šāda čipa izstrādātājs, kas parakstās kā slvDev, palaidis valodas modeli ar 28,9 miljoniem parametru. Teksts parādās uz čipam pieslēgta ekrāna ar aptuveni 9,5 žetoniem sekundē. Čips maksā apmēram 8 dolārus. Viss notiek uz vietas, bez interneta pieslēguma.
Iepriekšējais publiski zināmais valodas modelis uz tādas klases čipa bija 260 tūkstoši parametru. Jaunais glabā apmēram 110 reizes vairāk. Tas iekļaujas tāpēc, ka lielākā modeļa daļa nemaz nenokļūst RAM atmiņā. Tā paliek zibatmiņā un tiek nolasīta pa mazam gabalam katram žetonam.
Kā 25 miljoni parametru paliek zibatmiņā
Lielākā daļa valodas modeļa parametru sēž iegulšanas tabulā. Modelis no tās nolasa rindas, nevis veic ar tām aprēķinus. Projekta autors šo tabulu ar 25 miljoniem parametru atstāja 12 megabaitos zibatmiņas. Katram žetonam no turienes tiek nolasītas sešas rindas, kopā apmēram 450 baiti.
Ātrajā atmiņā palika tikai skaitļošanas kodols: 559 tūkstoši parametru, kas 4 bitu kvantizācijā aizņem 273 kilobaitus. Tas iekļaujas ESP32-S3 iekšējos 512 kilobaitos. Iegulšanas un izvades galva 1,64 megabaitu apmērā sāknēšanas laikā tiek pārkopēta PSRAM atmiņā. Pēc visu buferu un KV keša izdalīšanas PSRAM paliek brīvi 5228 kilobaiti.
Ideja nāk no Gemma modeļiem
Paņēmienu sauc Per-Layer Embeddings. Google to izmanto Gemma 3n un Gemma 4 modeļos, lai iegulšanas svari nesēdētu paātrinātāja atmiņā. Telefonā tas nozīmē, ka piecu miljardu parametru modelis strādā ar aptuveni divu gigabaitu atmiņas nospiedumu. Uz mikrokontrollera tā pati sadalīšana notiek starp zibatmiņu un SRAM.
Autora mērījumi rāda, ka nozīme ir arī vietai, kur tabulas dati tiek iepludināti modelī. Iepludināšana katrā slānī deva par 0,046 natiem labāku rezultātu nekā tie paši parametri, pievienoti tikai modeļa apakšā. Kontroles variants, kuram atstāta visa pārējā mehānika bez pašas tabulas, strādāja sliktāk par bāzes modeli. Tabula dod visu ieguvumu.
Skaitļi no mērījumiem uz čipa
Bāzes modelis ar tādu pašu kodolu un 3,7 miljoniem parametru kopā sasniedza perplexity 12,58. Modelis ar zibatmiņas tabulu sasniedza 11,41, kas ir par 9,3 % labāk. Ieguvums saglabājās arī pēc 4 bitu kvantizācijas, pārbaudīts uz divām sēklām. Pie 4096 žetonu vārdnīcas ieguvums nokrita četras reizes, tāpēc izlaides konfigurācijā palika 32 768 žetonu vārdnīca. Jo vairāk rindu tabulā, jo lētāka tā izrādās, jo katram žetonam vajag tikai dažas.
Atmiņas caurlaidspēju autors mērīja ar Xtensa ciklu skaitītāju uz reālas N16R8 plates. PSRAM secīgā lasīšana deva 60,7 MB/s, iekšējā SRAM 240 MB/s, bet 512 baitu rindas nejauša nolasīšana no zibatmiņas prasīja 20,3 mikrosekundes. Tabulas cena vienam žetonam iznāk aptuveni 0,12 milisekundes. Izvades galva prasa 17,3 milisekundes. To pašu maksā arī bāzes modelis.
Tabula ar 25 miljoniem parametru šajā sintētiskajā testā aizņem apmēram 0,7 % no žetona atmiņas laika. Pirmā korektā C versija uz čipa deva 0,57 žetonus sekundē un vienu modeļa soli izpildīja 1757 milisekundēs. Pēc galvas pārcelšanas uz PSRAM un int8 aprēķiniem solis saīsinājās līdz 102,9 milisekundēm.
Ko modelis prot un ko ne
Modelis trenēts uz TinyStories datu kopas, ko 2023. gadā publicēja Microsoft Research pētnieki Ronens Eldans un Juaņdži Li. Tie ir īsi sintētiski stāsti ar tik vienkāršu vārdu krājumu, ka arī mazs modelis iemācās rakstīt saprotami. Uz čipa modelis no ievada frāzes turpina stāstu angļu valodā.
Once upon a time, there was a little girl named Lily.
Tas arī ir viss. Modelis neatbild uz jautājumiem, neizpilda norādes, neraksta kodu un nezina faktus. Autors savu rezultātu apraksta stingri: 28,9 miljoni ir uzglabāto parametru skaits pēc atmiņas līmeņu sadalījuma, nevis spēju mērs.
Repozitorijā palikusi arī nesakārtota vēsture ar kļūdu paša parametru uzskaitē, kas kādā agrākā mērījumā deva pārspīlētu skaitli. Pārnesamā C izpildvide pirms kompilēšanas uz ierīces tika salīdzināta ar PyTorch etalonu visos 32 768 logitos, lielākā absolūtā atšķirība 0,00001. Programmaparatūra, vadu shēma un trenēšanas kods atrodas tajā pašā repozitorijā. Pamatā ir Andreja Karpatija llama2.c.
Mazie modeļi parādās arī ārpus mikrokontrolleriem
Tajā pašā nedēļā Hugging Face platformā parādījās Inflect-Micro-v2, runas sintēzes modelis ar 9,36 miljoniem parametru. Svari FP32 formātā aizņem 37,53 megabaitus. Uz četriem procesora pavedieniem tas ģenerē runu 6,28 reizes ātrāk par reālo laiku, bez videokartes. Modelis izdod 24 kHz mono audio ar vienu fiksētu vīrieša balsi angļu valodā, licence Apache-2.0.
Autora publicētajos mērījumos aklā salīdzinājumā kopiena 66,2 % gadījumu deva priekšroku šī modeļa izvadei. UTMOS22 dabiskuma vērtējums ir 4,395, semantiskā vārdu kļūdu daļa 3,99 %. Nano variants strādā 10,72 reizes ātrāk par reālo laiku.
ESP32 modeļa fails aizņem 14 912 332 baitus zibatmiņas nodalījumā, kuram atvēlēti 15 597 568 baiti. Brīvi paliek 685 236 baiti.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.