Questa pagina è stata tradotta automaticamente.
Completa un sondaggio di 1 minuto sulla qualità di questa traduzione.
Un percorso produttivo per implementare piccole reti neurali su microcontrollori
Di Danilo Pau, STMicroelectronics, e Brenda Zhuang, MathWorks
Le applicazioni di Deep Learning e Machine Learning vengono sempre più spostate dal cloud ai dispositivi embedded più vicini al luogo di origine dei dati. Con la rapida espansione del mercato dell'edge computing, diversi fattori stanno guidando la crescita dell'Edge AI, tra cui la scalabilità, la crescente domanda di applicazioni di intelligenza artificiale in tempo reale e la disponibilità di dispositivi edge a basso costo integrati da toolchain software robuste e produttive. Inoltre, è necessario evitare di trasmettere dati tramite una rete, sia per motivi di sicurezza, sia semplicemente per ridurre al minimo i costi di comunicazione.
L'intelligenza artificiale edge comprende un'ampia gamma di dispositivi, sensori, microcontrollori, multi-microprocessori su chip, processori applicativi e sistemi dedicati su chip, tra cui server edge e moduli IoT relativamente potenti. La comunità di riferimento, la tinyML Foundation, fondata nel 2019, si concentra sullo sviluppo di modelli di Machine Learning e sulla loro implementazione su dispositivi embedded con risorse estremamente limitate, caratterizzati da budget limitati in termini di memoria, potenza di elaborazione e consumo energetico. tinyML apre opportunità uniche, tra cui applicazioni che possono essere alimentate con batterie poco costose o persino piccoli pannelli solari, nonché applicazioni su larga scala che elaborano i dati localmente su hardware a basso costo. Naturalmente tinyML presenta anche diverse sfide. Una di queste sfide riguarda gli sviluppatori di sistemi embedded e di Machine Learning, che devono ottimizzare le prestazioni e l'ingombro di un'applicazione, il che richiede competenza sia nell'intelligenza artificiale che nei sistemi embedded.
In tale contesto, questo articolo descrive un quadro pratico per la progettazione e l'implementazione di reti neurali profonde su dispositivi edge. Basato su prodotti MATLAB® e Simulink®, insieme a strumenti di Edge IA STMicroelectronics®: il framework aiuta i team ad acquisire rapidamente competenze nel Deep Learning e nell'implementazione edge, consentendo loro di superare gli ostacoli comuni riscontrati con tinyML. Ciò, a sua volta, consente loro di creare e confrontare rapidamente applicazioni tinyML proof-of-concept. Nelle prime fasi del workflow, i team utilizzano MATLAB per creare una rete di Deep Learning, ottimizzare gli iperparametri con l'ottimizzazione bayesiana, utilizzare la distillazione della conoscenza e comprimere la rete con potatura e quantizzazione. Nella fase finale, gli sviluppatori utilizzano la tecnologia ST Edge AI Core integrata in ST Edge AI Developer Cloud—un servizio online gratuito per lo sviluppo dell'intelligenza artificiale sui microcontrollori e microprocessori STMicroelectronics a 32 bit (STM32, Stellar), inclusi i sensori dotati di intelligenza artificiale integrata, per confrontare l'utilizzo delle risorse e la velocità di inferenza per la rete di Deep Learning implementata (Figura 1).
Progettazione di reti, formazione e ottimizzazione degli iperparametri
Una volta che gli ingegneri hanno raccolto, preelaborato e preparato il set di dati da utilizzare nell'applicazione di Deep Learning, il passaggio successivo è la formazione e la valutazione dei modelli candidati, che possono includere modelli preaddestrati, come NASNet, SqueezeNet, Inception-v3 e ResNet-101, o modelli che l'ingegnere di Deep Learning ha creato in modo interattivo utilizzando l’app Deep Network Designer (Figura 2). Diversi modelli forniscono esempi che possono essere utilizzati per dare il via allo sviluppo, inclusi modelli campione per immagine, video, suono e classificazione delle nuvole di punti LiDAR; rilevamento di oggetti; stima della posa e segmentazione della forma d'onda.
Le prestazioni di una rete di Deep Learning dipendono in larga misura sia dai parametri che regolano la sua formazione sia da quelli che descrivono la sua architettura di rete. Esempi di questi iperparametri includono la velocità di apprendimento e la dimensione del batch, nonché il numero di livelli, il tipo di livelli e le connessioni tra i livelli. Una corretta ottimizzazione degli iperparametri può portare a modelli che raggiungono una maggiore accuratezza e prestazioni migliori, anche negli ambienti con risorse limitate in cui vengono eseguite le applicazioni tinyML. Tuttavia, selezionare e ottimizzare i valori degli iperparametri per trovare la combinazione che ottimizza le prestazioni può essere un'attività difficile e che richiede molto tempo.
L'ottimizzazione bayesiana è adatta all'ottimizzazione degli iperparametri delle reti di Deep Learning sia di classificazione che di regressione, perché esplora in modo efficiente lo spazio degli iperparametri ad alta dimensionalità per trovare configurazioni ottimali o quasi ottimali. In MATLAB, lo sviluppatore di Machine Learning può utilizzare la funzione bayesopt
per trovare i migliori valori degli iperparametri utilizzando l'ottimizzazione bayesiana. Ad esempio, può fornire un set di iperparametri da valutare, come il numero di livelli convoluzionali, il tasso di apprendimento iniziale, lo slancio e la regolarizzazione L2 e una funzione obiettivo, come l'errore di convalida, da minimizzare. La funzione può quindi utilizzare i risultati da bayesopt
per selezionare uno o più set di configurazioni di iperparametri da esplorare ulteriormente nelle fasi successive del workflow.
Distillazione della conoscenza
I dispositivi embedded con risorse limitate hanno una memoria disponibile limitata. La distillazione della conoscenza è un approccio per ridurre l'impatto di una rete di Deep Learning mantenendo al contempo un elevato livello di accuratezza. Questa tecnica utilizza una rete di insegnanti più ampia e accurata per insegnare a una rete di studenti più piccola a fare previsioni. La chiave sta nel selezionare le funzioni di perdita nelle architetture di rete insegnante-studente.
Le reti addestrate nelle fasi precedenti possono essere utilizzate come modello per l'insegnante. Una rete di studenti è una versione più piccola ma simile al modello degli insegnanti. In genere, il modello studente contiene meno blocchi convolution-batchnorm-ReLU. Per tenere conto della riduzione delle dimensioni, nella rete degli studenti vengono aggiunti livelli di pooling massimo o pooling medio globale. Queste modifiche riducono significativamente il numero di contenuti apprendibili rispetto alla rete degli insegnanti.
Per addestrare la rete di studenti è necessario definire una funzione di perdita di distillazione della conoscenza. Viene determinato dall'input della rete studentesca, dalla rete insegnante, dai dati di input con un target corrispondente e dall'iperparametro della temperatura. Empiricamente, la funzione di perdita è costituita da una media ponderata di 1) la perdita hard, che è la perdita di entropia incrociata tra gli output della rete studente e l'etichetta vera; e 2) la perdita soft, che è la perdita di entropia incrociata del SoftMax con temperatura tra i logit della rete studente e quello della rete insegnante.
La rete di studenti addestrati preserva meglio la precisione della rete dell'insegnante e consente di ridurre i parametri apprendibili, rendendola più adatta all'implementazione su dispositivi embedded.
Compressione e ottimizzazione del modello
Una progettazione efficiente e l'ottimizzazione degli iperparametri durante la fase di formazione rappresentano un primo passo essenziale; tuttavia, non sono sufficienti per garantire l'implementazione sui dispositivi edge. L'ottimizzazione post-addestramento tramite potatura e quantizzazione del modello è quindi importante per ridurre ulteriormente l'ingombro di memoria e i requisiti computazionali di una rete neurale profonda.
Uno dei metodi più efficaci di compressione di rete è la quantizzazione. Ciò avviene perché i dati vengono acquisiti con precisione intera, poiché nessun sensore di grandi volumi fornisce rappresentazioni in virgola mobile. Con la quantizzazione, l'obiettivo è ridurre l'occupazione di memoria richiesta per memorizzare i parametri della rete e aumentare la velocità di calcolo rappresentando i pesi e le attivazioni del modello con un numero ridotto di bit. Ciò potrebbe comportare, ad esempio, la sostituzione di numeri in virgola mobile a 32 bit con numeri interi a 8 bit, sempre quando possibile, accettando solo una degradazione marginale nell'accuratezza delle previsioni. La quantizzazione consente un utilizzo parsimonioso della memoria incorporata, il che è fondamentale per sensori, microcontrollori e microprocessori con risorse limitate (Figura 3) ai confini. Inoltre, le operazioni sugli interi sono generalmente più veloci sull'hardware rispetto alle operazioni in virgola mobile, il che determina un aumento delle prestazioni di inferenza sui microcontrollori. Ciò si traduce in modelli che consumano meno energia, rendendoli ancora più adatti all'impiego su dispositivi alimentati a batteria o con consumi energetici limitati, come telefoni cellulari e dispositivi IoT. Sebbene la quantizzazione post-training dovrebbe introdurre alcune perdite di precisione, gli strumenti di quantizzazione in MATLAB sono progettati per ridurre al minimo l'impatto sulla precisione del modello. Per mantenere le prestazioni del modello quantizzato vengono utilizzate tecniche quali la messa a punto fine e la calibrazione. In MATLAB, la funzione dlquantizer
semplifica il processo di quantizzazione dei pesi, delle polarizzazioni e delle attivazioni di una rete neurale profonda in valori interi a 8 bit.
Le tecniche di potatura, al contrario, si concentrano sulla riduzione della complessità di una rete riducendo al minimo la ridondanza operativa. Ciò è fondamentale per ridurre drasticamente la complessità computazionale. L'idea è quella di identificare e rimuovere quelle connessioni, pesi, filtri o persino interi livelli che hanno scarso effetto sulle previsioni della rete. La proiezione è una tecnica proprietaria MATLAB utilizzata per ottimizzare le reti neurali rimuovendo selettivamente pesi o connessioni meno importanti. Questo processo riduce la complessità del modello, riducendone le dimensioni e velocizzando i tempi di inferenza senza compromettere significativamente le prestazioni. Mentre la potatura regolare comporta in genere la semplice rimozione basata su soglie di pesi di bassa entità, la proiezione può incorporare criteri e metodi più sofisticati per garantire che le caratteristiche essenziali della rete siano preservate. Inoltre, la proiezione spesso mira a mantenere le proprietà geometriche dello spazio dei pesi, dando origine a modelli potenzialmente più efficienti e robusti rispetto ai metodi di potatura tradizionali.
Benchmarking su ST Edge AI Developer Cloud
Dopo aver completato la progettazione iniziale della rete, l'ottimizzazione degli iperparametri, la distillazione e la compressione in MATLAB, il passaggio successivo del workflow consiste nel valutare le prestazioni di tale progettazione su un microcontrollore o un microprocessore. Nello specifico, gli ingegneri devono valutare, tra gli altri fattori, i requisiti di flash e RAM della rete, nonché la velocità di inferenza.
ST Edge AI Developer Cloud è progettato per semplificare questa fase delworkflow consentendo un rapido benchmarking delle reti sui dispositivi ST Edge. Per utilizzare questo servizio per un'applicazione tinyML sviluppata in MATLAB, è necessario prima esportare la rete in formato ONNX. Dopo aver caricato il file ONNX generato su ST Edge AI Developer Cloud, gli ingegneri possono selezionare il dispositivo o i dispositivi ST su cui eseguire i benchmark (Figura 4).
Una volta completato il benchmarking, ST Edge AI Developer Cloud fornisce un report che descrive in dettaglio i risultati (Figura 5). Gli strumenti di analisi delle prestazioni forniti da ST Edge AI Developer Cloud offrono una serie di informazioni dettagliate, tra cui l'utilizzo della memoria, la velocità di elaborazione, l'utilizzo delle risorse e l'accuratezza del modello. Gli sviluppatori ricevono informazioni sul consumo di RAM e memoria flash, con una ripartizione dell'allocazione della memoria per i diversi livelli e componenti del modello. Inoltre, gli strumenti forniscono il tempo di esecuzione per ogni livello e il tempo di inferenza complessivo, insieme a un'analisi temporale dettagliata per identificare e ottimizzare le operazioni lente. Le statistiche sull'utilizzo delle risorse, tra cui l'impiego della CPU e dell'acceleratore hardware, nonché le metriche sul consumo energetico, aiutano a ottimizzare l'efficienza energetica.
Dopo aver esaminato i risultati del benchmark, gli ingegneri possono identificare il miglior percorso d'azione per i passaggi successivi. Se la progettazione della rete si adatta comodamente ai vincoli di un dato dispositivo edge con tempi di inferenza ridotti, potrebbero valutare l'opportunità di utilizzare un dispositivo più piccolo o di aumentare la precisione della previsione con una rete leggermente più grande e complessa. Però, se la progettazione della rete è troppo grande, con conseguenti tempi di inferenza lenti a causa dell'uso di Flash o RAM esterne, il team potrebbe cercare un dispositivo più potente dal punto di vista computazionale con più Flash e RAM integrate, oppure potrebbe eseguire ulteriori ottimizzazioni degli iperparametri, distillazione della conoscenza, potatura e iterazioni di quantizzazione con MATLAB per comprimere ulteriormente la rete. ST Edge AI Developer Cloud offre anche la generazione automatica di codice per semplificare l'implementazione di modelli di intelligenza artificiale sui dispositivi ST. Questa funzionalità converte i modelli di intelligenza artificiale addestrati in codice C ottimizzato, compatibile con i sensori, i microcontrollori e i microprocessori di STMicroelectronics.
Dal benchmarking all'implementazione
L'ultimo passaggio del workflow è l'implementazione su un sensore, un microcontrollore o un microprocessore. Con i risultati del benchmarking in mano, gli ingegneri possono prendere una decisione informata sulla selezione di una piattaforma, come un STM32 Discovery Kit ad esempio per valutare la loro applicazione tinyML su hardware reale.
A seconda dell'applicazione, potrebbe essere necessario integrare la rete neurale profonda con altri componenti, come un controller, e incorporarli in un sistema più ampio prima dell'implementazione. Per questi casi d'uso, possono estendere ulteriormente il workflow, modellando gli altri componenti in Simulink, eseguendo simulazioni a livello di sistema per validare la progettazione e generando codice C/C++ per la distribuzione su dispositivi STM32 utilizzando Embedded Coder® e supporto Embedded Coder per STM32.
Pubblicato nel 2024