OpenVINO 上手指南:10 分钟在 CPU 上跑通图像分类推理
【免费下载链接】openvinoOpenVINO™ is an open source toolkit for optimizing and deploying AI inference项目地址: https://gitcode.com/GitHub_Trending/op/openvino
手头已有一个训练好的分类模型,想在没有 GPU 的办公电脑上又快又稳地跑起来,该怎么办?本文以一台 Ubuntu 机器为场地,带你从源码编译 OpenVINO Runtime 开始,把一张图片送进推理管线,拿到可读的分类结果。读完并动手后,你可以验证三件事:完整构建出 OpenVINO 运行时;用一条命令把 ONNX 模型转成 IR 格式;运行仓库自带示例并看到 Top-10 分类得分。
项目速览
OpenVINO 是 Intel 开源的深度学习推理优化工具包,定位很直接:接住你在 PyTorch、ONNX、TensorFlow 等框架里导出的模型,为目标硬件做图优化与代码生成,让模型脱离原训练框架独立运行。核心特性:
- 📥多框架模型接入:PyTorch、TensorFlow、ONNX、PaddlePaddle、JAX 的模型均可转换或直接加载
- 🧩多设备调度:同一个模型仅凭一个设备名参数即可在 CPU、Intel GPU、NPU 间切换
- 🐍多语言 API:Python、C++、C、JavaScript 都有绑定,部署形态自由选择
- 📦轻量部署:目标机上无需安装任何原训练框架,只依赖 OpenVINO 运行时
项目形态与更多介绍见 README。
动手前:环境检查与依赖安装
先对照这张表确认机器条件(数据来自官方构建文档):
| 检查项 | 最低要求 |
|---|---|
| 操作系统 | Ubuntu 18.04 / 20.04(64 位),或 RHEL 8.2(64 位) |
| CMake | 3.26 及以上 |
| GCC | 7.5 及以上 |
| Python | 3.9–3.12(仅构建 Python API 时需要) |
| Intel GPU 驱动 | 可选,需安装 OpenCL 计算运行时才能用核显推理 |
确认无误后,最简安装分两步。第一步:克隆仓库、初始化子模块并安装系统依赖:
git clone https://gitcode.com/GitHub_Trending/op/openvino cd openvino git submodule update --init --recursive sudo ./install_build_dependencies.sh第二步:创建构建目录并编译。完整说明见 Linux 编译文档。
mkdir build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. cmake --build . --parallel 8低配机器建议把--parallel调小,避免内存被打满导致构建卡死。编译产物会落在build目录及仓库根下的bin、lib中。
跑通第一个示例:图像分类样例
仓库自带一个端到端样例 samples/python/hello_classification/,它把"读模型→推理→出结果"串成一条命令。
准备输入
需要两个文件:一个图像分类模型(.onnx或 IR 格式.xml/.bin均可)和一张图片,比如一张猫的照片。模型可以直接用 PyTorch 导出的 ONNX 文件,无需先转换——样例两种格式都认。
发生了什么:这一步只准备"原料",图片尺寸不必和模型输入一致,样例内部会自动缩放。
运行命令
python samples/python/hello_classification/hello_classification.py \ resnet50.xml cat.jpg CPU发生了什么:脚本内部创建ov.Core对象,读取模型并编译到CPU设备;第三个参数换成别的设备名即可切换硬件。
解读输出
控制台会打印一张 Top-10 表格,每行是class_id与对应的probability。
发生了什么:推理输出的概率向量被展平后按降序排列,得分最高的类别 ID 就是模型认为这张图片最像的东西。
如果想自己写而不是调样例,核心流程只有这几行(图片需与模型输入尺寸一致,或参照样例用 PrePostProcessor 做缩放):
import cv2 import numpy as np import openvino as ov core = ov.Core() model = core.read_model("resnet50.xml") compiled = core.compile_model(model, "CPU") image = np.expand_dims(cv2.imread("cat.jpg"), 0) print(next(iter(compiled.infer_new_request({0: image}).values())))关键机制拆解
前端:把 ONNX 变成统一中间格式
- 输入:一个
.onnx文件 - 处理:src/frontends/onnx/ 中的源码沿计算图逐节点行走,把每个 ONNX 算子映射成 OpenVINO 内部的算子表示,同时把权重数据抽出
- 输出:OpenVINO 模型对象(IR 格式:
.xml描述图结构,.bin存放权重),交给运行时编译
仓库里的ovc转换工具封装的正是这条链路,一条命令即可完成转换,源码见 tools/ovc/:
ovc model.onnx运行时:从模型对象到 CPU 可执行程序
- 输入:IR 模型 + 目标设备名
- 处理:src/core/ 负责加载、编译调度等核心流程;src/plugins/intel_cpu/ 这类设备插件则做图变换、算子融合与针对 CPU 指令集的代码生成
- 输出:可直接调用的 compiled model,调用
infer_new_request即返回推理结果
整条链路的分层设计,可对照 架构文档 阅读,它会解释前端、核心、插件三层各管什么。
常见问题排错
Q1:cmake --build报缺文件,或构建中途长时间无响应?
原因:系统构建依赖未装全,或子模块没有初始化;另一种情况是并行度过高把资源耗尽。 解法:先回到上一步确认git submodule update --init --recursive和sudo ./install_build_dependencies.sh都执行过,再用较低的--parallel数值重试。
Q2:源码编译成功后,import openvino却报 ModuleNotFoundError?
原因:源码构建的 Python 绑定不在默认搜索路径里。 解法:把构建产物目录加入环境变量,PYTHONPATH指向bin/intel64/Release/python,LD_LIBRARY_PATH指向bin/intel64/Release,具体路径与 wheel 安装方式见 编译文档的 Python API 章节。
Q3:core.available_devices里只有 CPU,看不到 GPU?
原因:机器缺少 Intel GPU 的 OpenCL 驱动,或本机根本不是 Intel 核显。 解法:安装 Intel Graphics Compute Runtime for OpenCL Driver 后重启进程再查;若硬件不支持,仅用 CPU 属于正常现象。
下一步学习路线
跑通推理只是起点,按兴趣挑一条线深入即可:
- 模型优化:阅读 NNCF 量化指南,把 FP32 模型压到 INT8,看推理速度能提多少
- 性能测量:用 benchmark 工具 一条命令拿到延迟与吞吐数据,为优化提供依据
- 生成式模型:参考 生成式 AI 工作流文档,把 LLM 也部署到本地硬件
- Physical AI:把模型装进机器人策略,仓库用 Rerun 工具做逐帧可视化,可直观看到每一帧的数据流与推理时间线:
更多场景与示例见 Physical AI 文档。
从源码构建到第一张图的推理结果,整条链路你已经完整走过一遍:编译得到运行时、转换得到 IR、一行命令得到得分。接下来只需把命令里的模型路径和设备名换成你自己的,这套流程就是现成的部署骨架。
【免费下载链接】openvinoOpenVINO™ is an open source toolkit for optimizing and deploying AI inference项目地址: https://gitcode.com/GitHub_Trending/op/openvino
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考