ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ONNX Runtime OpenVINO™ Execution Provider 完整指南:从安装到多设备推理实战

ONNX Runtime OpenVINO™ Execution Provider 完整指南:从安装到多设备推理实战 ONNX Runtime OpenVINO™ Execution Provider 完整指南从安装到多设备推理实战【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime导读本文以 docs/python/ReadMeOV.rst 为核心骨架系统讲解 ONNX Runtime 的 OpenVINO™ Execution Provider以下简称 OpenVINO EP它是什么、能跑在哪些 Intel 硬件上、如何通过pip安装、如何用 Python API 在 CPU / 集成 GPU / 独立 GPU / 集成 NPU 之间切换推理设备并结合本仓库的 C 源码onnxruntime/core/providers/openvino/与 CMake 构建配置深入剖析device_type、precision、load_config等核心配置项的底层解析逻辑与默认行为。读完本文你将能够独立完成 OpenVINO EP 的环境搭建、设备切换、动态形状与模型缓存等高级配置并理解这些配置在源码层面的实际作用。一、OpenVINO EP 是什么为 ONNX Runtime 注入 Intel 硬件加速OpenVINO™ Execution Provider for ONNX Runtime 是面向 ONNX Runtime 开发者的推理加速组件专为希望在推理应用中引入 OpenVINO™ 的开发者设计。它把 OpenVINO™ 的内联优化inline optimizations带入 ONNX Runtime 的推理流程开发者只需极少的代码改动即可显著提升推理性能。从源码结构看OpenVINO EP 的完整实现集中在 onnxruntime/core/providers/openvino/ 目录下核心文件包括文件职责openvino_execution_provider.hEP 主类OpenVINOExecutionProvider实现IExecutionProvider接口负责算子能力判定GetCapability与图编译Compileopenvino_provider_factory.ccEP 工厂与配置解析入口ParseProviderInfo、ParseDeviceType、ParseConfigOptionscontexts.hProviderInfo/SessionContext/SubGraphContext数据结构承载全部 EP 配置项backend_manager.cc管理由 ONNX 图编译生成的 OpenVINO 后端Backend对象openvino_parser_utils.cc解析precision、reshape_input、layout等选项ov_versions/capability.cc判定哪些算子子图可被 OpenVINO 接管构建层面OpenVINO EP 由 cmake/onnxruntime_providers_openvino.cmake 负责编译为独立的共享库Linux/macOS 下为onnxruntime_providers_openvino.soWindows 下为onnxruntime_providers_openvino.dll。该文件通过find_package(OpenVINO REQUIRED COMPONENTS Runtime ONNX)引入 OpenVINO并链接openvino::frontend::onnx与openvino::runtime两个组件cmake/onnxruntime_providers_openvino.cmake。支持的 Intel 硬件OpenVINO EP 加速推理覆盖多种 Intel® 硬件Intel® CPU默认推理设备无需额外配置Intel® 集成 GPUintegrated GPUIntel® 独立 GPUdiscrete GPUIntel® 集成 NPUintegrated NPU神经网络处理单元。这一支持范围与源码中ParseDeviceType的校验逻辑一致——supported_device_types集合定义为{CPU, GPU, NPU}见 openvino_provider_factory.cc且设备名支持GPU.0、GPU.1等索引后缀。二、环境要求与安装系统与 Python 版本要求原文档明确了如下硬性要求操作系统Ubuntu 18.04、Ubuntu 20.04或 Windows 10均为 64 位Python 版本Windows 与 Linux 下支持 Python 3.10、3.11、3.12 和 3.13。需要说明的是Ubuntu 版本要求对应仓库发布预编译 wheel 时所面向的构建基线在实际使用中OpenVINO EP 也常能在更新的 Ubuntu LTS 发行版上运行但若希望获得官方预编译包的完整支持建议以文档列出的发行版为准。安装命令Linux 下直接使用 pip 安装pip3 install onnxruntime-openvino安装后包名即为onnxruntime-openvino与普通onnxruntime包互斥使用。这一包名映射在 setup.py 中有明确实现构建脚本检测到--use_openvino参数时将package_name设置为onnxruntime-openvino。两个与安装直接相关的事实Linux wheel 内置 OpenVINO 运行时原文档说明Linux 的OpenVINO™ Execution Provider for ONNX Runtimewheel 已预置 OpenVINO™ 2025.1.0 版本的预编译库安装后无需再单独安装 OpenVINO。对应的打包逻辑见 setup.py打包时会一并收集libopenvino.so、libopenvino_c.so、libopenvino_onnx_frontend.so以及libopenvino_intel_cpu_plugin.so、libopenvino_intel_gpu_plugin.so、libopenvino_auto_plugin.so、libopenvino_hetero_plugin.so等插件库并最终放入onnxruntime/capi/libonnxruntime_providers_openvino.sosetup.py。Windows 需单独安装 OpenVINOWindows 平台下需要额外安装 OpenVINO™ 的 PyPI 包。原文档要求参考 Intel 发布的 Windows 版安装说明https://github.com/intel/onnxruntime/releases/即 Intel fork 的 ONNX Runtime 发布页完成依赖安装。此外如果你的推理程序是通过源码自行编译 ONNX Runtime而非使用 pip wheel请参考仓库的 OpenVINO EP 构建文档原文档指向https://onnxruntime.ai/docs/build/eps.html#openvino构建参数可查看 tools/ci_build/build_args.py 中的--use_openvino参数支持CPU、GPU、NPU以及HETERO:GPU,CPU、MULTI:GPU,CPU、AUTO:GPU,CPU等设备组合形态。包的许可与支持LicenseOpenVINO™ Execution Provider for ONNX Runtime 采用MIT许可见仓库根目录 LICENSE。向项目贡献代码即表示同意其中的许可与版权条款并据此条款发布你的贡献。支持渠道问题、功能请求与 bug 报告请通过 GitHub Issues 提交。三、快速上手Python 推理与设备切换3.1 默认使用 CPU 推理安装完成后只需在创建InferenceSession时显式添加 OpenVINO Execution Provider即可用 Intel CPU 执行推理import onnxruntime as ort sess_options ort.SessionOptions() sess_options.graph_optimization_level ort.GraphOptimizationLevel.ORT_ENABLE_ALL session ort.InferenceSession( model.onnx, sess_options, providers[OpenVINOExecutionProvider, CPUExecutionProvider], )从源码看当用户未显式指定设备时CPU 是默认选择。在ParseDeviceType中若provider_options里没有device_type键代码会依据编译期宏如OPENVINO_CONFIG_CPU选择默认设备并打印日志[OpenVINO-EP] Choosing Device: CPU见 openvino_provider_factory.cc。提示建议始终将CPUExecutionProvider作为后备 EP 追加在列表末尾。若模型中有 OpenVINO 不支持的算子ONNX Runtime 会自动回退到 CPU EP 执行保证模型可用。3.2 通过device_type切换到 GPU / NPU原文档明确指出默认使用 Intel CPU 推理但可以通过 provider config 的 device type 参数把推理硬件切换为 Intel 集成 GPU、独立 GPU 或集成 NPU。在 Python API 中通过provider_options传入import onnxruntime as ort # 切换到 Intel GPU session ort.InferenceSession( model.onnx, providers[ (OpenVINOExecutionProvider, {device_type: GPU}), CPUExecutionProvider, ], ) # 切换到指定编号的 GPU适用于多 GPU 机器 session ort.InferenceSession( model.onnx, providers[ (OpenVINOExecutionProvider, {device_type: GPU.0}), CPUExecutionProvider, ], ) # 切换到 Intel NPU session ort.InferenceSession( model.onnx, providers[ (OpenVINOExecutionProvider, {device_type: NPU}), CPUExecutionProvider, ], )device_type的合法取值与底层校验逻辑见 openvino_provider_factory.cc基础设备CPU、GPU、NPU其中 GPU 可带索引后缀如GPU.0、GPU.1多设备模式AUTO、HETERO、MULTI格式为模式:按优先级排列的设备列表例如HETERO:GPU,CPU、MULTI:GPU,CPU、AUTO:GPU,CPU、AUTO:GPU.0,CPU、AUTO:GPU.1,CPU若使用AUTO/HETERO/MULTI但未列出设备或使用了不支持的设备名工厂会直接抛出错误ORT_THROW。同时device_type也支持历史遗留的精度后缀格式如CPU_FP32、GPU.0_FP16解析时会将_之后的部分剥离交由precision解析逻辑单独处理openvino_provider_factory.cc。旧版 API 中的device_id选项已被标记为deprecated当检测到device_id时源码会打印弃用警告并建议改用device_type与precision见 openvino_provider_factory.cc。3.3 通过环境变量与辅助 API 管理设备Python 绑定层还暴露了若干与 OpenVINO 设备相关的辅助函数见 onnxruntime_pybind_state.cc列出可用设备onnxruntime.capi._pybind_state.get_available_openvino_device_ids()返回当前机器上 OpenVINO 可见的所有设备 ID设置默认设备set_openvino_device(device_type)用于设置偏好的 OpenVINO 设备类型同样被标记为 deprecated建议改用device_type会话选项获取动态选中的设备get_openvino_device()返回推理时实际动态选中的 OpenVINO 设备类型。此外日志相关的环境变量ORT_OPENVINO_ENABLE_CI_LOG在 openvino_execution_provider.cc 中被读取用于 CI 场景下输出 OpenVINO EP 的详细日志设置INTEL_OPENVINO_DIR环境变量指向 OpenVINO 安装目录也有助于运行时定位 OpenVINO 库。四、核心配置项详解源码级解析在原文档“更多 API 调用与环境变量参见 Usage 配置选项”的基础上本文基于 contexts.h 中的ProviderInfo结构把 OpenVINO EP 的全部合法配置项整理为下表。这些键同时出现在 Python 绑定层的合法键校验集合中onnxruntime_pybind_state.cc传入不合法键会直接抛出Invalid OpenVINO EP option异常配置键类型/默认值作用device_type字符串覆盖运行时加速硬件类型取值见上文CPU / GPU / NPU / AUTO / HETERO / MULTIdevice_id字符串已弃用改用device_typeprecisiondevice_luid字符串通过 Windows 显卡 LUID逗号分隔列表精确定位 GPU 设备与device_type配合使用precision字符串设置推理精度CPU 支持 FP32GPU 支持 FP32、FP16NPU 支持 FP16。不设置时使用各设备的最佳延迟优化精度设为ACCURACY则以模型输入精度执行以换取最佳精度cache_dir路径指定模型缓存/内核缓存GPUblob 的落盘与加载目录若 blob 已存在则直接加载可显著减少冷启动时间load_configJSON 字符串以 JSON 形式传入 OpenVINO 底层属性ov::AnyMap支持设备级嵌套例如{GPU: {PLUGIN_THROTTLE: 1}}contextuint64OpenCL context 句柄十六进制字符串用于 IO Buffer 优化未设置时 IO Buffer 优化自动关闭num_of_threads正整数覆盖加速器默认线程数num_streams正整数指定设备上并行处理的推理请求流数量默认 1model_priorityLOW/MEDIUM/HIGH/DEFAULTOpenVINO 模型优先级提示决定模型在受限资源上的调度顺序默认DEFAULTenable_opencl_throttling布尔启用 GPU 的 OpenCL 队列节流降低 GPU 推理时的 CPU 占用disable_dynamic_shapes布尔将动态形状模型在运行时改写为静态形状后执行enable_qdq_optimizer布尔启用 QDQQuantize-Dequantize裁剪优化提升 NPU 推理延迟enable_causallm布尔为 ORT GenAI 的 OVEP Pass 启用 Causal LM 编译模式reshape_input字符串运行时重塑 OpenVINO 输入张量形状对应ov::PartialShapelayout字符串指定 OpenVINO 输入/输出张量的 layout对应ov::Layout4.1precision推理精度的取舍precision是影响推理精度与性能平衡的关键选项。ProviderInfo注释contexts.h明确说明不设置 precisionOpenVINO 自动按设备选择优化精度以获得最佳推理延迟设置precisionACCURACY按模型输入精度执行获得最佳精度设备支持的精度组合CPUFP32GPUFP32/FP16NPUFP16。实际解析由OpenVINOParserUtils::ParsePrecision完成openvino_provider_factory.cc。Python 示例session ort.InferenceSession( model.onnx, providers[ ( OpenVINOExecutionProvider, { device_type: GPU, precision: FP16, # GPU 上使用半精度推理 }, ), CPUExecutionProvider, ], )4.2load_config透传 OpenVINO 底层属性对于未在上表列出的 OpenVINO 原生属性可通过load_config以 JSON 形式透传。源码使用 nlohmann/json 解析支持字符串、整数、浮点、布尔及最多 8 层嵌套 mapopenvino_provider_factory.cc顶层键限定为CPU、GPU、NPU、AUTO、HETERO、MULTIopenvino_provider_factory.cc。session ort.InferenceSession( model.onnx, providers[ ( OpenVINOExecutionProvider, { device_type: NPU, load_config: {NPU: {NPU_COMPILATION_MODE_PARAMS: enable-wd-blockarg-inputtrue compute-layers-with-higher-precisionSqrt,Power,ReduceSum}}, }, ), CPUExecutionProvider, ], )值得一提的是源码在启用会话上下文共享share_ep_contexts时会为 NPU 自动填充一组默认编译参数NPU_COMPILATION_MODE_PARAMS enable-wd-blockarg-inputtrue compute-layers-with-higher-precisionSqrt,Power,ReduceSum前提是用户未自行提供openvino_provider_factory.cc。4.3 与 NPU 相关的行为细节源码对 NPU 设备有两个值得注意的自动行为默认禁用动态形状当device_type包含NPU时disable_dynamic_shapes会被强制置为true若同时开启enable_causallm则重新启用动态形状并打印日志openvino_provider_factory.cc。NPU 内存分配器在 OpenVINO 2024.4 上构建并启用USE_OVEP_NPU_MEMORY宏时EP 会通过CreatePreferredAllocators提供 NPU 专用内存分配器见 cmake/onnxruntime_providers_openvino.cmake 与 openvino_execution_provider.h。4.4 会话级配置session options除了provider_optionsOpenVINO EP 还支持若干 ONNX Runtime 会话级配置解析逻辑集中在ParseConfigOptionsopenvino_provider_factory.cc会话配置键默认值作用session.disable_cpu_ep_fallback0置1时禁用 CPU EP 回退OpenVINO 不支持的算子将导致报错而非静默回退session.use_ep_context_enable0置1时启用 EP 上下文EP Context导出把已编译图保存下来session.use_ep_context_embed_mode0置1时以嵌入模式保存 EP 上下文session.use_ep_context_file_path空EP 上下文文件的保存/加载路径session.share_ep_contexts0置1时启用会话间共享 EP 上下文session.stop_share_ep_contexts0置1时停止共享 EP 上下文Python 中通过SessionOptions.add_session_config_entry设置例如sess_options ort.SessionOptions() sess_options.add_session_config_entry(session.use_ep_context_enable, 1) sess_options.add_session_config_entry(session.use_ep_context_file_path, ./ov_ep_ctx.onnx)五、OpenVINO EP 的底层工作流程结合源码OpenVINO EP 在 ONNX Runtime 会话中的执行链路大致如下注册 EPPython 层调用InferenceSession(providers[...])时onnxruntime_pybind_state.cc 根据kOpenVINOExecutionProvider分支校验provider_options中的键合法性后通过OpenVINOProviderFactoryCreator::Create创建 EP 工厂若INTEL_OPENVINO_DIR已设置却无法加载 OpenVINO 库会抛出明确错误提示。解析配置工厂在CreateExecutionProviderFactory中调用ParseProviderInfo依次解析device_type、device_id、cache_dir、precision、reshape_input、layout、load_config、context、num_of_threads、model_priority、num_streams及各布尔开关填充ProviderInfo结构openvino_provider_factory.cc。设备探测与校验ParseDeviceType调用ov_core-GetAvailableDevices()查询机器上实际可用的设备将用户指定的device_type与真实设备列表比对不存在时抛出Device ... is not available错误device_luid则通过查询设备的ov::device::LUID属性做精确映射openvino_provider_factory.cc。算子能力判定会话加载图后OpenVINOExecutionProvider::GetCapabilityopenvino_execution_provider.h基于 ov_versions/capability.cc 的算子支持表把图中可被 OpenVINO 执行的子图标记出来其余部分留给后续 EP如 CPU处理。图编译与执行被接管的融合子图在Compile阶段通过BackendManager编译为 OpenVINO 后端backend_manager.cc运行时调用对应设备执行。此外OpenVINO EP 还提供了SetEpDynamicOptions接口openvino_execution_provider.h支持在会话运行时动态更新 EP 选项。六、更多示例与后续深入原文档指出OpenVINO EP 的完整 demo 集合位于微软 ONNX Runtime 推理示例仓库的python/OpenVINO_EP目录github.com/microsoft/onnxruntime-inference-examples涵盖图像分类、目标检测、LLM 等常见场景适合作为进阶参考。若要在本仓库内继续深入推荐按以下路径阅读配置解析与设备选择onnxruntime/core/providers/openvino/openvino_provider_factory.cc配置项数据结构与默认值onnxruntime/core/providers/openvino/contexts.hEP 主类与执行流程onnxruntime/core/providers/openvino/openvino_execution_provider.hCMake 构建与 OpenVINO 版本门槛cmake/onnxruntime_providers_openvino.cmakePython wheel 打包细节setup.py构建参数--use_openvinotools/ci_build/build_args.py结语OpenVINO™ Execution Provider 让 ONNX Runtime 开发者能够以最小代码改动获得 Intel 全系硬件CPU、集成 GPU、独立 GPU、集成 NPU的推理加速一条pip3 install onnxruntime-openvino即可在 Linux 上开箱即用一个device_type参数即可在四种硬件间自由切换配合precision、load_config、cache_dir等选项还能进一步细粒度调优。本文从文档出发、以源码印证帮助你在实际项目中正确选型与配置 OpenVINO EP遇到问题时也能依据底层实现快速定位根因。【免费下载链接】onnxruntimeONNX Runtime: cross-platform, high performance ML inferencing and training accelerator项目地址: https://gitcode.com/GitHub_Trending/on/onnxruntime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表