Ottimizzazione del modello

I dispositivi periferici spesso hanno una memoria o una potenza di calcolo limitate. È possibile applicare varie ottimizzazioni ai modelli in modo che possano essere eseguiti entro questi vincoli. Inoltre, alcune ottimizzazioni consentono l'utilizzo di hardware specializzato per l'inferenza accelerata.

LiteRT e il toolkit TensorFlow Model Optimization forniscono strumenti per ridurre al minimo la complessità dell'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 l'ottimizzazione dei modelli TensorFlow per il deployment su hardware edge.

Perché i modelli devono essere ottimizzati

L'ottimizzazione del modello può contribuire allo sviluppo di applicazioni in diversi modi.

Riduzione delle dimensioni

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

  • Dimensioni di archiviazione più 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 di un utente.
  • Dimensioni di download inferiori:i modelli più piccoli richiedono meno tempo e larghezza di banda per il download sui dispositivi degli utenti.
  • Minore utilizzo di memoria:i modelli più piccoli utilizzano meno RAM quando vengono eseguiti, il che libera memoria per altre parti dell'applicazione e può tradursi in prestazioni e stabilità migliori.

La quantizzazione può ridurre le dimensioni di un modello in tutti questi casi, potenzialmente a scapito di una certa precisione. Il pruning e il 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 calcoli necessari per eseguire l'inferenza utilizzando un modello, con conseguente riduzione della latenza. La latenza può anche influire 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à degli acceleratori

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

In genere, questi tipi di dispositivi richiedono che i modelli vengano quantizzati in un modo specifico. Per saperne di più sui requisiti di ciascun acceleratore hardware, consulta la relativa documentazione.

Compromessi

Le ottimizzazioni possono potenzialmente comportare modifiche alla precisione del modello, che devono essere prese in considerazione durante il processo di sviluppo dell'applicazione.

Le modifiche all'accuratezza dipendono dal modello specifico che viene ottimizzato ed è difficile prevederle in anticipo. In genere, i modelli ottimizzati per le dimensioni o la latenza perdono una piccola quantità di precisione. A seconda della tua applicazione, questa operazione potrebbe influire o meno sull'esperienza dei tuoi utenti. In rari casi, alcuni modelli potrebbero guadagnare un po' di precisione a seguito del processo di ottimizzazione.

Tipi di ottimizzazione

Al momento LiteRT supporta l'ottimizzazione tramite quantizzazione, potatura e clustering.

Questi fanno parte del toolkit TensorFlow Model Optimization, che fornisce risorse per tecniche di ottimizzazione dei modelli compatibili con TensorFlow Lite.

Quantizzazione

La quantizzazione riduce la precisione dei numeri utilizzati per rappresentare i parametri di un modello, che per impostazione predefinita sono numeri in virgola mobile a 32 bit. In questo modo le dimensioni del modello sono inferiori e il calcolo è più rapido.

In LiteRT sono disponibili i seguenti tipi di quantizzazione:

Tecnica Requisiti dei dati Riduzione delle dimensioni Precisione Hardware supportato
Quantizzazione post-training float16 Nessun dato Fino al 50% Perdita di precisione non significativa CPU, GPU
Quantizzazione dinamica dell'intervallo post-addestramento Nessun dato Fino al 75% Perdita di precisione minima CPU, GPU (Android)
Quantizzazione degli interi post-addestramento Campione rappresentativo senza etichetta Fino al 75% Piccola perdita di precisione CPU, GPU (Android), EdgeTPU
Addestramento consapevole della quantizzazione Dati di addestramento etichettati Fino al 75% Perdita di precisione minima CPU, GPU (Android), EdgeTPU

Il seguente albero decisionale ti aiuta a selezionare gli schemi di quantizzazione che potresti voler utilizzare per il tuo modello, in base alle dimensioni e all'accuratezza previste.

quantization-decision-tree

Di seguito sono riportati i risultati di latenza e accuratezza per la quantizzazione post-addestramento e l'addestramento consapevole della quantizzazione su alcuni modelli. Tutti i numeri di latenza vengono misurati su dispositivi Pixel 2 che utilizzano una singola CPU big core. Man mano che il toolkit migliora, aumenteranno anche i numeri qui:

Modello Accuratezza Top-1 (originale) Accuratezza Top-1 (quantizzazione post-addestramento) Accuratezza Top-1 (addestramento consapevole della quantizzazione) Latenza (originale) (ms) Latenza (quantizzazione post-addestramento) (ms) Latenza (addestramento con riconoscimento della quantizzazione) (ms) Dimensioni (originale) (MB) Dimensione (ottimizzata) (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 113084554395,723.9
Resnet_v2_1010,7700,768N/D 39732868N/D178,344,9
Tabella 1 Vantaggi della quantizzazione del modello per modelli CNN selezionati

Quantizzazione di interi completa con attivazioni int16 e pesi int8

La quantizzazione con attivazioni int16 è uno schema di quantizzazione intero completo con attivazioni in int16 e pesi in int8. Questa modalità può migliorare l'accuratezza del modello quantizzato rispetto allo schema di quantizzazione degli interi completo con attivazioni e pesi in int8 mantenendo dimensioni del modello simili. È consigliato quando le attivazioni sono sensibili alla quantizzazione.

NOTA:al momento in TFLite sono disponibili solo implementazioni del kernel di riferimento non ottimizzate per questo schema di quantizzazione, pertanto per impostazione predefinita il rendimento sarà lento rispetto ai kernel int8. I vantaggi completi di questa modalità possono essere attualmente accessibili tramite hardware specializzato o software personalizzato.

Di seguito sono riportati i risultati di accuratezza per alcuni modelli che traggono vantaggio da questa modalità.

Modello Tipo di metrica Accuratezza Precisione (attivazioni float32) Precisione (attivazioni int8) Precisione (attivazioni int16)
Wav2letterWER6,7%7,7% 7,2%
DeepSpeech 0.5.1 (unrolled)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Accuratezza top-10.70620,694 0,6936
MobileNetV2Accuratezza top-10,7180,7126 0,7137
MobileBertF1(corrispondenza esatta)88,81(81,23)2,08(0) 88,73(81,15)
Tabella 2 Vantaggi della quantizzazione del modello con attivazioni int16

Potatura

La potatura funziona rimuovendo i parametri all'interno di un modello che hanno un impatto minimo sulle sue previsioni. I modelli sottoposti a pruning hanno le stesse dimensioni su disco e la stessa latenza di runtime, ma possono essere compressi in modo più efficace. Ciò rende il pruning una tecnica utile per ridurre le dimensioni di download del modello.

In futuro, LiteRT fornirà una riduzione della latenza per i modelli potati.

Clustering

Il clustering funziona raggruppando i pesi di ogni livello di un modello in un numero predefinito di cluster, quindi condividendo i valori del centroide per i pesi appartenenti a ciascun cluster individuale. In questo modo si riduce il numero di valori di peso unici in un modello, riducendone così la complessità.

Di conseguenza, i modelli in cluster possono essere compressi in modo più efficace, fornendo vantaggi di implementazione simili alla potatura.

Flusso di lavoro di sviluppo

Come punto di partenza, controlla se i modelli in modelli ospitati possono funzionare per la tua applicazione. In caso contrario, consigliamo agli utenti di iniziare con lo strumento di quantizzazione post-addestramento, poiché è ampiamente applicabile e non richiede dati di addestramento.

Per i casi in cui i target di precisione e latenza non vengono raggiunti o il supporto dell'acceleratore hardware è importante, l'addestramento quantizzazione consapevole è l'opzione migliore. Consulta altre tecniche di ottimizzazione nella sezione TensorFlow Model Optimization Toolkit.

Se vuoi ridurre ulteriormente le dimensioni del modello, puoi provare il pruning e/o il clustering prima di quantizzare i modelli.