OpenVINO™ API 2.0 迁移指南¶
简介¶
旧版 OpenVINO™(2022.1 之前)在从其他框架(如 TensorFlow、ONNX Runtime、PyTorch、PaddlePaddle 等)迁移应用时需要更改应用逻辑。需要更改的原因如下:
模型优化器更改了某些输入的输入精度。例如,具有
I64
输入的神经语言处理模型在更改后包含I32
输入。模型优化器更改了 TensorFlow 模型的布局(请参阅 OpenVINO 中的布局)。因此在使用布局不同于框架布局的输入数据时有特殊要求:
由于设备插件的限制,推理引擎 API (
InferenceEngine::CNNNetwork
) 应用了一些输入和输出精度的转换规则。在模型优化器中进行模型转换期间,用户需要指定输入形状,并在应用中使用静态形状。
像在原始框架中一样,全新的 OpenVINO™ 引入了 API 2.0(也称为 OpenVINO API v2)来调整使用模型的逻辑,没有布局和精度更改,而是使用张量名称和索引来处理输入和输出。OpenVINO™ 运行时将用于推理的推理引擎 API 与用于处理模型和操作的 nGraph API 相结合。API 2.0 有通用的结构、命名约定样式、命名空间,并移除了重复的结构。有关详细信息,请参阅 OpenVINO API v2 对推理管道的更改。
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 支持的额外功能列表:
要定义推理引擎和 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: