Ottimizzazione del modello

I dispositivi periferici spesso hanno memoria o potenza di calcolo limitata. Possono essere applicate varie ottimizzazioni ai modelli in modo da poterli eseguire all'interno di questi vincoli. Inoltre, alcune ottimizzazioni consentono l'uso di hardware specializzato per l'inferenza accelerata.

TensorFlow Lite e il Toolkit per l'ottimizzazione dei modelli TensorFlow forniscono strumenti per ridurre al minimo la complessità nell'ottimizzazione dell'inferenza.

Ti consigliamo di prendere in considerazione l'ottimizzazione del modello durante il processo di sviluppo dell'applicazione. Questo documento descrive alcune best practice per ottimizzare i modelli TensorFlow per il deployment su hardware periferico.

Perché i modelli dovrebbero essere ottimizzati

L'ottimizzazione del modello può essere utile in vari modi per sviluppare le applicazioni.

Riduzione delle dimensioni

Alcune forme di ottimizzazione possono essere utilizzate per ridurre le dimensioni di un modello. I modelli più piccoli offrono i seguenti vantaggi:

  • Dimensioni dello spazio di archiviazione ridotte: i modelli più piccoli occupano meno spazio di archiviazione sui dispositivi degli utenti. Ad esempio, un'app per Android che utilizza un modello più piccolo occuperà meno spazio di archiviazione sul dispositivo mobile dell'utente.
  • Dimensioni di download ridotte: i modelli più piccoli richiedono meno tempo e larghezza di banda per il download sui dispositivi degli utenti.
  • Utilizzo ridotto della memoria:i modelli più piccoli utilizzano meno RAM quando vengono eseguiti, liberando memoria da usare per altre parti dell'applicazione e possono tradursi per prestazioni e stabilità migliori.

La quantizzazione può ridurre le dimensioni di un modello in tutti questi casi, a scapito potenzialmente di una certa accuratezza. Le operazioni di potatura e clustering possono ridurre le dimensioni di un modello per il download, rendendolo più facilmente comprimibile.

Riduzione della latenza

La latenza è il tempo necessario per eseguire una singola inferenza con un determinato modello. Alcune forme di ottimizzazione possono ridurre la quantità di calcolo richiesta per eseguire l'inferenza utilizzando un modello, con conseguente riduzione della latenza. La latenza può anche avere un impatto sul consumo energetico.

Attualmente, la quantizzazione può essere utilizzata per ridurre la latenza semplificando i calcoli che si verificano durante l'inferenza, potenzialmente a scapito di una certa precisione.

Compatibilità con acceleratori

Alcuni acceleratori hardware, come TPU Edge, possono eseguire l'inferenza in modo estremamente veloce con modelli ottimizzati correttamente.

In genere, questi tipi di dispositivi richiedono di quantificare i modelli in un modo specifico. Consulta la documentazione di ciascun acceleratore hardware per saperne di più sui requisiti.

Compromissioni

Le ottimizzazioni possono causare variazioni nell'accuratezza del modello, che devono essere considerate durante il processo di sviluppo dell'applicazione.

Le modifiche all'accuratezza dipendono dall'ottimizzazione del singolo modello e sono difficili da prevedere in anticipo. In genere, i modelli ottimizzati per dimensioni o latenza perdono una piccola quantità di accuratezza. A seconda dell'applicazione, questo potrebbe influire o meno sull'esperienza degli utenti. In rari casi, determinati modelli possono ottenere una certa precisione come risultato del processo di ottimizzazione.

Tipi di ottimizzazione

TensorFlow Lite al momento supporta l'ottimizzazione tramite quantizzazione, eliminazione e clustering.

Questi strumenti fanno parte del Toolkit per l'ottimizzazione dei modelli TensorFlow, che fornisce risorse per le tecniche di ottimizzazione dei modelli compatibili con TensorFlow Lite.

Quantizzazione

La Quantizzazione funziona riducendo la precisione dei numeri utilizzati per rappresentare i parametri di un modello, che per impostazione predefinita sono numeri in virgola mobile a 32 bit. Ciò si traduce in una dimensione del modello più piccola e un calcolo più rapido.

In TensorFlow Lite sono disponibili i seguenti tipi di quantizzazione:

Tecnica Requisiti relativi ai dati Riduzione delle dimensioni Accuratezza Hardware supportato
Quantizzazione float16 dopo l'addestramento Nessun dato Fino al 50% Perdita di precisione non significativa CPU, GPU
Quantizzazione dell'intervallo dinamico dopo l'addestramento Nessun dato Fino al 75% Minore perdita di accuratezza CPU, GPU (Android)
Quantizzazione dei numeri interi dopo l'addestramento Esempio rappresentativo senza etichetta Fino al 75% Perdita di precisione ridotta CPU, GPU (Android), EdgeTPU
Formazione sensibile alla quantizzazione Dati di addestramento etichettati Fino al 75% Minore perdita di accuratezza CPU, GPU (Android), EdgeTPU

Il seguente albero decisionale ti consente di selezionare gli schemi di quantizzazione che potresti usare per il tuo modello, semplicemente in base alle dimensioni e alla precisione del modello previste.

albero-decisionale-quantizzazione

Di seguito sono riportati i risultati di latenza e accuratezza per l'addestramento post-addestramento basato sulla quantizzazione su alcuni modelli. Tutti i valori di latenza vengono misurati sui dispositivi Pixel 2 utilizzando un'unica CPU big core. Man mano che il toolkit migliora, lo saranno anche le cifre:

Modello Accuratezza top-1 (originale) Accuratezza principale (quantizzati dopo l'addestramento) Accuratezza principale (formazione orientata alla quantizzazione) Latenza (originale) (ms) Latenza (quantizzata dopo l'addestramento) (ms) Latenza (addestramento basato sulla quantizzazione) (ms) Dimensioni (originale) (MB) Dimensioni (ottimizzate) (MB)
Mobilenet-v1-1-2240,7090,6570,70 1241126416,94.3
Mobilenet-v2-1-2240,7190,6370,709 899854143.6
Inception_v30,780,7720,775 113084554336,423,9
Resnet_v2_1010,7700,768N/A 39732868N/A178,344,9
Tabella 1 Vantaggi della quantizzazione dei modelli per determinati modelli CNN

Quantizzazione dei numeri interi con attivazioni int16 e pesi int8

La quantizzazione con attivazioni int16 è uno schema di quantizzazione di numeri interi completi con attivazioni in int16 e ponderazioni in int8. Questa modalità può migliorare l'accuratezza del modello quantizzato rispetto allo schema di quantizzazione dei numeri interi completi, con attivazioni e ponderazioni in int8, mantenendo le dimensioni del modello simili. È consigliata quando le attivazioni sono sensibili alla quantizzazione.

NOTA: attualmente solo le implementazioni del kernel di riferimento non ottimizzate sono disponibili in TFLite per questo schema di quantizzazione, quindi per impostazione predefinita le prestazioni saranno lente rispetto ai kernel int8. Attualmente, è possibile accedere a tutti i vantaggi di questa modalità tramite hardware specializzato o software personalizzato.

Di seguito sono riportati i risultati relativi all'accuratezza per alcuni modelli che beneficiano di questa modalità.

Modello Tipo di metrica di accuratezza Precisione (attivazioni di float32) Precisione (attivazioni in8) Accuratezza (attivazioni di in16)
Wav2letterWER6,7%7,7% 7,2%
DeepSpeech 0.5.1 (srotolato)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Accuratezza principale0,70620,694 0,6936
MobileNetV2Accuratezza principale0,7180,7126 0,7137
MobileBertF1(Corrispondenza esatta)88,81(81,23)2,08(0) 88,73(81,15)
Tabella 2 Vantaggi della quantizzazione dei modelli con attivazioni int16

Potatura

L'eliminazione consente di rimuovere i parametri all'interno di un modello che hanno un impatto minimo sulle sue previsioni. I modelli eliminati hanno le stesse dimensioni su disco e la stessa latenza di runtime, ma possono essere compressi in modo più efficace. Questo rende l'eliminazione una tecnica utile per ridurre le dimensioni di download del modello.

In futuro, TensorFlow Lite offrirà una riduzione della latenza per i modelli eliminati.

Clustering

Il clustering funziona raggruppando le ponderazioni di ogni livello di un modello in un numero predefinito di cluster, quindi condividendo i valori baridi per le ponderazioni appartenenti a ogni singolo cluster. Questo riduce il numero di valori di ponderazione univoci in un modello, riducendo così la sua complessità.

Di conseguenza, i modelli in cluster possono essere compressi in modo più efficace, fornendo vantaggi per il deployment simili all'eliminazione.

Flusso di lavoro di sviluppo

Come punto di partenza, verifica se i modelli nei modelli ospitati possono funzionare per la tua applicazione. In caso contrario, consigliamo agli utenti di iniziare con lo strumento di quantizzazione post-addestramento, dato che è applicabile su larga scala e non richiede dati di addestramento.

Per i casi in cui non vengono soddisfatti gli obiettivi di accuratezza e latenza o in cui è importante il supporto di un acceleratore hardware, l'addestramento basato sulla quantizzazione è l'opzione migliore. Scopri altre tecniche di ottimizzazione nel Toolkit per l'ottimizzazione dei modelli TensorFlow.

Se vuoi ridurre ulteriormente le dimensioni dei modelli, puoi provare a eliminare e/o eseguire il clustering prima di quantificarli.