A quantização pós-treinamento inclui técnicas gerais para reduzir a latência, processamento, potência e tamanho do modelo de CPU e 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 de ponta a ponta, consulte os seguintes tutoriais:
- Quantização de faixa dinâmica pós-treinamento
- Quantização inteira pós-treinamento
- Quantização float16 pós-treinamento
Quantização de pesos
Os pesos podem ser convertidos em tipos com precisão reduzida, como floats de 16 bits ou inteiros de 8 bits. Geralmente, recomendamos flutuações de 16 bits para aceleração da GPU e inteiros de 8 bits para execução da 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 críticas são computadas com 8 bits em vez de ponto flutuante. Há alguma sobrecarga de desempenho no tempo de inferência, em relação à quantificação de 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 inteira 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. Isso 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 flutuantes por conveniência.
Para obter mais informações, consulte o guia de quantização pós-treinamento do TensorFlow Lite.