本地分发库¶
借助本地分发,每个 C 或 C++ 应用/安装程序将拥有自己的 OpenVINO 运行时二进制文件副本。然而,OpenVINO 采用的是基于插件的可扩展架构,某些组件只有在真正需要时才会在运行时加载。因此,务必要了解部署应用真正需要且起码要配备的库有哪些。本指南将帮助您达成这一目标。
本地分发也适用于利用 构建指令 从源构建的 OpenVINO 二进制文件,但以下指南假设 OpenVINO 运行时是动态构建的。对于 静态 OpenVINO 运行时 ,在 CMake 配置阶段,使用 CMake 自定义编译选项 选择所需的 OpenVINO 功能,然后构建 OpenVINO 组件并将组件链接到最终应用。
Note
以下步骤独立于操作系统,引用的库文件名不带任何前缀(如 Unix 系统上的 lib
)或后缀(如 Windows 操作系统上的 .dll
)。请勿将 Windows 操作系统上的 .lib
文件放置到分发中,因为这些文件仅在链接器阶段需要。
C++ 和 C 语言的库要求¶
openvino
库独立于编写应用所用的语言,必须始终将其置于最终分发中,因为它是使用所有推理插件和前端插件进行编排的核心库。在英特尔® 发行版 OpenVINO™ 工具套件中,openvino
依赖于 OpenVINO 运行时所用的 TBB 库,让计算设备优化实现饱和,因此必须将其置于分发包中。
如果应用是使用 C 语言编写的,则还需要另外放置 openvino_c
库。
包含推理设备相关信息的 plugins.xml
文件也必须看作 openvino
的支持文件。
可插拔组件库¶
下图显示了 OpenVINO 运行时核心库和可插拔组件库之间的依赖关系:
计算设备库¶
对于每种推理设备,OpenVINO 运行时都有自己的插件库:
openvino_intel_cpu_plugin
用于 英特尔® CPU 设备 。openvino_intel_gpu_plugin
用于 英特尔® GPU 设备 。openvino_intel_gna_plugin
用于 英特尔® GNA 设备 。openvino_intel_myriad_plugin
用于 英特尔® MYRIAD 设备 。openvino_intel_hddl_plugin
用于 英特尔® HDDL 设备 。openvino_arm_cpu_plugin
用于 ARM CPU 设备 。
根据应用中所用的不同设备,需要将相应的库置于分发包中。
如上图所示,某些插件库可能具有特定于操作系统的依赖项,可能是后端库,也可能是其他支持文件,如固件等的支持文件。有关详细信息,请参阅下表:
设备 |
依赖关系 |
---|---|
CPU |
|
图形处理器 |
|
MYRIAD |
|
HDDL |
|
GNA |
|
Arm® CPU |
|
设备 |
依赖关系 |
---|---|
CPU |
|
图形处理器 |
|
MYRIAD |
|
HDDL |
|
GNA |
|
Arm® CPU |
|
设备 |
依赖关系 |
---|---|
CPU |
|
MYRIAD |
|
Arm® CPU |
|
执行模式库¶
HETERO
、MULTI
、BATCH
和 AUTO
执行模式也可以以明示或默示的方式供应用使用。使用以下建议方案来确定是否将相应的库置于分发包中:
- 如果应用中以明示方式使用 AUTO ,或者在不指定设备的情况下使用 ov::Core::compile_model ,则将 openvino_auto_plugin
置于分发中。
Note
自动设备选择取决于 推理设备插件。如果您不确定目标系统上有哪些推理设备,请将全部推理插件库置于分发中。如果将 ov::device::priorities 用于 AUTO
以指定有限的设备列表,则仅抓取对应的设备插件。
如果以明示方式使用 MULTI ,请将
openvino_auto_plugin
置于分发中。如果以明示方式使用 HETERO ,或者将 ov::hint::performance_mode 用于 GPU,请将
openvino_hetero_plugin
置于分发中。如果以明示方式使用 BATCH ,或者将 ov::hint::performance_mode 用于 GPU,请将
openvino_batch_plugin
置于分发中。
用于读取模型的前端库¶
OpenVINO 运行时会动态使用前端库来读取不同格式的模型:
openvino_ir_frontend
用于读取 OpenVINO IR。openvino_tensorflow_frontend
用于读取 TensorFlow 文件格式。查看 TensorFlow 前端功能和限制 。openvino_onnx_frontend
用于读取 ONNX 文件格式。openvino_paddle_frontend
用于读取 Paddle 文件格式。
根据 ov::Core::read_model 中应用所用的模型格式类型,选取相应的库。
Note
为了优化最终分发包的大小,建议使用 模型优化器 将模型转换为 OpenVINO IR。这样您就不必在分发包中保留 TensorFlow、ONNX、PaddlePaddle 和其他前端库。
(传统)通过 G-API 进行预处理¶
Note
G-API 预处理是一项传统功能,请使用不需要任何其他库的 OpenVINO 2.0 的预处理功能 。
如果应用使用 InferenceEngine::PreProcessInfo::setColorFormat 或 InferenceEngine::PreProcessInfo::setResizeAlgorithm 方法,OpenVINO 运行时会动态加载 openvino_gapi_preproc
插件,通过 G-API 进行预处理。
示例¶
C 应用中的 CPU + OpenVINO IR
在本例中,应用以 C 语言编写,通过 CPU 进行推理,并读取以 OpenVINO IR 格式存储的模型。将使用以下库:
openvino_c
库是应用的主要依赖项。应用会链接到此库。openvino
库用作openvino_c
的专用依赖项,也可以在部署中使用。openvino_intel_cpu_plugin
用于推理。openvino_ir_frontend
用于读取源模型。
以 tput 方式在 GPU 和 MYRIAD 上的多重执行
在本例中,应用以 C++ 编写,在设置了 ov::hint::PerformanceMode::THROUGHPUT 属性的情况下 同时在 GPU 和 MYRIAD 设备上 进行推理,并读取以 ONNX 格式存储的模型。将使用以下库:
openvino
库是应用的主要依赖项。应用会链接到此库。openvino_intel_gpu_plugin
和openvino_intel_myriad_plugin
用于推理。openvino_auto_plugin
用于多设备执行。openvino_auto_batch_plugin
也可以置于分发中,用于改进 英特尔® GPU 设备的饱和度。如果没有此类插件,将禁用 自动批处理 。openvino_onnx_frontend
用于读取源模型。
HDDL 和 CPU 之间的自动设备选择
在本例中,应用使用 C++ 编写,以 自动设备选择 方式进行推理,将设备列表限定于 HDDL 和 CPU,并读取 使用 C++ 代码创建 的模型。将使用以下库:
openvino
库是应用的主要依赖项。应用会链接到此库。openvino_auto_plugin
用于启用自动设备选择。openvino_intel_hddl_plugin
和openvino_intel_cpu_plugin
用于推理。AUTO 根据已部署机器上 CPU 和 HDDL 设备的实际存在情况,在二者之间做出选择。由于使用代码创建了 ov::Model ,因此不需要前端库。