I dispositivi mobili e incorporati hanno risorse di calcolo limitate, quindi è importante mantenere le risorse dell'applicazione efficienti. Abbiamo compilato un elenco di best practice e strategie che puoi utilizzare per migliorare le prestazioni del tuo modello TensorFlow Lite.
Scegli il modello migliore per l'attività
A seconda dell'attività, sarà necessario fare un compromesso tra la complessità e le dimensioni del modello. Se la tua attività richiede un'elevata precisione, potresti aver bisogno di un modello ampio e complesso. Per le attività che richiedono meno precisione, è meglio utilizzare un modello più piccolo perché non solo utilizzano meno spazio su disco e memoria, ma sono anche generalmente più veloci e più efficienti dal punto di vista energetico. Ad esempio, i grafici seguenti mostrano i compromessi di precisione e latenza per alcuni modelli di classificazione delle immagini comuni.
Un esempio di modelli ottimizzati per dispositivi mobili sono MobileNets , che sono ottimizzati per applicazioni di visione mobile. TensorFlow Hub elenca molti altri modelli che sono stati ottimizzati specificamente per dispositivi mobili e embedded.
È possibile riqualificare i modelli elencati sul proprio set di dati utilizzando l'apprendimento del trasferimento. Dai un'occhiata ai tutorial sull'apprendimento del trasferimento utilizzando TensorFlow Lite Model Maker .
Profila il tuo modello
Dopo aver selezionato un modello candidato adatto al tuo compito, è buona norma profilare e confrontare il tuo modello. Lo strumento di benchmarking TensorFlow Lite ha un profiler integrato che mostra le statistiche di profilazione per operatore. Questo può aiutare a comprendere i colli di bottiglia delle prestazioni e quali operatori dominano il tempo di calcolo.
Puoi anche utilizzare il tracciamento TensorFlow Lite per profilare il modello nella tua applicazione Android, utilizzando il tracciamento del sistema Android standard e per visualizzare le chiamate dell'operatore in base al tempo con strumenti di profilazione basati su GUI.
Profilare e ottimizzare gli operatori nel grafico
Se un particolare operatore appare frequentemente nel modello e, in base alla profilazione, si scopre che l'operatore consuma la maggior parte del tempo, è possibile cercare di ottimizzare quell'operatore. Questo scenario dovrebbe essere raro poiché TensorFlow Lite ha 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 eseguito l'operatore. Consulta la guida personalizzata per gli operatori .
Ottimizza il tuo modello
L'ottimizzazione del modello mira a creare modelli più piccoli che sono generalmente più veloci e più efficienti dal punto di vista energetico, in modo che possano essere implementati su dispositivi mobili. TensorFlow Lite supporta più tecniche di ottimizzazione, come la quantizzazione.
Consulta i documenti di ottimizzazione del modello per i dettagli.
Modifica il numero di thread
TensorFlow Lite supporta kernel multi-thread per molti operatori. È possibile aumentare il numero di thread e velocizzare l'esecuzione degli operatori. L'aumento del numero di thread, tuttavia, farà sì che il tuo modello utilizzi più risorse e potenza.
Per alcune applicazioni, la latenza può essere più importante dell'efficienza energetica. È possibile aumentare il numero di thread impostando il numero di thread dell'interprete. L'esecuzione multi-thread, tuttavia, ha il costo di una maggiore variabilità delle prestazioni a seconda di cos'altro viene eseguito contemporaneamente. Questo è particolarmente vero per le app mobili. Ad esempio, i test isolati possono mostrare un aumento della velocità di 2 volte rispetto al single-thread, ma, se un'altra app viene eseguita contemporaneamente, potrebbe risultare in prestazioni peggiori rispetto al single-thread.
Elimina le copie ridondanti
Se l'applicazione non è progettata con cura, potrebbero esserci copie ridondanti durante l'alimentazione dell'input e la lettura dell'output dal modello. Assicurati di eliminare le copie ridondanti. Se stai utilizzando 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 .
Profila la tua applicazione con strumenti specifici della piattaforma
Gli strumenti specifici della piattaforma come il profiler Android e gli strumenti forniscono una vasta gamma di informazioni di profilazione che possono essere utilizzate per eseguire il debug della tua app. A volte il bug delle prestazioni potrebbe non essere nel modello ma in parti del codice dell'applicazione che interagiscono con il modello. Assicurati di familiarizzare con gli strumenti di profilazione specifici della piattaforma e le migliori pratiche per la tua piattaforma.
Valuta se il tuo modello trae vantaggio dall'utilizzo degli acceleratori hardware disponibili sul dispositivo
TensorFlow Lite 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 sottomoduli delegati che si occupano di parti dell'esecuzione dell'interprete. TensorFlow Lite può utilizzare i delegati nei seguenti modi:
- Utilizzo dell'API delle reti neurali di Android. Puoi utilizzare questi backend di acceleratori hardware per migliorare la velocità e l'efficienza del tuo modello. Per abilitare l'API delle reti neurali, consulta la guida ai delegati NNAPI .
- Il delegato GPU è disponibile su Android e iOS, utilizzando rispettivamente OpenGL/OpenCL e Metal. Per provarli, consulta l'esercitazione e la documentazione dei delegati GPU .
- Il delegato Hexagon è disponibile su Android. Sfrutta il Qualcomm Hexagon DSP se è disponibile sul dispositivo. Per ulteriori informazioni, vedere l' esercitazione sui delegati di Hexagon .
- È possibile creare un proprio delegato se si ha accesso a hardware non standard. Per ulteriori informazioni, vedere i delegati di TensorFlow Lite .
Tieni presente che alcuni acceleratori funzionano meglio per diversi tipi di modelli. Alcuni delegati supportano solo modelli float o modelli ottimizzati in un modo specifico. È importante confrontare ogni delegato per vedere se è una buona scelta per la tua applicazione. Ad esempio, se si dispone di un modello molto piccolo, potrebbe non valere la pena delegare il modello all'API NN o alla GPU. Al contrario, gli acceleratori sono un'ottima scelta per i modelli di grandi dimensioni che hanno un'elevata intensità aritmetica.
Serve ancora aiuto
Il team di TensorFlow è lieto di aiutarti a diagnosticare e risolvere problemi di prestazioni specifici che potresti dover affrontare. Segnala un problema su GitHub con i dettagli del problema.