TensorFlow 模型优化工具 — float16 量化将模型体积减半
我们很高兴在模型优化工具包中添加训练后的半精度浮点量化 (float16 quantization),此工具套件包含混合量化 (hybrid quantization)、训练后整形量化 (full integer quantization) 和剪枝 (pruning)。点此查看发展蓝图中的其他工具。
训练后的半精度浮点量化可以在损失极少准确度的情况下,缩小 TensorFlow Lite 模型的大小(最高可缩减 50%)。它将模型常量(如权重和偏差值)从全精度浮点(32 位)量化为精度下降的浮点数据类型 (IEEE FP16)。
注:量化 链接
https://tensorflow.google.cn/model_optimization/guide#quantization
训练后的半精度浮点量化不但对准确度的影响很小,而且能显著缩小模型尺寸,因而是初始量化 TensorFlow Lite 模型的好工具。您可在此处查看我们的文档(包含新的浮点图表),了解不同的量化选项和方案。
注:文档 链接
https://tensorflow.google.cn/lite/performance/post_training_quantization
降低精度的益处
精度降低存在诸多益处,尤其是部署在边缘设备时:
模型尺寸缩减一半。模型中的所有常量值均存储在 16 位浮点而非 32 位浮点中。这些常量值通常决定模型的总体尺寸,因此可以将模型尺寸缩减约一半。 精度损失微乎其微。与初始训练精度相比,深度学习模型使用较低精度时通常可以产生良好的推理结果。我们对多个模型进行实验,发现推理质量的损失甚微。在下面的例子中可以看到,MobileNet V2 的 Top 1 准确度下降小于 0.03%(参见下文结果)。
模型大小缩减一半,准确度损失微乎其微
训练后的半精度浮点量化对准确度影响甚小,却可将深度学习模型的尺寸缩减约一半。例如,以下是 MobileNet V1 和 V2 模型以及 MobileNet SSD 模型的一些结果。MobileNet V1 和 V2 的准确度结果基于 ImageNet 图像识别任务,对 SSD 模型的评估则基于 COCO 对象识别任务。
注: ImageNet 链接
http://image-net.org/
COCO 链接
http://cocodataset.org/
模型准确度
对标准 Mobilenet float32 模型(与 fp16 变体)的评估基于 LSVRC 2012 图像分类任务,对 Mobilenet SSD float32 及其 fp16 变体的评估则基于 COCO 对象检测任务。
注:LSVRC 2012 图像分类任务 链接
http://www.image-net.org/challenges/LSVRC/2012/
COCO 对象检测任务 链接
http://cocodataset.org/#detection-eval
如何启用训练后的半精度浮点量化
1import tensorflow as tf
2converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
3converter.optimizations = [tf.lite.Optimize.DEFAULT]
4converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]
5Tflite_quanit_model = converter.convert()
模型转换完成后可直接运行,这与其他 TensorFlow Lite 模型并无二致。默认情况下,模型会将 16 位参数“上采样”为 32 位,接着在标准 32 位浮点运算中执行操作,最终在 CPU 上运行。随着时间推移,我们有望看到有更多的硬件支持加速 fp16 计算,允许我们跳过上采样的步骤,直接使用 float16 精度进行计算。1//Prepare GPU delegate.
2const TfLiteGpuDelegateOptions options = {
3 .metadata = NULL,
4 .compile_options = {
5 .precision_loss_allowed = 1, // FP16
6 .preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,
7 .dynamic_batch_enabled = 0, // Not fully functional yet
8 },
9};
如需 GPU 委派概览,请参阅先前的博文。请在此 Colab 教程中查看使用半精度浮点量化的工作示例。注:GPU 委派 链接
https://tensorflow.google.cn/lite/performance/gpu_advanced
委派概览 链接
https://medium.com/tensorflow/tensorflow-lite-now-faster-with-mobile-gpus-developer-preview-e15797e6dee7
Colab 链接
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/g3doc/performance/post_training_float16_quant.ipynb
建议您立即试用此工具并提供反馈。直接分享您的用例或在 Twitter 上使用 #TFLite 和 #PoweredByTF 标签分享。
注:提交用例 链接
https://services.google.cn/fb/forms/TFCS/
致谢
T.J. Alumbaugh、Andrei Kulik、Juhyun Lee、Jared Duke、Raziel Alvarez、Sachin Joglekar、Jian Li、Yunlu Li、Suharsh Sivakumar、Nupur Garg、Lawrence Chan、Andrew Selle。
更多 TensorFlow Lite 相关阅读: