Ottimizzazione del modello

I dispositivi Edge spesso hanno memoria o potenza di calcolo limitate. È possibile applicare varie ottimizzazioni 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.

È consigliabile 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 sull'hardware edge.

Perché i modelli dovrebbero essere ottimizzati

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

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 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 dell'utente.
  • Dimensioni di download inferiori: i modelli più piccoli richiedono meno tempo e larghezza di banda per il download sui dispositivi degli utenti.
  • Meno utilizzo della memoria: i modelli più piccoli utilizzano meno RAM durante l'esecuzione, liberando memoria da utilizzare per altre parti dell'applicazione e garantendo prestazioni e stabilità migliori.

La quantizzazione può ridurre la dimensione di un modello in tutti questi casi, potenzialmente a scapito di una certa precisione. La potatura e il clustering possono ridurre le dimensioni di un modello per il download 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 accuratezza.

Compatibilità con l'acceleratore

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

Generalmente, 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 relativi requisiti.

Compromessi

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

Le variazioni di 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 potrebbero 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 dimensioni del modello più piccole e calcoli più rapidi.

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 Processore, GPU
Quantizzazione della gamma dinamica post-allenamento Nessun dato Fino al 75% Perdita di precisione minima CPU, GPU (Android)
Quantizzazione intera post-addestramento Campione rappresentativo senza etichetta Fino al 75% Piccola perdita di precisione CPU, GPU (Android), EdgeTPU, DSP esagonale
Formazione consapevole della quantizzazione Dati di addestramento etichettati Fino al 75% Perdita di precisione minima CPU, GPU (Android), EdgeTPU, DSP esagonale

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

albero decisionale di quantizzazione

Di seguito sono riportati i risultati di latenza e precisione per la quantizzazione post-addestramento e l'addestramento sensibile alla quantizzazione su alcuni modelli. Tutti i numeri di latenza vengono misurati sui dispositivi Pixel 2 utilizzando un'unica CPU big core. Man mano che il toolkit migliora, aumenteranno anche i numeri qui:

Modello Precisione top-1 (originale) Precisione top 1 (quantizzazione post-allenamento) Precisione di prim'ordine (formazione basata sulla quantizzazione) Latenza (originale) (ms) Latenza (quantizzata post-allenamento) (ms) Latenza (formazione con riconoscimento della 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
Inception_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 intera 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 la precisione 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 di metrica di precisione Precisione (attivazioni float32) Precisione (attivazioni int8) Precisione (attivazioni int16)
Wav2lettera WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (srotolato) CER 6,13% 43,67% 6,52%
YoloV3 mAP(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Precisione top-1 0,7062 0,694 0,6936
MobileNetV2 Precisione top-1 0,718 0,7126 0,7137
MobileBert 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 minimo 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 l'eliminazione una tecnica utile per ridurre le dimensioni di download del modello.

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

Raggruppamento

Il clustering funziona raggruppando i pesi di ciascun 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 distribuzione 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-addestramento poiché è ampiamente applicabile e non richiede dati di addestramento.

Nei casi in cui gli obiettivi di precisione e latenza non vengono soddisfatti o il supporto dell'acceleratore hardware è importante, la formazione basata sulla quantizzazione è l'opzione migliore. Consulta ulteriori tecniche di ottimizzazione nel TensorFlow Model Optimization Toolkit .

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