La quantizzazione post-addestramento include tecniche generali per ridurre la latenza, l'elaborazione, la potenza e le dimensioni del modello della CPU e dell'acceleratore hardware con un lieve degrado dell'accuratezza del modello. Queste tecniche possono essere eseguite su un modello TensorFlow float già addestrato e applicate durante la conversione di TensorFlow Lite. Queste tecniche sono abilitate come opzioni nel convertitore TensorFlow Lite .
Per passare direttamente agli esempi end-to-end, consulta i seguenti tutorial:
- Quantizzazione della gamma dinamica post-allenamento
- Quantizzazione intera completa post-addestramento
- Quantizzazione float16 post-allenamento
Pesi quantizzanti
I pesi possono essere convertiti in tipi con precisione ridotta, come numeri in virgola mobile a 16 bit o numeri interi a 8 bit. In genere consigliamo numeri in virgola mobile a 16 bit per l'accelerazione GPU e numeri interi a 8 bit per l'esecuzione della CPU.
Ad esempio, ecco come specificare la quantizzazione del peso intero a 8 bit:
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_quant_model = converter.convert()
Durante l'inferenza, le parti più critiche vengono calcolate con 8 bit anziché in virgola mobile. C'è un certo sovraccarico delle prestazioni in termini di tempo di inferenza, relativo alla quantizzazione di entrambi i pesi e le attivazioni di seguito.
Per ulteriori informazioni, consulta la guida alla quantizzazione post-addestramento di TensorFlow Lite.
Quantizzazione intera completa di pesi e attivazioni
Migliora la latenza, l'elaborazione e il consumo energetico e accedi ad acceleratori hardware solo interi assicurandoti che sia i pesi che le attivazioni siano quantizzati. Ciò richiede un piccolo set di dati rappresentativi.
import tensorflow as tf
def representative_dataset_gen():
for _ in range(num_calibration_steps):
# Get sample input data as a numpy array in a method of your choosing.
yield [input]
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset_gen
tflite_quant_model = converter.convert()
Il modello risultante riceverà comunque input e output float per comodità.
Per ulteriori informazioni, consulta la guida alla quantizzazione post-addestramento di TensorFlow Lite.