低精确度优化指南

简介

本文档提供了有关如何使用 OpenVINO™ 工具套件的低精度功能的最著名方法,以便通过量化等方法将模型转换为对硬件更友好的表示。

目前,这些功能由几个组件表示:

前两个组件是 OpenVINO 工具套件本身的一部分,而后一个组件是构建在 PyTorch* 框架之上的独立工具,与 OpenVINO™ 高度一致。

本文档介绍了 OpenVINO™ 中模型优化流程的高级方面。

常规信息

低精度是指深度学习模型推理低于 32 或 16 位的精度,例如 FLOAT32FLOAT16。例如,低精度推理的最流行位宽是 INT8 (UINT8),因为有可能获得准确的 8 位模型,从而大大加快推理速度。这些模型由量化模型表示,即在浮点精度下训练的模型,然后通过层之间的浮点/定点量化运算转换为整数表示。这种转换可以使用后训练方法或额外的再训练/微调来完成。

从 OpenVINO 2020.1 发行版开始,所有量化模型使用所谓的 FakeQuantize 层来表示,这个层是一个具有表现力的原语,能够表示 QuantizeDequantizeRequantize 等等运算。该运算在量化过程中被插入到模型中,旨在存储层的量化参数。有关此运算的更多详情,请参阅以下描述

为了执行这种“假量化”模型,OpenVINO 有一个低精度运行时,它是推理引擎的一部分,由一个将模型转换为实整数表示的通用组件和在相应硬件插件中实施的硬件特定部分组成。

模型优化工作流程

我们提出了一个与其他 DL 框架内容相一致的通用工作流程。它包含两个主要组件:训练后量化和量化感知训练(QAT)。第一个组件是获得优化模型的最简单方法,当第一个组件无法给出准确结果时,可以将后者视为替代或补充。

下图显示了使用 OpenVINO 和相关工具对新模型进行优化的流程。

  • 步骤 0:模型启用。在此步骤,我们应当确保在目标数据集上训练的模型可以使用浮点精度的 OpenVINO 推理引擎实现成功推理。此过程需要使用模型优化器工具,将模型从源框架转换为 OpenVINO 中间表示 (IR),并使用推理引擎在 CPU 上运行。

    :此步骤假设该模型具有在原始训练框架中相同的精度,并在精度检查器工具中或通过自定义验证样本来启用。

    - 步骤 1:训练后量化。作为优化的第一步,我们建议使用来自 POT 的 INT8 量化,在大多数情况下可以获得准确的量化模型。在这一步,您不需要重新训练模型。唯一需要的是一个有代表性的数据集,通常是数百张图像,用于在量化过程中收集统计数据。训练后量化也非常快,通常需要几分钟,具体取决于模型大小和使用的硬件。一般而言,普通的台式机系统足以量化大多数 OpenVINO Model Zoo。有关训练后优化最佳实践的更多信息,请参阅训练后优化最佳实践
  • 步骤 2:量化感知训练:如果量化模型的精度不满足精度标准,则有第二步,这意味着使用与 OpenVINO 兼容的训练框架进行 QAT。在此步骤,我们假设用户拥有一个在 TensorFlow*PyTorch* 上编写的模型的原始训练管道。在这一步之后,您可以获得一个准确的优化模型,该模型可以使用模型优化器组件转换为 OpenVINO 中间表示 (IR),并使用 OpenVINO 推理引擎进行推理。