由 TensorFlow 模型优化维护
量化有两种形式:训练后量化和量化感知训练。从 训练后量化 开始,因为它更易于使用,尽管量化感知训练通常更能提高模型精度。
本页面概述了量化感知训练,以帮助您确定它如何适合您的用例。
- 要直接进入端到端示例,请参阅 量化感知训练示例。
- 要快速找到用例所需的 API,请参阅 量化感知训练综合指南。
概述
量化感知训练模拟推理时量化,创建下游工具将用于生成实际量化模型的模型。量化模型使用较低精度(例如 8 位而不是 32 位浮点数),从而在部署期间带来优势。
使用量化部署
量化通过模型压缩和延迟减少带来改进。使用 API 默认值,模型大小缩小了 4 倍,并且我们在测试的后端中通常会看到 CPU 延迟提高 1.5 到 4 倍。最终,可以在兼容的机器学习加速器(例如 EdgeTPU 和 NNAPI)上看到延迟改进。
该技术在生产中用于语音、视觉、文本和翻译用例。当前代码支持 这些模型的子集。
使用量化和相关硬件进行实验
用户可以配置量化参数(例如位数)以及在一定程度上配置底层算法。请注意,对于这些与 API 默认值不同的更改,目前没有支持的后端部署路径。例如,TFLite 转换和内核实现仅支持 8 位量化。
特定于此配置的 API 处于实验阶段,不受向后兼容性的约束。
API 兼容性
用户可以使用以下 API 应用量化
- 模型构建:
keras
,仅限 Sequential 和 Functional 模型。 - TensorFlow 版本:TF 2.x for tf-nightly。
tf.compat.v1
与 TF 2.X 包不兼容。
- TensorFlow 执行模式:急切执行
我们正在路线图中添加以下方面的支持
- 模型构建:阐明子类模型如何有限地支持或不支持
- 分布式训练:
tf.distribute
通用支持矩阵
以下方面提供支持
- 模型覆盖范围:使用 允许列表层 的模型,在 Conv2D 和 DepthwiseConv2D 层之后使用 BatchNormalization,以及在有限情况下使用
Concat
。 - 硬件加速:我们的 API 默认值与 EdgeTPU、NNAPI 和 TFLite 后端等加速器兼容。请参阅路线图中的注意事项。
- 使用量化部署:目前仅支持卷积层的逐轴量化,不支持逐张量量化。
我们正在路线图中添加以下方面的支持
- 模型覆盖范围:扩展到包括 RNN/LSTM 和通用 Concat 支持。
- 硬件加速:确保 TFLite 转换器可以生成全整型模型。有关详细信息,请参阅 此问题。
- 使用量化用例进行实验
- 使用跨越 Keras 层或需要训练步骤的量化算法进行实验。
- 稳定 API。
结果
使用工具进行图像分类
模型 | 非量化 Top-1 准确率 | 8 位量化准确率 |
---|---|---|
MobilenetV1 224 | 71.03% | 71.06% |
Resnet v1 50 | 76.3% | 76.1% |
MobilenetV2 224 | 70.77% | 70.01% |
这些模型在 ImageNet 上进行了测试,并在 TensorFlow 和 TFLite 中进行了评估。
图像分类技术
模型 | 非量化 Top-1 准确率 | 8 位量化准确率 |
---|---|---|
Nasnet-Mobile | 74% | 73% |
Resnet-v2 50 | 75.6% | 75% |
这些模型在 ImageNet 上进行了测试,并在 TensorFlow 和 TFLite 中进行了评估。
示例
除了 量化感知训练示例 之外,请参阅以下示例
- 使用量化的 MNIST 手写数字分类任务上的 CNN 模型:代码
有关类似内容的背景信息,请参阅用于高效整数算术推理的神经网络量化和训练 论文。本文介绍了此工具使用的一些概念。实现并不完全相同,并且此工具中使用了其他概念(例如逐轴量化)。