Ottimizzazione del modello

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

I dispositivi edge hanno spesso memoria o potenza di calcolo limitate. Varie ottimizzazioni possono essere applicate ai modelli in modo che possano essere eseguiti entro questi vincoli. Inoltre, alcune ottimizzazioni consentono l'uso di hardware specializzato per l'inferenza accelerata.

TensorFlow Lite e TensorFlow Model Optimization Toolkit forniscono strumenti per ridurre al minimo la complessità dell'ottimizzazione dell'inferenza.

Si consiglia di considerare l'ottimizzazione del modello durante il processo di sviluppo dell'applicazione. Questo documento delinea alcune best practice per l'ottimizzazione dei modelli TensorFlow per la distribuzione su hardware edge.

Perché i modelli dovrebbero essere ottimizzati

Esistono diversi modi principali in cui l'ottimizzazione del modello può aiutare con lo sviluppo di applicazioni.

Riduzione delle dimensioni

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

  • Dimensioni di archiviazione ridotte: i modelli più piccoli occupano meno spazio di archiviazione sui dispositivi degli utenti. Ad esempio, un'app Android che utilizza un modello più piccolo occuperà meno spazio di archiviazione sul dispositivo mobile di un utente.
  • Dimensioni di download ridotte: i modelli più piccoli richiedono meno tempo e larghezza di banda per il download sui dispositivi degli utenti.
  • Minore utilizzo della memoria: i modelli più piccoli utilizzano meno RAM durante l'esecuzione, il che libera memoria per l'utilizzo da parte di 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. L'eliminazione e il raggruppamento possono ridurre le dimensioni di un modello da scaricare rendendolo più facilmente comprimibile.

Riduzione della latenza

La latenza è la quantità di tempo necessaria 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 minore 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 acceleratore

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

In genere, questi tipi di dispositivi richiedono che i modelli siano quantizzati in un modo specifico. Consulta la documentazione di ciascun acceleratore hardware per ulteriori informazioni sui requisiti.

Compromessi

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

Le modifiche alla precisione 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 precisione. A seconda dell'applicazione, ciò potrebbe influire o meno sull'esperienza degli utenti. In rari casi, alcuni modelli possono acquisire una certa precisione come risultato del processo di ottimizzazione.

Tipi di ottimizzazione

TensorFlow Lite attualmente supporta l'ottimizzazione tramite quantizzazione, potatura e clustering.

Questi fanno parte del TensorFlow Model Optimization Toolkit , che fornisce risorse per le tecniche di ottimizzazione del modello 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ù veloce.

In TensorFlow Lite sono disponibili i seguenti tipi di quantizzazione:

Tecnica Requisiti dei dati Riduzione delle dimensioni Precisione Hardware supportato
Quantizzazione float16 post-allenamento Nessun dato Fino a 50% Perdita di precisione insignificante CPU, GPU
Quantizzazione della gamma dinamica post-allenamento Nessun dato Fino al 75% Perdita di precisione minima CPU, GPU (Android)
Quantizzazione di interi post-allenamento Campione rappresentativo senza etichetta Fino al 75% Piccola perdita di precisione CPU, GPU (Android), EdgeTPU, Hexagon DSP
Formazione consapevole della quantizzazione Dati di allenamento etichettati Fino al 75% Perdita di precisione minima CPU, GPU (Android), EdgeTPU, Hexagon DSP

Il seguente albero decisionale ti aiuta a selezionare gli schemi di quantizzazione che potresti voler utilizzare per il tuo modello, semplicemente in base alla dimensione e alla precisione del modello previste.

albero decisionale di quantizzazione

Di seguito sono riportati i risultati di latenza e accuratezza per la quantizzazione post-allenamento e l'allenamento consapevole della quantizzazione su alcuni modelli. Tutti i numeri di latenza vengono misurati sui dispositivi Pixel 2 utilizzando un'unica grande CPU core. Man mano che il toolkit migliora, anche i numeri qui:

Modello Precisione top-1 (originale) Precisione Top-1 (quantizzato dopo l'allenamento) Precisione Top-1 (formazione basata sulla quantizzazione) Latenza (originale) (ms) Latenza (quantizzata dopo l'allenamento) (ms) Latenza (formazione basata sulla quantizzazione) (ms) Dimensioni (originale) (MB) Dimensioni (ottimizzate) (MB)
Mobilenet-v1-1-224 0,709 0,657 0,70 124 112 64 16.9 4.3
Mobilenet-v2-1-224 0,719 0,637 0,709 89 98 54 14 3.6
Inizio_v3 0,78 0,772 0,775 1130 845 543 95.7 23.9
Resnet_v2_101 0,770 0,768 N / A 3973 2868 N / A 178.3 44.9
Tabella 1 Vantaggi della quantizzazione del modello per modelli CNN selezionati

Quantizzazione intera 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 intero intero con attivazioni e pesi in int8 mantenendo una dimensione del modello simile. È consigliato quando le attivazioni sono sensibili alla quantizzazione.

NOTA: Attualmente in TFLite sono disponibili solo implementazioni del kernel di riferimento non ottimizzate 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 di precisione per alcuni modelli che beneficiano di questa modalità.

Modello Tipo metrico di precisione Precisione (attivazioni float32) Precisione (attivazioni int8) Precisione (attivazioni int16)
Wav2letter WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (srotolato) CER 6,13% 43,67% 6,52%
Yolo V3 mappa(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Precisione tra i primi 1 0,7062 0,694 0,6936
MobileNetV2 Precisione tra i primi 1 0,718 0,7126 0,7137
Mobile Bert F1 (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 solo un impatto minore sulle sue previsioni. I modelli eliminati hanno le stesse dimensioni su disco e hanno la stessa latenza di runtime, ma possono essere compressi in modo più efficace. Ciò rende la potatura una tecnica utile per ridurre le dimensioni del download del modello.

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

Raggruppamento

Il clustering funziona raggruppando i pesi di ogni livello in un modello in un numero predefinito di cluster, quindi condividendo i valori del centroide per i pesi appartenenti a ciascun singolo cluster. Ciò riduce il numero di valori di peso univoci in un modello, riducendone così la complessità.

Di conseguenza, i modelli in cluster possono essere compressi in modo più efficace, offrendo vantaggi di implementazione simili all'eliminazione.

Flusso di lavoro di sviluppo

Come punto di partenza, controlla 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-allenamento poiché è ampiamente applicabile e non richiede dati di addestramento.

Per i casi in cui gli obiettivi di accuratezza e latenza non vengono raggiunti o il supporto dell'acceleratore hardware è importante, l'addestramento basato sulla quantizzazione è l'opzione migliore. Vedere ulteriori tecniche di ottimizzazione nel TensorFlow Model Optimization Toolkit .

Se desideri ridurre ulteriormente le dimensioni del tuo modello, puoi provare a sfoltire e/o raggruppare prima di quantizzare i tuoi modelli.