OpenVINO™ API 2.0 迁移指南

简介

旧版 OpenVINO™(2022.1 之前)在从其他框架(如 TensorFlow、ONNX Runtime、PyTorch、PaddlePaddle 等)迁移应用时需要更改应用逻辑。需要更改的原因如下:

  • 模型优化器更改了某些输入的输入精度。例如,具有 I64 输入的神经语言处理模型在更改后包含 I32 输入。

  • 模型优化器更改了 TensorFlow 模型的布局(请参阅 OpenVINO 中的布局)。因此在使用布局不同于框架布局的输入数据时有特殊要求:

    _images/tf_openvino.png
  • 由于设备插件的限制,推理引擎 API (InferenceEngine::CNNNetwork) 应用了一些输入和输出精度的转换规则。

  • 在模型优化器中进行模型转换期间,用户需要指定输入形状,并在应用中使用静态形状。

像在原始框架中一样,全新的 OpenVINO™ 引入了 API 2.0(也称为 OpenVINO API v2)来调整使用模型的逻辑,没有布局和精度更改,而是使用张量名称和索引来处理输入和输出。OpenVINO™ 运行时将用于推理的推理引擎 API 与用于处理模型和操作的 nGraph API 相结合。API 2.0 有通用的结构、命名约定样式、命名空间,并移除了重复的结构。有关详细信息,请参阅 OpenVINO API v2 对推理管道的更改

备注

您现有的应用将继续正常使用 OpenVINO™ 运行时 2022.1。尽管如此,我们强烈建议迁移到 API 2.0,以便解锁其他功能,如预处理动态形状支持

IR v11 简介

为了支持这些功能,OpenVINO 引入了 IR v11,它现在是默认版本的模型优化器。以 IR v11 表示的模型的输入和输出与原始框架格式下的原始模型完全匹配。此外,无需在转换过程中指定输入形状,因此生成的 IR v11 包含 -1,用于表示未定义维度。要充分利用此功能,请参阅使用动态形状或者,要在应用中更改为静态形状,请参阅更改输入形状

请注意,IR v11 与利用旧版 OpenVINO 所使用的推理引擎 API 编写的旧应用完全兼容。这是因为 IR v11 包含额外的运行时信息,允许向后兼容。这意味着,如果基于推理引擎的应用读取 IR v11,将会在内部将其转换为 IR v10。

所有 OpenVINO™ 开发工具都支持 IR v11,包括训练后优化工具、基准测试应用等。

IR v10 兼容性

API 2.0 还支持 IR v10 格式的模型,以实现向后兼容。如果您有 IR v10 文件,也可以将其馈送给 OpenVINO™ 运行时(请参阅迁移步骤)。

一些 OpenVINO™ 开发工具还支持将 IR v10 和 IR v11 作为输入:

  • 默认情况下,精度检查器使用 API 2.0 进行模型精度测量,但也支持使用 --use_new_api False 命令行参数切换到旧 API。这两个启动程序都与 IR v10 和 v11 兼容,但在某些情况下应更新配置文件。更多详细信息可在精度检查器文档中找到。

  • 默认情况下,编译工具编译要在 API 2.0 中使用的模型。如果要在推理引擎 API 下使用生成的已编译 Blob,应传递附加 ov_api_1_0 选项。

以下 OpenVINO 工具不支持将 IR v10 作为输入,并且需要最新版本的模型优化器来生成 IR v11 文件:

  • 训练后优化工具

  • 深度学习工作台

备注

如果您需要量化 IR v10 模型,以便在 OpenVINO 2022.1 中运行,建议下载并使用 OpenVINO 2021.4 版本中的训练后优化工具。

推理引擎与 OpenVINO™ 运行时 2022.1 之间的区别

推理引擎和 nGraph API 未弃用,它们功能齐全,可以在应用中使用。但是,强烈建议迁移到 API 2.0,因为它提供了将在未来版本中进一步扩展的额外功能。以下是 API 2.0 支持的额外功能列表:

  • 使用动态形状。该功能可在使用兼容模型(如 NLP(神经语言处理)和超分辨率模型)时提高性能。

  • 模型预处理。该功能在推理模型中添加了预处理操作,完全占用加速器,从而释放 CPU 资源。

要定义推理引擎和 API 2.0 之间的 API 差异,需要定义两种类型的行为:

  • OpenVINO 的旧行为假定:

    • 模型优化器可以改变原始框架中模型的输入元素类型、维度顺序(布局)。

    • 推理引擎可以覆盖输入和输出元素类型。

    • 推理引擎 API 使用操作名称对输入和输出进行寻址(例如,InferenceEngine::InferRequest::GetBlob)。

    • 推理引擎 API 不支持具有动态输入形状的模型的编译。

  • 新行为假定模型与框架完全一致,并在 OpenVINO 2022.1 中实施:

    • 模型优化器保留输入元素类型、维度顺序(布局),并存储原始模型中的张量名称。

    • OpenVINO™ 运行时 2022.1 读取任何格式(IR v10、IR v11、ONNX、PaddlePaddle 等)的模型。

    • API 2.0 使用张量名称。请注意,张量名称与操作名称之间的区别在于,如果单个操作有几个输出张量,则不能以唯一的方式识别这些张量,因此像通常在框架中一样使用张量名称进行寻址。

    • API 2.0 还可以通过索引对输入和输出张量进行寻址。一些模型格式(如 ONNX)对 OpenVINO 2022.1 保留的输入和输出顺序很敏感。

下表说明了基于这两个 API 的模型使用哪种行为:行为还是行为。

API

IR v10

IR v11

ONNX 文件

使用代码创建的模型

推理引擎/nGraph API

API 2.0

查看这些迁移指南,了解如何将基于推理引擎的应用迁移到 API 2.0: