Best practice per il rendimento

I dispositivi mobili e integrati dispongono di risorse computazionali limitate, quindi è importante mantenere efficienti le risorse dell'applicazione. 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 trovare un compromesso tra la complessità del modello e le dimensioni. 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 utilizzano meno spazio su disco e memoria, ma sono anche generalmente più veloci ed efficienti dal punto di vista energetico. Ad esempio, i grafici seguenti mostrano i compromessi tra precisione e latenza per alcuni modelli comuni di classificazione delle immagini.

Graph of model size vs accuracy

Graph of accuracy vs latency

Un esempio di modelli ottimizzati per i dispositivi mobili sono MobileNets , che sono ottimizzati per le applicazioni di visione mobile. TensorFlow Hub elenca diversi altri modelli che sono stati ottimizzati specificamente per dispositivi mobili e incorporati.

Puoi riqualificare i modelli elencati sul tuo set di dati utilizzando l'apprendimento del trasferimento. Dai un'occhiata ai tutorial di apprendimento sul trasferimento utilizzando TensorFlow Lite Model Maker .

Profila il tuo modello

Dopo aver selezionato un modello candidato adatto al tuo compito, è buona pratica profilare e confrontare il tuo modello. Lo strumento di benchmarking TensorFlow Lite 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 tracciamento TensorFlow Lite per profilare il modello nella tua applicazione Android, utilizzando il tracciamento standard del sistema Android e per visualizzare le invocazioni dell'operatore in base all'ora con strumenti di profilazione basati sulla GUI.

Profilare e ottimizzare gli operatori nel grafico

Se un particolare operatore appare frequentemente nel modello e, in base alla profilazione, ritieni che l'operatore utilizzi la maggior quantità di tempo, puoi valutare l'ottimizzazione di tale operatore. Questo scenario dovrebbe essere raro poiché 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 eseguito l'operatore. Consulta la guida degli operatori personalizzati .

Ottimizza il tuo modello

L'ottimizzazione del modello mira a creare modelli più piccoli che siano generalmente più veloci ed efficienti dal punto di vista energetico, in modo che possano essere distribuiti sui dispositivi mobili. TensorFlow Lite supporta molteplici tecniche di ottimizzazione, come la quantizzazione.

Consulta i documenti sull'ottimizzazione del modello per i dettagli.

Modifica il numero di thread

TensorFlow Lite supporta kernel multi-thread per molti operatori. Puoi aumentare il numero di thread e velocizzare l'esecuzione degli operatori. Aumentando il numero di thread, tuttavia, il tuo modello utilizzerà 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 prezzo di una maggiore variabilità delle prestazioni a seconda di cos'altro viene eseguito contemporaneamente. Ciò è particolarmente vero per le app mobili. Ad esempio, test isolati potrebbero mostrare un'accelerazione 2 volte maggiore rispetto a quella a thread singolo, ma, se un'altra app è in esecuzione contemporaneamente, ciò potrebbe comportare prestazioni peggiori rispetto a quelle a thread singolo.

Eliminare le copie ridondanti

Se l'applicazione non è progettata attentamente, possono esserci copie ridondanti durante l'alimentazione dell'input e la lettura dell'output dal modello. Assicurati di eliminare le copie ridondanti. Se utilizzi API di livello superiore, come Java, assicurati di controllare attentamente la documentazione per eventuali 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

Strumenti specifici della piattaforma come Profiler e Strumenti Android forniscono numerose informazioni di profilazione che possono essere utilizzate per eseguire il debug della tua app. A volte il bug prestazionale potrebbe non risiedere 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 assumono il controllo di parti dell'esecuzione dell'interprete. TensorFlow Lite può utilizzare i delegati per:

  • Utilizzo dell'API Neural Networks di Android. Puoi utilizzare questi backend di accelerazione hardware per migliorare la velocità e l'efficienza del tuo modello. Per abilitare l'API Neural Networks, consulta la guida per delegati NNAPI .
  • Il delegato GPU è disponibile su Android e iOS, utilizzando rispettivamente OpenGL/OpenCL e Metal. Per provarli, consulta il tutorial e la documentazione del GPU delegate .
  • Il delegato Hexagon è disponibile su Android. Sfrutta il DSP Qualcomm Hexagon se disponibile sul dispositivo. Per ulteriori informazioni, vedere l' esercitazione sul delegato Hexagon .
  • È possibile creare il proprio delegato se si ha accesso a hardware non standard. Per ulteriori informazioni, consulta Delegati 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 ciascun delegato per vedere se è una buona scelta per la tua applicazione. Ad esempio, se hai un modello molto piccolo, potrebbe non valere la pena delegare il modello all'API NN o alla GPU. Al contrario, gli acceleratori rappresentano un’ottima scelta per i modelli di grandi dimensioni con elevata intensità aritmetica.

Serve ancora aiuto

Il team di TensorFlow è felice di aiutarti a diagnosticare e risolvere i problemi di prestazioni specifici che potresti riscontrare. Invia un problema su GitHub con i dettagli del problema.