I dispositivi periferici hanno spesso una memoria o una potenza di calcolo limitate. Vari le ottimizzazioni possono essere applicate ai modelli in modo che possano essere eseguiti all'interno i vincoli. Inoltre, alcune ottimizzazioni consentono l'utilizzo di strumenti per un'inferenza accelerata.
LiteRT e ottimizzazione del modello TensorFlow Toolkit fornisce strumenti per per minimizzare la complessità dell'ottimizzazione dell'inferenza.
Ti consigliamo di prendere in considerazione l'ottimizzazione del modello durante l'applicazione il processo di sviluppo. Questo documento illustra alcune best practice per l'ottimizzazione. Modelli TensorFlow per il deployment su hardware perimetrale.
Perché i modelli dovrebbero essere ottimizzati
Ci sono diversi modi principali in cui l'ottimizzazione del modello può aiutare con l'applicazione sviluppo del prodotto.
Riduzione delle dimensioni
Alcune forme di ottimizzazione possono essere utilizzate per ridurre le dimensioni di un modello. Più piccola offrono i seguenti vantaggi:
- Spazio di archiviazione ridotto:i modelli più piccoli occupano meno spazio di archiviazione sul tuo utente dispositivi mobili. Ad esempio, un'app per Android che usa un modello più piccolo prenderà di 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 scaricare nei file degli utenti dispositivi mobili.
- Minore utilizzo di memoria: i modelli più piccoli utilizzano meno RAM durante l'esecuzione, il che libera memoria da utilizzare per altre parti dell'applicazione migliorano le prestazioni e la stabilità.
La quantizzazione può ridurre le dimensioni di un modello in tutti questi casi, a scapito di una certa accuratezza. Il potatura e il clustering possono ridurre le dimensioni di per scaricarlo, rendendolo più facilmente comprimibile.
Riduzione della latenza
La latenza è la quantità di tempo necessaria per eseguire una singola inferenza con un un modello di machine learning. Alcune forme di ottimizzazione possono ridurre la quantità di calcolo richiesta eseguire l'inferenza utilizzando un modello, con una latenza inferiore. La latenza può anche hanno un impatto sul consumo energetico.
Attualmente, la quantizzazione può essere utilizzata per ridurre la latenza semplificando calcoli che avvengono durante l'inferenza, potenzialmente a scapito di la precisione.
Compatibilità con l'acceleratore
Alcuni acceleratori hardware, come Edge TPU, può eseguire l'inferenza in modo estremamente veloce che sono stati ottimizzati correttamente.
In genere, questi tipi di dispositivi richiedono che i modelli siano quantificati in una specifica in molti modi diversi. Consulta la documentazione di ciascun acceleratore hardware per saperne di più sui relativi i tuoi requisiti.
Scontri
Le ottimizzazioni possono potenzialmente portare a modifiche all'accuratezza del modello, che devono essere considerati durante il processo di sviluppo dell'applicazione.
Le modifiche all'accuratezza dipendono dal singolo modello ottimizzato e sono difficili da prevedere in anticipo. In genere, i modelli ottimizzati dimensioni o latenza perdono una piccola quantità di precisione. In base l'applicazione, ciò potrebbe influire o meno sui tuoi utenti un'esperienza senza intervento manuale. In rari casi, alcuni modelli possono acquisire una certa precisione in seguito al processo di ottimizzazione.
Tipi di ottimizzazione
LiteRT attualmente supporta l'ottimizzazione tramite quantizzazione, eliminazione e per il clustering.
Queste fanno parte del modulo TensorFlow Model Optimization Toolkit, che fornisce risorse per le tecniche di ottimizzazione dei modelli compatibili con TensorFlow Lite.
Quantizzazione
Quantizzazione riduce la precisione dei numeri utilizzati per rappresentare il valore , che per impostazione predefinita sono numeri in virgola mobile a 32 bit. Ciò porta il modello ha dimensioni ridotte e il calcolo è più veloce.
In LiteRT sono disponibili i seguenti tipi di quantizzazione:
Tecnica | Requisiti dei dati | Riduzione delle dimensioni | Accuratezza | Hardware supportato |
---|---|---|---|---|
Quantizzazione float16 dopo l'addestramento | Nessun dato | Fino al 50% | Perdita di accuratezza insignificante | CPU, GPU |
Quantizzazione dell'intervallo dinamico dopo l'addestramento | Nessun dato | Fino al 75% | Perdita di precisione minima | CPU, GPU (Android) |
Quantizzazione dei numeri interi post-addestramento | Campione 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% | Perdita di precisione minima | CPU, GPU (Android), EdgeTPU |
Il seguente albero decisionale ti aiuta a selezionare gli schemi di quantizzazione che si vuole utilizzare per il modello, semplicemente in base alle dimensioni la precisione.
Di seguito sono riportati i risultati relativi a latenza e accuratezza per la quantizzazione post-addestramento e basato sulla quantizzazione su alcuni modelli. Tutti i valori di latenza vengono misurati Dispositivi Pixel 2 che utilizzano una singola CPU big core. Man mano che il toolkit migliora, i numeri qui:
Modello | Accuratezza massima (originale) | Accuratezza top-1 (quantizzata dopo la formazione) | Accuratezza massima (formazione sensibile alla quantizzazione) | Latenza (originale) (ms) | Latenza (quantitata post addestramento) (ms) | Latenza (addestramento sensibile alla 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/D | 3973 | 2868 | N/D | 178,3 | 44,9 |
Quantizzazione completa di interi con attivazioni int16 e pesi int8
Quantizzazione con attivazioni int16 è uno schema di quantizzazione di interi interi con attivazioni in int16 e pesi in int8. Questa modalità può migliorare l'accuratezza del modello quantizzato rispetto al schema di quantizzazione di numeri interi completi con attivazioni e pesi in int8 mantenendo dimensioni del modello simili. È consigliato se le attivazioni sono sensibili alla quantizzazione.
NOTA: attualmente solo le implementazioni del kernel di riferimento non ottimizzate vengono disponibile in TFLite per questo schema di quantizzazione. Per impostazione predefinita, sarà lento rispetto ai kernel int8. Tutti i vantaggi di questa modalità possono sono attualmente accessibili tramite hardware specializzato o software personalizzato.
Di seguito sono riportati i risultati relativi all'accuratezza per alcuni modelli che traggono vantaggio da questa modalità.
Modello | Tipo di metrica di precisione | Precisione (attivazioni float32) | Precisione (attivazioni int8) | Precisione (attivazioni int16) |
---|---|---|---|---|
Wav2letter | WER | 6,7% | 7,7% | 7,2% |
DeepSpeech 0.5.1 (non in sequenza) | CER | 6,13% | 43,67% | 6,52% |
YoloV3 | mAP(IOU=0,5) | 0,577 | 0,563 | 0,574 |
MobileNetV1 | Accuratezza massima | 0,7062 | 0,694 | 0,6936 |
MobileNetV2 | Accuratezza massima | 0,718 | 0,7126 | 0,7137 |
MobileBert | F1(corrispondenza esatta) | 88,81(81,23) | 2,08(0) | 88,73(81,15) |
Potatura
Il potatura funziona rimuovendo i parametri all'interno di un modello che hanno solo un impatto minimo sul suo per le previsioni. I modelli eliminati hanno le stesse dimensioni su disco e hanno lo stesso runtime latenza, ma può essere compressa in modo più efficace. Di conseguenza, l'eliminazione è un'utile per ridurre le dimensioni di download del modello.
In futuro, LiteRT fornirà una riduzione della latenza per i modelli eliminati.
Clustering
Cluster funziona raggruppando i pesi di ogni livello di un modello in un numero predefinito di cluster, quindi condividono i valori baricentro per i pesi appartenenti in un singolo cluster. Questo riduce il numero di valori di ponderazione univoci in un modello, riducendone così la complessità.
Di conseguenza, i modelli in cluster possono essere compressi in modo più efficace, e i vantaggi del deployment simili all'eliminazione.
Flusso di lavoro per lo sviluppo
Come punto di partenza, verificate se i modelli in ospitati modelli personalizzati possono funzionare per la tua applicazione. In caso contrario, consigliamo agli utenti di iniziare con la quantizzazione post-addestramento strumento poiché si applica su larga scala e non richiedono dati di addestramento.
Per i casi in cui i target di accuratezza e latenza non vengono soddisfatti o il supporto dell'acceleratore è importante, in grado di rilevare la quantizzazione formazione è l'opzione migliore. Scopri altre tecniche di ottimizzazione nella Ottimizzazione del modello TensorFlow di Google.
Se vuoi ridurre ulteriormente le dimensioni del modello, puoi provare a eliminarlo e/o il clustering prima di quantificare i modelli.