I dispositivi mobili e incorporati hanno risorse di calcolo limitate, quindi è importante che la tua applicazione sia efficiente in termini di risorse. Abbiamo compilato un elenco di best practice e strategie che puoi utilizzare per migliorare il rendimento del tuo modello TensorFlow Lite.
Scegliere il modello migliore per l'attività
A seconda dell'attività, dovrai trovare un compromesso tra la complessità e le dimensioni del modello. Se la tua attività richiede un'elevata precisione, potresti aver bisogno di un modello grande e complesso. Per le attività che richiedono meno precisione, è meglio utilizzare un modello più piccolo perché non solo utilizza meno spazio su disco e memoria, ma è anche generalmente più veloce ed efficiente dal punto di vista energetico. Ad esempio, i grafici seguenti mostrano i compromessi tra precisione e latenza per alcuni modelli di classificazione delle immagini comuni.


Un esempio di modelli ottimizzati per i dispositivi mobili sono le MobileNets, ottimizzate per le applicazioni di visione mobile. Kaggle Models elenca diversi altri modelli ottimizzati appositamente per i dispositivi mobili e incorporati.
Puoi eseguire il retraining dei modelli elencati sul tuo set di dati utilizzando il transfer learning.
Profilazione del modello
Una volta selezionato un modello candidato adatto alla tua attività, è consigliabile profilare ed eseguire il benchmarking del modello. Lo strumento di benchmarking LiteRT dispone di un profiler integrato che mostra le statistiche di profilazione per operatore. Ciò può aiutare a comprendere i colli di bottiglia delle prestazioni e quali operatori dominano il tempo di calcolo.
Puoi anche utilizzare il tracing LiteRT per profilare il modello nella tua applicazione Android, utilizzando il tracing di sistema Android standard, e per visualizzare le chiamate degli operatori nel tempo con strumenti di profilazione basati su GUI.
Profilare e ottimizzare gli operatori nel grafico
Se un determinato operatore viene visualizzato di frequente nel modello e, in base alla profilazione, scopri che consuma la maggior parte del tempo, puoi esaminare l'ottimizzazione di questo operatore. Questo scenario dovrebbe essere raro, in quanto TensorFlow Lite dispone di versioni ottimizzate per la maggior parte degli operatori. Tuttavia, potresti essere in grado di scrivere una versione più veloce di un'operazione personalizzata se conosci i vincoli in cui viene eseguita l'operatore. Consulta la guida agli operatori personalizzati.
Ottimizza il modello
L'ottimizzazione del modello mira a creare modelli più piccoli, generalmente più veloci ed efficienti dal punto di vista energetico, in modo che possano essere implementati sui dispositivi mobili. LiteRT supporta diverse tecniche di ottimizzazione, come la quantizzazione.
Per ulteriori dettagli, consulta la documentazione sull'ottimizzazione dei modelli.
Modificare il numero di thread
LiteRT supporta kernel multithread per molti operatori. Puoi aumentare il numero di thread e velocizzare l'esecuzione degli operatori. Aumentare il numero di thread, tuttavia, farà sì che il modello utilizzi più risorse ed energia.
Per alcune applicazioni, la latenza potrebbe essere più importante dell'efficienza energetica. Puoi aumentare il numero di thread impostando il numero di thread dell'interprete. L'esecuzione multithread, tuttavia, comporta una maggiore variabilità delle prestazioni a seconda di cos'altro viene eseguito contemporaneamente. Ciò vale in particolare per le app mobile. Ad esempio, i test isolati potrebbero mostrare un'accelerazione di 2x rispetto a un singolo thread, ma, se un'altra app viene eseguita contemporaneamente, le prestazioni potrebbero essere peggiori rispetto a un singolo thread.
Elimina le copie ridondanti
Se l'applicazione non è progettata con cura, possono esserci copie ridondanti
quando si inserisce l'input e si legge l'output del modello. Assicurati di
eliminare le copie ridondanti. Se utilizzi API di livello superiore, come Java, assicurati di controllare attentamente la documentazione per le avvertenze sulle prestazioni. Ad esempio,
l'API Java è molto più veloce se ByteBuffers vengono utilizzati come
input.
Profilare l'applicazione con strumenti specifici della piattaforma
Strumenti specifici della piattaforma come Android Profiler e Instruments forniscono una grande quantità di informazioni di profilazione che possono essere utilizzate per eseguire il debug dell'app. A volte il bug delle prestazioni potrebbe non trovarsi nel modello, ma in parti del codice dell'applicazione che interagiscono con il modello. Assicurati di acquisire familiarità con gli strumenti di profilazione e le best practice specifici della piattaforma.
Valuta se il modello trae vantaggio dall'utilizzo degli acceleratori hardware disponibili sul dispositivo
LiteRT ha aggiunto nuovi modi per accelerare i modelli con hardware più veloce come GPU, DSP e acceleratori neurali. In genere, questi acceleratori vengono esposti tramite i sottomoduli delegate che assumono il controllo di parti dell'esecuzione dell'interprete. LiteRT può utilizzare i delegati:
- Il delegato GPU è disponibile su Android e iOS, utilizzando rispettivamente OpenGL/OpenCL e Metal. Per provarli, consulta GPU delegate.
- È possibile creare un proprio delegato se hai accesso a hardware non standard. Per ulteriori informazioni, consulta la sezione Delegati LiteRT.
Tieni presente che alcuni acceleratori funzionano meglio per diversi tipi di modelli. Alcuni delegati supportano solo modelli float o modelli ottimizzati in modo specifico. È importante valutare ogni delegato per vedere se è una buona scelta per la tua applicazione. Ad esempio, se hai un modello molto piccolo, potrebbe non valere la pena delegarlo alla GPU. Al contrario, gli acceleratori sono un'ottima scelta per i modelli di grandi dimensioni con un'elevata intensità aritmetica.