Best practice per il rendimento

I dispositivi mobili e incorporati hanno risorse di calcolo limitate, quindi è importante garantire l'efficienza delle risorse dell'applicazione. Abbiamo compilato un elenco di best practice e strategie utili per migliorare le prestazioni del tuo modello TensorFlow Lite.

Scegli il modello migliore per l'attività

A seconda dell'attività, dovrai trovare un compromesso tra complessità e dimensioni del modello. Se l'attività richiede un'elevata precisione, potrebbe essere necessario un modello ampio e complesso. Per le attività che richiedono meno precisione, è preferibile utilizzare un modello più piccolo perché non solo utilizzano meno spazio su disco e memoria, ma sono anche più veloci ed efficienti dal punto di vista energetico. Ad esempio, i grafici seguenti mostrano i compromessi in termini di accuratezza e latenza per alcuni modelli comuni di classificazione delle immagini.

Grafico delle dimensioni del modello rispetto
alla precisione

Grafico di accuratezza e latenza

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

Puoi riaddestrare i modelli elencati sul tuo set di dati utilizzando Transfer Learning.

Profilazione del modello

Dopo aver selezionato un modello candidato adatto all'attività, è buona norma profilarlo e confrontarlo con il modello. Lo strumento di benchmarking di TensorFlow Lite è dotato di un profiler integrato che mostra le statistiche di profilazione per operatore. Questo può aiutarti a comprendere i colli di bottiglia delle prestazioni e gli operatori che dominano i tempi di calcolo.

Puoi anche utilizzare il tracciamento di TensorFlow Lite per profilare il modello nella tua applicazione Android, utilizzando il tracciamento standard del sistema Android, e per visualizzare le chiamate degli operatori in base al tempo con strumenti di profilazione basati su GUI.

Profila e ottimizza gli operatori nel grafico

Se un determinato operatore compare di frequente nel modello e, in base alla profilazione, ti accorgi che il tempo utilizzato dall'operatore è maggiore, puoi cercare di ottimizzare l'operatore. Questo scenario dovrebbe verificarsi raramente, in quanto 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 degli operatori personalizzati.

Ottimizza il modello

L'ottimizzazione dei modelli ha l'obiettivo di creare modelli più piccoli che siano in genere più veloci ed efficienti dal punto di vista energetico, in modo che sia possibile eseguirne il deployment sui dispositivi mobili. TensorFlow Lite supporta diverse tecniche di ottimizzazione, come la quantizzazione.

Per informazioni dettagliate, consulta la documentazione sull'ottimizzazione dei modelli.

Modificare il numero di thread

TensorFlow Lite supporta kernel multi-thread per molti operatori. Puoi aumentare il numero di thread e accelerare l'esecuzione degli operatori. Tuttavia, l'aumento del numero di thread comporterà l'utilizzo di più risorse e potenza da parte del modello.

Per alcune applicazioni, la latenza può essere più importante dell'efficienza energetica. Puoi aumentare il numero di thread impostando il numero di thread dell'interprete. L'esecuzione multi-thread, tuttavia, comporta una maggiore variabilità delle prestazioni a seconda di ciò che viene eseguito contemporaneamente. in particolare per le app mobile. Ad esempio, i test isolati potrebbero mostrare una velocità raddoppiata rispetto a quella a thread singolo, ma, se un'altra app viene eseguita contemporaneamente, potrebbe comportare prestazioni peggiori rispetto a quelle a thread singolo.

Elimina le copie ridondanti

Se l'applicazione non è progettata con attenzione, potrebbero verificarsi copie ridondanti durante l'invio di input e la lettura dell'output al modello. Assicurati di eliminare le copie ridondanti. Se utilizzi API di livello superiore, come Java, assicurati di controllare attentamente la documentazione per verificare le eventuali avvertenze sulle prestazioni. Ad esempio, l'API Java è molto più veloce se vengono utilizzati ByteBuffers come input.

Profila la tua applicazione con strumenti specifici della piattaforma

Strumenti specifici per le piattaforme come Android Profiler e Strumenti forniscono un'ampia gamma di informazioni di profilazione che possono essere utilizzate per eseguire il debug della tua app. A volte il bug relativo alle prestazioni potrebbe non essere nel modello, ma in parti del codice dell'applicazione che interagiscono con il modello. Assicurati di acquisire familiarità con gli strumenti di profilazione specifici della piattaforma e le best practice 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ù veloci come GPU, DSP e acceleratori neurali. In genere, questi acceleratori vengono esposti tramite sottomoduli delegati che prendono in carico parti dell'esecuzione dell'interprete. TensorFlow Lite può utilizzare i delegati:

  • Il delegato GPU è disponibile su Android e iOS rispettivamente con OpenGL/OpenCL e Metal. Per provarle, consulta la pagina del delegato GPU.
  • Puoi creare il tuo delegato se hai accesso ad hardware non standard. Per ulteriori informazioni, consulta la pagina relativa ai delegati di TensorFlow Lite.

Tieni presente che alcuni acceleratori funzionano meglio per diversi tipi di modelli. Alcuni delegati supportano solo modelli float o ottimizzati in un modo specifico. È importante eseguire un benchmark per ciascun delegato per vedere se è una buona scelta per la domanda. Ad esempio, se hai un modello molto piccolo, potrebbe non valere la pena delegarlo alla GPU. Gli acceleratori sono invece un'ottima scelta per i modelli di grandi dimensioni con un'elevata intensità aritmetica.