开发者指南:使用 OpenVINO™ 工具包进行模型优化






3.40/5 (2投票s)
OpenVINO 提供了多种工具,可使模型运行更快并使用更少内存。在本文中,我们将探讨:每种工具的功能、何时应使用模型优化器、POT 和 NNCF,以及常见问题。
引言
在大多数实际应用中,深度学习 AI 模型必须经过优化以有效利用计算资源,从而实现快速性能。OpenVINO 提供了多种工具来使模型运行更快并使用更少内存:模型优化器 (Model Optimizer)、训练后优化工具 (Post-training Optimization Tool, POT) 和神经网络压缩框架 (Neural Network Compression Framework, NNCF)。
每种工具的功能是什么?
每种工具都提供了一组不同的功能,用于压缩模型并使其在目标硬件上运行更快。
- 模型优化器将来自各种框架的模型转换为 OpenVINO 格式或中间表示 (IR),从而使模型在英特尔硬件上更高效地运行。转换过程优化了网络拓扑的性能、空间使用,并减少了目标加速器上的计算要求。模型优化器不影响模型准确性。
- POT 允许您通过应用训练后量化来进一步加速 IR 模型的推理速度。这使得您的模型运行更快并使用更少内存。在某些情况下,它会导致准确性略有下降。
- NNCF 与 PyTorch 和 TensorFlow 集成,可在训练期间或训练后对模型进行量化和压缩,以提高模型速度,同时保持准确性并使其保持原始框架的格式。它可用于两件事:(1) 在 PyTorch 或 TensorFlow 训练管道中进行量化感知训练和其他压缩技术,以及 (2) 对 PyTorch 或 TensorFlow 模型进行训练后量化。如果您已经设置了 PyTorch 或 TensorFlow 中的模型和训练管道,那么 NNCF 可能比 POT 更容易用于训练后量化。
注意:如果您没有特定的模型或框架,您可以使用 OpenVINO 训练扩展 (OTE) 在 OpenVINO 的一个工作流程中训练和优化英特尔提供的几个模型中的一个,并使用您的数据集。有关更多信息,请参阅OTE 开发者指南。
我应该何时使用模型优化器、POT 和 NNCF?
要使用的最佳工具取决于您开始使用的模型、您需要多少优化以及您是否要在训练模型期间或之后应用优化。
- 如果您有来自另一个框架的训练好的或现成的模型,并且想使用 OpenVINO 提供的基本优化来运行它,请使用模型优化器。只需将您的模型转换为 OpenVINO 格式或 IR 文件,即可使用推理引擎或 OpenVINO Runtime 提高其在英特尔硬件上的性能。
- 如果您有训练好的或现成的模型,并且想要在模型优化器的基本优化之上轻松提高其速度,请使用 POT。将您的模型转换为 OpenVINO (IR) 格式,然后使用 POT 通过使用代表性数据集执行训练后量化来进一步提高其推理速度。重要的是要注意需要验证,因为我们已经改变了模型,以至于在生产中任何关键任务都可能受到影响。
- 如果您已经设置了 PyTorch 或 TensorFlow 中的训练管道,并且想要优化模型以适应英特尔硬件,请使用 NNCF。您可以对训练好的 PyTorch、TensorFlow 或 ONNX 模型执行训练后量化,以轻松提高速度,而无需重新运行训练。如果结果准确性不够高,请使用 NNCF 将压缩算法(例如,通过量化感知训练)添加到您的训练管道中,以提高优化模型的准确性。然后,使用模型优化器将量化模型转换为 IR 格式,以便使用 OpenVINO 运行时运行它。
下图显示了使用 POT 和 NNCF 的两种常见用例和工作流程。在这两个工作流程中,模型优化器用于将模型转换为 OpenVINO (IR) 格式。
用例表
下表列出了模型优化的其他常见用例,并指明了每种情况下建议使用模型优化器、POT 或 NNCF。
下一步去哪里
要了解更多信息,请查看这些链接和视频
- POT:通过遵循此10 分钟示例开始,该示例展示了 POT 优化可以提高模型速度和内存占用多少。
- NNCF:访问官方 GitHub 存储库以获取详细文档和使用示例。
- 在我们的笔记本中找到演示量化的正确解决方案。
常见问题解答
什么是量化?
量化是将神经网络中的权重和激活值从高精度格式(如 32 位浮点)转换为低精度格式(如 8 位整数)的过程。与通过模型优化器优化的网络相比,量化可以使神经网络运行速度快两到四倍。它还减少了在磁盘上保存网络所需的空间。
什么是量化感知训练,我为什么要使用它?
量化感知训练在训练期间将节点插入神经网络中,模拟低精度的效果。这使得训练算法可以将量化误差视为训练期间最小化的总训练损失的一部分。然后,网络在量化后能够实现更好的准确性。
NNCF 和 POT 量化之间有什么区别?
POT 接收完全训练好的模型和您提供的代表性数据集作为输入,并使用它们将权重和激活都量化为低精度格式。这样做的优点是模型不需要重新训练,并且您不需要安装训练管道或深度学习框架。相比之下,NNCF 执行量化感知训练,要求您安装训练管道和训练框架(TensorFlow 或 PyTorch)。NNCF 还支持 POT 中没有的一些额外的压缩算法(如下所示)。两者都生成一个优化的量化模型,该模型将比未量化模型运行更快且占用更少内存。使用 POT 中训练后量化量化的模型的准确性可能略低于通过 NNCF 进行量化感知训练的模型。
NNCF 是否支持训练后量化?
是的,NNCF 可以对 ONNX、PyTorch 或 TensorFlow 格式的模型执行训练后量化。这使您无需离开 TensorFlow 或 PyTorch 开发环境即可快速提高模型的速度。(如果您的模型已经是 OpenVINO (IR) 格式,则建议使用 POT 进行训练后量化)。在 GitHub 上的 OpenVINO 工具包存储库中提供了一个演示如何使用 NNCF 执行训练后量化的示例笔记本。
POT 是否支持量化感知训练?
不,POT 只提供训练后模型量化的工具。如果您想使用量化感知训练,请查看 NNCF。
POT 是否允许您在量化模型时在速度和准确性之间进行权衡?
是的,POT 提供了一种精度感知量化算法,您可以在其中指定可接受的精度下降的最大范围。必要时,它会将某些层从 8 位精度恢复到原始精度(可以是 16 位或 32 位)。这将降低模型的速度,但最大限度地减少精度的下降。有关如何配置精度参数并将其集成到基本量化工作流中的信息,请参阅有关精度感知量化的文档。
我需要 OpenVINO (IR) 模型才能使用 POT 吗?
是的,POT 仅适用于已转换为 OpenVINO (IR) 格式的模型。有关如何将模型转换为 OpenVINO 格式的说明,请参阅OpenVINO 模型优化器工具文档。
我需要安装 TensorFlow 或 PyTorch 才能使用 NNCF 吗?
是的,NNCF 旨在与 TensorFlow 或 PyTorch 结合使用。要使用 NNCF,您需要安装并设置一个带有任一框架的训练管道。然后可以将 NNCF 优化添加到训练管道中,如 PyTorch 和 TensorFlow 的使用示例所示。
NNCF 中有哪些不同的压缩算法?
下表(来自 NNCF GitHub 存储库)显示了 NNCF 中可用的压缩算法,以及它们是否支持 PyTorch、TensorFlow 或两者。
╔═════════════════════════════╦══════════════════╦═════════════════╗
║Compression Algorithm ║ PyTorch ║ TensorsFlow ║
╠═════════════════════════════╬══════════════════╬═════════════════╣
║ Quantization ║ Supported ║ Supported ║
║ Mixed-Precision Quantization║ Supported ║ Not Supported ║
║ Binarization ║ Supported ║ Not Supported ║
║ Sparsity ║ Supported ║ Supported ║
║ Filter pruning ║ Supported ║ Supported ║
╚═════════════════════════════╩══════════════════╩═════════════════╝
如何安装模型优化器、POT 和 NNCF?
有关每种工具的安装说明,请参阅以下链接
我需要 GPU 才能使用模型优化器、POT 和 NNCF 吗?
- 使用模型优化器不需要 GPU。所有转换都在 CPU 上执行。
- 使用 POT 不需要 GPU。训练后量化在 CPU 上运行,并快速量化模型(取决于模型和数据集的大小)。优化后的模型可以配置为在 GPU 上运行,但优化本身只需要 CPU。
- 如果您的 PyTorch 或 TensorFlow 训练管道配置为在 GPU 上运行,那么在训练期间运行 NNCF 压缩算法需要 GPU。如果您的训练管道配置为在 CPU 上运行,则不需要 GPU,但训练通常需要更长时间。
如果我想优化模型,我应该首先尝试哪个工具?
首先,从模型优化器开始,将模型转换为 OpenVINO (IR) 格式,该格式应用基线优化以提高模型性能。如果您想要更好的性能,可以使用 NNCF 或 POT 量化模型。NNCF 和 POT 之间的选择取决于您的模型和训练管道。
- 如果您在 PyTorch 或 TensorFlow 中设置了模型和训练管道,则使用 NNCF 优化模型。使用 NNCF 对模型执行训练后量化,然后与原始模型比较性能。如果准确性不够高,请使用 NNCF 将量化感知训练添加到您的管道中。这使您可以在提高量化模型准确性的同时,仍能实现推理速度的类似提升。
- 如果您已经为您的应用程序训练了一个模型,但没有在 PyTorch 或 TensorFlow 中设置训练管道,请使用 POT 进行优化。在使用模型优化器将模型转换为 OpenVINO (IR) 格式后,使用 POT 使用代表性数据集执行训练后量化。它允许您提高模型速度并在量化后评估其准确性。
我可以使用 OpenVINO 训练模型吗?
OpenVINO 并非旨在成为通用神经网络训练框架。也就是说,OpenVINO 训练扩展 (OTE) 可用于使用您自己的数据集训练英特尔提供的几个模型之一,并且它支持使用 POT 和 NNCF 的内置功能进行优化。有关 OTE 及其使用方法的更多信息,请阅读 OpenVINO 训练扩展开发者指南以获取有关 OTE 及其使用方法的更多信息。
我在哪里可以找到有关模型优化器、POT 和 NNCF 的更多信息?
- 要了解有关模型优化器的更多信息,请访问官方文档。
- 要了解有关 POT 的更多信息,请访问官方文档。
- NNCF 的文档和使用示例可以在NNCF GitHub 存储库中找到。
资源
声明和免责声明
性能因使用、配置和其他因素而异。访问 www.Intel.com/PerformanceIndex 了解更多信息。
性能结果基于所显示日期在特定配置下进行的测试,可能无法反映所有公开可用的更新。有关配置详情,请参阅备份。任何产品或组件都不能做到绝对安全。
您的成本和结果可能会有所不同。
英特尔技术可能需要启用硬件、软件或服务激活。
英特尔不承担所有明示和默示担保,包括但不限于适销性、特定用途适用性和不侵权的默示担保,以及因履行过程、交易过程或贸易惯例而产生的任何担保。
© Intel Corporation。Intel、Intel 标志、OpenVINO 和 OpenVINO 标志是 Intel Corporation 或其子公司的商标。其他名称和品牌可能被声明为他人的财产。