A quantização pós-treinamento inclui técnicas gerais para reduzir a latência, processamento, potência e tamanho do modelo da CPU e do acelerador de hardware, com pouca degradação na precisão do modelo. Essas técnicas podem ser executadas em um modelo flutuante do TensorFlow já treinado e aplicadas durante a conversão do TensorFlow Lite. Essas técnicas são habilitadas como opções no conversor TensorFlow Lite .
Para ir direto aos exemplos completos, consulte os seguintes tutoriais:
- Quantização de faixa dinâmica pós-treinamento
- Quantização inteira completa pós-treinamento
- Quantização float16 pós-treinamento
Quantizando pesos
Os pesos podem ser convertidos em tipos com precisão reduzida, como números flutuantes de 16 bits ou inteiros de 8 bits. Geralmente recomendamos floats de 16 bits para aceleração de GPU e números inteiros de 8 bits para execução de CPU.
Por exemplo, aqui está como especificar a quantização de peso inteiro de 8 bits:
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()
Na inferência, as partes mais intensivas são calculadas com 8 bits em vez de ponto flutuante. Há alguma sobrecarga de desempenho no tempo de inferência, em relação à quantização dos pesos e ativações abaixo.
Para obter mais informações, consulte o guia de quantização pós-treinamento do TensorFlow Lite.
Quantização inteira completa de pesos e ativações
Melhore a latência, o processamento e o uso de energia e obtenha acesso a aceleradores de hardware somente inteiros, certificando-se de que os pesos e as ativações sejam quantizados. Isto requer um pequeno conjunto de dados representativo.
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()
O modelo resultante ainda terá entrada e saída flutuante por conveniência.
Para obter mais informações, consulte o guia de quantização pós-treinamento do TensorFlow Lite.