Best practice per le prestazioni

I dispositivi mobili e incorporati hanno risorse di calcolo limitate, quindi è importante mantenere efficienti le risorse delle applicazioni. 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à, dovrai trovare un compromesso tra la complessità e le dimensioni del modello. Se l'attività richiede un'accuratezza elevata, potrebbe essere necessario un modello grande e complesso. Per le attività che richiedono meno precisione, è preferibile utilizzare un modello più piccolo, in quanto non solo utilizzano meno spazio su disco e memoria, ma sono anche in genere 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 di classificazione delle immagini comuni.

Il grafico tra dimensione del modello
e accuratezza

Grafico tra accuratezza e latenza

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

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

Profilazione del modello

Una volta selezionato un modello candidato adatto alla tua attività, è buona norma profilare e confrontare il modello. Lo strumento di benchmark TensorFlow Lite ha un profiler integrato che mostra le statistiche di profilazione per operatore. Ciò può essere utile per comprendere i colli di bottiglia delle prestazioni e gli operatori che dominano il tempo di calcolo.

Puoi anche utilizzare il tracciamento di TensorFlow per profilare il modello nella tua applicazione Android, utilizzando il tracciamento standard del sistema Android, e per visualizzare le chiamate dell'operatore in base all'ora con strumenti di profilazione basati su GUI.

Profila e ottimizza gli operatori nel grafico

Se un particolare operatore viene visualizzato frequentemente nel modello e, in base alla profilazione, scopri che l'operatore utilizza la maggior quantità di tempo, puoi prendere in considerazione l'ottimizzazione di tale operatore. Si tratta di un caso raro, dato che TensorFlow Lite dispone di versioni ottimizzate per la maggior parte degli operatori. Tuttavia, potresti riuscire a scrivere una versione più rapida di un'operazione personalizzata se conosci i vincoli in cui viene eseguito l'operatore. Consulta la guida per gli operatori personalizzati.

Ottimizza il modello

L'ottimizzazione dei modelli mira a creare modelli più piccoli, generalmente più veloci ed efficienti dal punto di vista energetico, per poter essere implementati sui dispositivi mobili. TensorFlow Lite supporta diverse tecniche di ottimizzazione, come la quantizzazione.

Per maggiori dettagli, consulta la documentazione sull'ottimizzazione del modello.

Regolare il numero di thread

TensorFlow Lite supporta i kernel multi-thread per molti operatori. Puoi aumentare il numero di thread e velocizzare l'esecuzione degli operatori. Tuttavia, l'aumento del numero di thread farà sì che il modello utilizzi più risorse e potenza.

Per alcune applicazioni, la latenza può essere più importante dell'efficienza energetica. Puoi aumentare il numero di thread impostando il numero di thread interpretatori. L'esecuzione multi-thread, tuttavia, comporta una maggiore variabilità delle prestazioni a seconda di cos'altro viene eseguito contemporaneamente. in particolare le app per dispositivi mobili. Ad esempio, i test isolati possono mostrare una velocità di 2 volte superiore rispetto a quella a thread singolo, ma se un'altra app viene eseguita contemporaneamente, le prestazioni potrebbero peggiorare rispetto a quelle a thread singolo.

Elimina le copie ridondanti

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

Gli strumenti specifici per le piattaforme come profiler Android e Strumenti forniscono un'ampia gamma di informazioni di profilazione che puoi utilizzare per eseguire il debug della tua app. A volte il bug delle prestazioni potrebbe non essere presente nel modello, ma in parti del codice dell'applicazione che interagisce con il modello. Acquisisci familiarità con gli strumenti di profilazione e le best practice specifici della piattaforma.

Valuta se il tuo modello trae vantaggio dall'utilizzo di 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 occupano parti dell'esecuzione dell'interprete. TensorFlow Lite può utilizzare i delegati nei seguenti modi:

  • Il delegato GPU è disponibile su Android e iOS, rispettivamente utilizzando OpenGL/OpenCL e Metal. Per provarle, consulta il delegato alle GPU.
  • Se hai accesso a un hardware non standard, puoi creare il tuo delegato. Per ulteriori informazioni, vedi Delegati TensorFlow.

Tieni presente che alcuni acceleratori funzionano meglio per diversi tipi di modelli. Alcuni delegati supportano solo i modelli in virgola mobile o i modelli ottimizzati in un modo specifico. È importante sottoporre a benchmark ciascun delegato per verificare se si tratta di una buona scelta per la tua applicazione. Ad esempio, se hai un modello molto piccolo, potrebbe non valere la pena delegare il modello alla GPU. Al contrario, gli acceleratori sono un'ottima scelta per i modelli di grandi dimensioni ad alta intensità aritmetica.