https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwXP7BuHot2koArH9S5nPmWm-wx-tdexWb-dMz2MV-zFMAwzc0noIgku3leoqWVxXg5wuLthrPvj2zE_RYpCbaOlNXPXdq0u7nhevDxB4vNckle9aaIIXF3-wTxM1ej6EWslT7FK7bJL4/s1600/watermelon.gif
我们很高兴在 TensorFlow 中推出一个新的优化工具包:一套技术,开发者(无论新手还是高级)都可以使用它来优化机器学习模型以进行部署和执行。
虽然我们预计这些技术将有助于优化任何用于部署的 TensorFlow 模型,但它们对于在内存、功耗和存储限制严格的设备上提供模型的 TensorFlow Lite 开发人员来说尤为重要。如果你还没有尝试过 TensorFlow Lite,可以在这里了解更多信息。
|
优化模型以减少尺寸、延迟和功耗,而精度损失可忽略不计 |
我们添加支持的第一个技术是将训练后量化添加到 TensorFlow Lite 转换工具中。这可以使相关的机器学习模型的压缩率提高到 4 倍,执行速度提高到 3 倍。
通过量化他们的模型,开发人员还可以获得功耗降低的额外好处。这对于边缘设备的部署(超越移动电话)非常有用。
启用训练后量化
训练后量化技术已集成到 TensorFlow Lite 转换工具中。入门很容易:在构建 TensorFlow 模型后,开发人员只需在 TensorFlow Lite 转换工具中启用 ‘post_training_quantize’ 标志即可。假设保存的模型存储在 saved_model_dir 中,则可以生成量化的 tflite flatbuffer
converter=tf.contrib.lite.TocoConverter.from_saved_model(saved_model_dir)
converter.post_training_quantize=True
tflite_quantized_model=converter.convert()
open(“quantized_model.tflite”, “wb”).write(tflite_quantized_model)
我们的
教程 将详细介绍如何执行此操作。将来,我们还打算将这种技术融入通用的 TensorFlow 工具中,以便它可以用于目前 TensorFlow Lite 不支持的平台上的部署。
训练后量化的优势
- 模型尺寸缩减 4 倍
- 主要由卷积层组成的模型的执行速度提高了 10-50%
- 基于 RNN 的模型的速度提高了 3 倍
- 由于内存和计算要求的降低,我们预计大多数模型的功耗也会降低
请参阅下面的图表,了解一些模型的模型尺寸缩减和执行时间加速情况(测量结果是在 Android Pixel 2 手机上使用单个核心进行的)。
|
图 1:模型尺寸比较:优化后的模型尺寸缩减了近 4 倍 |
|
图 2:延迟比较:优化后的模型速度提高了 1.2 到 1.4 倍 |
这些速度提升和模型尺寸缩减对精度影响很小。一般来说,对于手头任务来说已经很小的模型(例如,用于图像分类的 mobilenet v1)可能会出现更大的精度损失。对于这些模型中的许多模型,我们提供了
预训练的完全量化模型。
我们预计将来会继续改进我们的结果,因此请参阅
模型优化 指南以获取最新的测量结果。
训练后量化工作原理
在幕后,我们通过降低参数(即神经网络权重)的精度来运行优化(也称为量化),将其从训练时的 32 位浮点数表示转换为更小更有效的 8 位整数表示。有关更多详细信息,请参阅
训练后量化 指南。
这些优化将确保将结果模型中降低精度的操作定义与使用混合定点和浮点数学的内核实现配对。这将以较低的精度快速执行最重的计算,但以较高的精度执行最敏感的计算,因此通常会导致任务的最终精度损失很小甚至没有,但比纯浮点执行速度快得多。对于没有匹配的“混合”内核或工具包认为有必要的操作,它将重新将参数转换为较高的浮点精度以进行执行。请参阅
训练后量化 页面以获取支持的混合操作列表。
未来工作
我们将继续改进训练后量化,并研究其他技术,使模型优化变得更加容易。这些技术将集成到相关的 TensorFlow 工作流程中,使其易于使用。
训练后量化是我们正在开发的优化工具包的第一项功能。我们期待收到开发人员的反馈。
请在
GitHub 上提交问题,并在
Stack Overflow 上提问。
鸣谢
我们要感谢 Raghu Krishnamoorthi、Raziel Alvrarez、Suharsh Sivakumar、Yunlu Li、Alan Chiao、Pete Warden、Shashi Shekhar、Sarah Sirajuddin 和 Tim Davis 的核心贡献。Mark Daoust 帮助创建了 colab 教程。Billy Lamberta 和 Lawrence Chan 帮助创建了 网站。