使用 8 位量化轻松优化深度学习

计算机视觉也有类似的进步,现在被用于安全、安保和智慧城市应用。与语音识别一样,如果在边缘设备上进行深度学习推理,应用程序的响应速度会更快。与数据中心的网络连接会带来不可避免的延迟。

但是,边缘设备的资源有限,因此需要优化深度学习模型以获得最佳性能。

一种方法是量化,将用于参数信息的 32 位浮点数 (FP32) 转换为 8 位整数 (INT8)。对于准确性的小幅损失,可以显着节省内存和计算需求。

使用较低精度的数字,可以同时处理更多数字,从而提高应用程序性能。从 FP32 量化到 INT8 时,理论上的最大性能提升是 4 倍。

当前和最新的英特尔® CPU 和英特尔® 集成 GPU 支持 INT8,但旧硬件不支持。

克服量化的挑战

量化有两个挑战:

  • 如何轻松做到。在过去,这是一个耗时的过程。
  • 如何保持准确性。

神经网络压缩框架 (NNCF) 解决了这两个挑战。NNCF 是一套高级算法,用于优化英特尔® Distribution of OpenVINO ™工具包中的机器学习和深度学习模型以进行推理。NNCF 使用来自 PyTorch 和 TensorFlow 的模型。

NNCF的主要特点之一 是 8 位统一量化,利用最近的学术研究来创建准确和快速的模型。我们将在本文中介绍的技术称为量化感知训练 (QAT)。该方法在训练模型时模拟权重和激活的量化,因此模型中的操作在推理时可以被视为 8 位操作。微调用于恢复量化造成的精度下降。QAT 比模型训练后进行量化具有更好的准确性和可靠性。

与其他优化工具不同,NNCF 不需要用户手动更改模型或了解量化的工作原理。它是高度自动化的。您只需要使用 NNCF 特定调用来包装模型,并对原始训练数据集进行通常的微调。

如何使用 NNCF 进行统一的 8 位量化

对于这个分步示例,我们将使用来自 Torchvision 库的 PyTorch 的 ResNet-18 图像分类模型。它已经使用 ImageNet 进行了预训练,可用于广泛的应用。除了分类任务(例如分类狗的种类),它还可以作为对象检测、人员识别或图像分割管道的一部分。

您可以在此处下载包含以下步骤的 Jupyter Notebook

第 1 步:安装先决条件

创建一个单独的 Python 虚拟环境并在其中安装以下先决条件:

Python
<span style="color:#000000"><span style="background-color:#fbedbb">$pip install nncf[torch]
$pip install openvino openvino-dev</span></span>

第 2 步:从 Python 代码中导入 NNCF

通过将以下 Python 指令添加到您的训练程序来导入 NNCF:

Python

第三步:准备模型和数据

我们假设用户有自己的原始 FP32 模型的训练管道,包括模型加载、数据准备和训练循环的步骤。

Python

OpenVINO TM推理引擎使用在训练期间插入模型的量化规则在推理期间将模型转换为 INT8。

调用create_compressed_model插入操作模拟训练期间的 8 位量化。这种模拟有助于微调过程来调整模型,以恢复由量化过程引起的精度偏差。

第 4 步:像往常一样微调模型

接下来,使用常规微调过程来提高准确性。通常,需要以较小的学习率进行多次调整,这与通常在原始模型训练结束时使用的相同。这是我们训练程序中微调代码的简单示例。我们没有更改此代码。

不需要对训练管道进行其他更改。

第 5 步:将模型导出到 ONNX

要在 OpenVINO 推理引擎中使用 PyTorch 模型,我们首先需要将模型转换为 ONNX。

我们将使用 NNCF 辅助函数将量化模型导出为 ONNX 格式。对于图像分类模型,API 很简单。对于其他一些模型,您可能需要为导出添加额外的功能,例如,虚拟前向功能。

微调完成后,我们调用此代码将微调后的模型导出为 ONNX 格式:

第 6 步:将 ONNX 模型导出到 OpenVINO™ 中间表示 (IR)

OpenVINO 中间表示 (IR) 是 OpenVINO 推理引擎使用的文件格式。我们现在可以通过调用 OpenVINO TM模型优化器工具将 ONNX 模型转换为 OpenVINO IR 格式。

代表模型的两个文件保存到当前目录。我们将平均值添加到模型中,并使用 --mean_values 和 --scale_values 参数使用标准偏差缩放输出。这些值用于在训练期间对输入进行归一化,并表示所有训练图像的颜色强度的平均值和标准差。

使用这些模型优化器选项,无需在部署时规范化输入数据。预处理将成为模型的一部分。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
互联网公司的深度学习模型可以使用不同的框架和技术来实现。例如,百度的mobile-deep-learning(MDL)框架提供了模型转换、加载、网络管理和矩阵运算等功能,以及供Android端调用的JNI接口层。该框架可以将Caffe模型转换为MDL模型,并支持将32浮点型参数量化为8参数,从而压缩模型体积。开发者可以通过调用JNI接口轻松完成加载和预测过程。[1] 另外,苹果公司在2017年推出了Core ML框架,用于在iOS设备上使用机器学习模型。Core ML的主要作用是将已经训练好的模型转换为iOS可理解的形式,并通过将新的数据输入模型来获取输出。这样,开发者可以轻松地在iOS应用程序中使用已经训练好的模型,而无需自己寻找模型或编写跨平台调用的代码。Core ML还可以利用iOS设备的GPU性能和Metal来进行矩阵运算,从而提高模型的性能。[2] 此外,还有其他一些方法和技术用于优化深度学习模型。例如,基于参数修剪和共享的方法可以去除冗余和不重要的参数项。基于低秩因子分解的技术使用矩阵/张量分解来估计模型的信息参数。基于传输/紧凑卷积滤波器的方法设计了特殊的结构卷积滤波器来降低存储和计算复杂度。知识蒸馏方法通过学习一个蒸馏模型,训练一个更紧凑的神经网络来重现一个更大的网络的输出。[3] 总之,互联网公司可以使用不同的框架和技术来实现深度学习模型,并通过优化方法和技术来提高模型的性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值