Innhold Vis
En utvikler har fått en GAN-modell med 12,6 millioner parametere til å generere 64×64 bilder på en mikrokontroller med bare 512 KB SRAM og ingen ekstern RAM. Det tar 26 sekunder per bilde, kjøres på dual-core RISC-V og krever null ferdiglagde ML-rammeverk. Ren C. Resultatet? Et katteransikt, piksel for piksel, fra en chip som koster noen titalls kroner.
Dette er ikke akkurat bildegenerering i verdensklasse. Men det er noe annet som er langt mer interessant: det er et bevis på at inferens ikke krever et datasenter, ikke krever PyTorch, ikke krever en GPU. Det krever bare nok forståelse til å implementere det fra bunnen av.
La meg forklare hva som faktisk skjedde her, og hvorfor det er verdt å bite seg merke i.
Hva er en DCGAN, og hvorfor er dette overraskende?
En DCGAN (Deep Convolutional Generative Adversarial Network) er en type generativt nevralt nettverk. Den trenes med to konkurrerende nettverk: en generator som lager bilder, og en diskriminator som forsøker å avsløre falske bilder. Over tid lærer generatoren å lage stadig mer overbevisende resultater.
Det overraskende er ikke selve DCGAN-arkitekturen – den er godt dokumentert og daterer seg til 2015. Det overraskende er at en modell med 12,6 millioner parametere ble presset ned i en chip med 512 KB arbeidsminne. Til sammenligning: et vanlig JPEG-bilde fra telefonen din tar mer plass enn det totale arbeidsminnet på denne brikken.
Nøkkelen til at dette i det hele tatt er mulig, er int8-kvantisering med per-kanal presisjon. I stedet for å lagre hvert tall som en 32-bit float, brukes 8-bit heltall. Det reduserer minnebehovet med en faktor på fire. Vektene i modellen strømmes direkte fra et SD-kort ved hjelp av dobbelbuffering – mens ett lag beregnes, lastes det neste laget inn i bakgrunnen. Ingen av vektene trenger å ligge i RAM samtidig.
Hvilken hardware ble brukt?
Brikken er en CH32H417 – en relativt ny RISC-V-mikrokontroller med to kjerner. Den har ikke støtte for TFLite eller CMSIS-NN (Arms ML-biblioteker for innebygde systemer), siden RISC-V er en annen instruksjonsarkitektur. Det fantes altså ingen snarvei: utvikleren måtte bygge hele inferensmotoren fra bunnen av i C.

Mellomlagrede aktiveringer (de beregnede verdiene mellom hvert lag i nettverket) lagres i DTCM – Data Tightly Coupled Memory, en raskere minneregion som er koblet direkte til prosessorkjernene. Det er dette som gjør at beregningene i det hele tatt kan gjennomføres uten ekstern RAM.
Resultatet er en inferensmotor som er bit-identisk med PyTorch-referanseimplementasjonen. Det betyr at tallene stemmer nøyaktig overens – ingen avrundingsfeil eller numerisk drift. Det er ikke enkelt å oppnå når man implementerer matrisemultiplikasjon og konvolusjonsoperasjoner for hånd i C.
Hvorfor tar det 26 sekunder?
26 sekunder per bilde høres tregt ut. For et katteransikt på 64×64 piksler er det mildest talt ikke imponerende ytelse. Men konteksten er viktig: en RISC-V mikrokontroller kjørt uten GPU-akselerasjon, uten SIMD-vektorinstruksjoner optimalisert for ML, og uten noe som helst av de ferdigbygde optimaliseringene som finnes i rammeverk som TFLite Micro.
12,6 millioner parametere krever enormt mange multiplikasjoner. En enkelt konvolusjonsoperasjon i et nevralt nettverk kan innebære millioner av flyttallsmultiplikasjoner. Å gjøre dette sekvensielt på en lavfrekvent kjerne i C er ikke rakett-vitenskap – det er grunnleggende matematikk som bare tar tid.

For øvrig er dette den typen ytelse man kan forvente å forbedre dramatisk med bedre kjerneskrift, SIMD-optimaliseringer for RISC-V, og mer aggressiv kvantisering. Det finnes også vesentlig mer effektive modellarkitekturer for edge-bruk enn DCGAN.
Hva er poenget med dette?
Poenget er prinsippet, ikke produktet. Dette demonstrerer noe fundamentalt: inferens – selve kjøringen av en trent AI-modell – kan gjøres på hardware som koster noen titalls kroner, uten nettverk, uten sky og uten lisenser.
Det har praktiske implikasjoner for alt fra smarte sensorer til industrielt utstyr, medisinske måleinstrumenter og lavpris-IoT-enheter. I dag er den vanlige tilnærmingen å sende data til skyen for analyse. Det koster båndbredde, introduserer forsinkelse og krever nettverkstilkobling. Lokal inferens på mikrokontrollernivå fjerner alle disse kravene.
Det finnes allerede dedikerte rammeverk for dette – TFLite Micro og CMSIS-NN for Arm-baserte chips er de mest kjente. Men dette prosjektet viser at det ikke er et krav. En ren C-implementasjon, bygget fra scratch, er ikke bare mulig – den er bit-identisk med referanseimplementasjonen. Det er solid ingeniørarbeid.
Hva skjer videre med embedded AI?
Trenden er tydelig. Transformermodeller på Game Boy Color, C++ inferensmotorer på Orange Pi for 1 500 kroner, og nå DCGAN-inferens på en mikrokontroller til noen titalls kroner. Fellesnevneren er at kvantisering, effektiv minnehåndtering og kompilerte inferensmotorer gjør modeller stadig mer tilgjengelige for lav-ressurs hardware.
For de som jobber med embedded systems, er dette en utvikling som er verdt å følge nøye. Det er langt fra sikkert at neste generasjons smarte sensor trenger en full Raspberry Pi – kanskje holder det med en billig RISC-V-brikke og en godt kvantisert modell.
På den andre enden av skalaen ser vi forsøk på å kjøre tusenmilliardersmodeller lokalt med spesialisert lagringshardware. Det er fascinerende at feltet presser i begge retninger samtidig: både mot gigantiske lokale modeller og mot mikroskopiske embedded-løsninger.
Det som skjer i mellom – i CloudEdge-sonen mellom mikrokontrollere og GPU-servere – blir spennende å følge. Open source-bevegelsen innen AI bidrar sterkt til denne utviklingen: fri tilgang til modellvekter og treningskode gjør det mulig for enkeltpersoner å eksperimentere med slike prosjekter uten kommersielle begrensninger.
For den nysgjerrige: prosjektet er tilgjengelig på r/MachineLearning, og CH32H417-brikken fra WCH er dokumentert hos produsenten. Det er ikke mye tilgjengelig dokumentasjon på norsk om denne brikken ennå, men det endrer seg nok etterhvert som RISC-V vinner terreng.