Abbiamo smesso di stimare il nostro footprint e lo abbiamo compilato
Ogni fornitore di edge AI dichiara una dimensione del modello. Quasi nessuno lo compila e misura il binario. Noi lo abbiamo fatto, e i nostri numeri erano sbagliati in entrambe le direzioni.
Il numero che tutti citano e nessuno verifica
Chiedete a una qualsiasi piattaforma di edge AI quanto sono grandi i suoi modelli e otterrete una cifra precisa in kilobyte. Chiedete come e' stata ottenuta e la risposta e' quasi sempre la stessa: numero di parametri moltiplicato per i byte per parametro, piu' un margine per il runtime.
E' un'approssimazione ragionevole. Ed e' anche in grado, come abbiamo scoperto nel nostro stesso codice, di sbagliare di un fattore quattro.
Due errori in direzioni opposte
Avevamo due stimatori di footprint indipendenti, scritti in momenti diversi per scopi diversi. Erano sbagliati entrambi.
Il primo sovrastimava la flash di circa 4 volte. Contava il testo del sorgente C generato come se fosse firmware, ma il sorgente memorizza ogni peso come letterale decimale: circa sette caratteri per un valore da due byte. I pesi venivano contati due volte, una come byte e una come testo che descrive quei byte. Un modello che ne occupa realmente 6,3 riportava 23,9 KB.
Il secondo sottostimava del 19-62%. Assumeva un byte per parametro. La nostra aritmetica e' a 8 bit, quindi sembrava corretto, ma la larghezza dell'aritmetica e quella di memorizzazione sono cose diverse: il codice esportato salva i pesi come interi a 16 bit. Il costo reale sta fra uno e due byte per parametro, perche' parte del modello e' impacchettata a bit.
Le cifre pubblicate su questo sito venivano dal secondo stimatore. Erano troppo ottimistiche. Le abbiamo corrette.
Cosa dice davvero il compilatore
Abbiamo preso il C esportato di un modello per il rilevamento guasti ai cuscinetti, lo abbiamo compilato per due target reali e abbiamo misurato le sezioni del binario. Nessuna stima, nessuna estrapolazione: il numero che riporta il linker.
| Target | Flash | RAM |
|---|---|---|
| ARM Cortex-M0+ (thumbv6m) | 6,3 KB | 65 byte |
| RISC-V RV32EC | 7,3 KB | 65 byte |
Sessantacinque byte di RAM. Non kilobyte.
Il codice generato non contiene aritmetica in virgola mobile e non dipende da alcuna libreria matematica: gli unici simboli esterni sono la divisione intera e un azzeramento di memoria, poche centinaia di byte dalla libreria di supporto del compilatore.
Cosa comporta in termini di silicio
Un footprint cosi' cambia quale chip potete specificare, e la scelta del chip e' dove il costo della distinta base si decide davvero.
| Chip | Flash / RAM | Costo unitario | Ci sta? |
|---|---|---|---|
| CH32V003 (RISC-V) | 16 KB / 2 KB | ~0,12 EUR | Si', con 8,6 KB liberi |
| STM32C0 (Cortex-M0+) | 32 KB / 6 KB | ~0,45 EUR | Si', 5x di margine |
| ESP32-S3 | 8 MB / 512 KB | ~3,00 EUR | Enormemente sovradimensionato |
Su cinquecento nodi, la differenza fra un modulo da tre euro e uno da dodici centesimi e' millecinquecento euro contro centottanta.
L'accuratezza dietro il numero
Un modello piccolo non vale nulla se non funziona. Questo e' stato valutato sul dataset CWRU con uno split cross-load: addestrato su motori a carico 0-1 HP, testato su 2-3 HP, condizioni operative mai viste durante l'addestramento. La cosa conta, perche' uno split casuale lascia che finestre della stessa registrazione finiscano in entrambi gli insiemi e gonfia il risultato.
Su cinque run indipendenti: 99,69% di accuratezza, deviazione standard 0,07%. Una configurazione leggermente piu' grande ha raggiunto il 99,80%, sempre in 10 KB.
Quello su cui non esagereremo
Questo risultato e' specifico del rilevamento guasti ai cuscinetti. Abbiamo applicato lo stesso ridimensionamento ad altri due benchmark per vedere se generalizzava, e non lo fa.
Sul riconoscimento di attivita' umana il modello piccolo ha eguagliato quello grande entro il rumore statistico, con un terzo del footprint: una vittoria netta. Ma sulla previsione della vita utile residua delle turbine NASA, la configurazione grande ha battuto quella piccola di 8,3 punti percentuali. Li' la capacita' serve davvero.
Quindi l'affermazione onesta non e' “i nostri modelli girano in 10 KB”. E': per il rilevamento guasti ai cuscinetti, verificato per compilazione, il 99,8% di accuratezza sta in 10 KB di flash e 65 byte di RAM su un microcontrollore sotto l'euro. La dimensione del modello e' una decisione per singolo task, e fingere il contrario sarebbe solo un'altra stima travestita da fatto.
Perche' pubblicare una correzione
Potevamo sistemare la formula in silenzio. Ma una cifra di footprint e' un dato di acquisto: qualcuno sceglie un chip basandosi su quella, ordina diecimila unita' e scopre la verita' al momento del flash. E' un modo costoso di imparare che un fornitore arrotondava a proprio favore.
I numeri sulla nostra pagina benchmark ora provengono da binari compilati. Dove non abbiamo compilato, lo dichiariamo.
Parlaci di un pilot se vuoi che questi numeri siano misurati sui tuoi dati e sul tuo target.