训练后量化包括通用技术,可以减少 CPU 和硬件加速器的延迟、处理、功耗和模型大小,同时几乎不会降低模型精度。这些技术可以在已训练的浮点 TensorFlow 模型上执行,并在 TensorFlow Lite 转换期间应用。这些技术在 TensorFlow Lite 转换器 中作为选项启用。
要直接进入端到端示例,请参阅以下教程
量化权重
权重可以转换为精度降低的类型,例如 16 位浮点数或 8 位整数。我们通常建议使用 16 位浮点数进行 GPU 加速,使用 8 位整数进行 CPU 执行。
例如,以下是如何指定 8 位整数权重量化
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()
在推理时,最关键的密集部分使用 8 位而不是浮点数进行计算。与在下面量化权重和激活相比,推理时间性能开销略有增加。
有关更多信息,请参阅 TensorFlow Lite 训练后量化 指南。
权重和激活的全整数量化
通过确保权重和激活都被量化,可以提高延迟、处理和功耗,并访问仅整数的硬件加速器。这需要一个小的代表性数据集。
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()
为了方便起见,生成的模型仍然会接收浮点输入并输出浮点输出。
有关更多信息,请参阅 TensorFlow Lite 训练后量化 指南。