OpenVINO部署
- 什么是 OpenVINO?
- OpenVINO 的优势
- 安装指南
- 系统要求:
- 安装步骤
- 环境设置
- 部署示例代码
- 优化和部署步骤
- 详细部署示例
什么是 OpenVINO?
OpenVINO(Open Visual Inference and Neural Network Optimization)是由英特尔开发的工具包,旨在优化和加速在各种英特尔架构(如CPU、GPU和FPGA)上的深度学习推理,特别侧重于计算机视觉任务。该工具包支持来自流行框架(如TensorFlow和PyTorch)的模型,将它们转换为适合在英特尔硬件上部署的中间表示。
OpenVINO 的优势
OpenVINO的一个显著优势是能够显著减少推理时间。例如,一位在Kaggle比赛中获得第二名的参赛者指出,将PyTorch模型转换为OpenVINO模型可以减少约40%的推理时间。这在比赛条件要求只使用CPU且运行时间必须在120分钟以内时尤为重要。
安装指南
系统要求:
- 支持的操作系统:Windows、Linux、macOS、Raspbian OS
- 支持的硬件:英特尔CPU、集成GPU、英特尔神经计算棒2和带有Movidius VPU的英特尔视觉加速设计
安装步骤
Windows:
- 使用安装程序:
-
- 从 OpenVINO工具包页面下载安装程序。
-
- 运行安装程序并按照屏幕上的说明进行操作。
-
- 通过运行 setupvars.bat 设置环境变量。
- 使用PyPI:
pip install openvino
`
Linux
- 使用APT:
wget -qO- https://apt.repos.intel.com/openvino/2023.0/setup.sh | sudo bash
sudo apt install openvino-runtime-ubuntu22
- 使用Docker:
docker pull openvino/ubuntu20_runtime:2023.0
docker run -it openvino/ubuntu20_runtime:2023.0
macOS:
- 使用Homebrew:
brew install openvino
Raspbian OS:
- 请参阅具体的 Raspbian安装指南。
环境设置
- 配置环境变量:
-
- 对于Windows:
"C:\Program Files (x86)\Intel\openvino\bin\setupvars.bat"
-
- 对于Linux/macOS:
source /opt/intel/openvino/bin/setupvars.sh
- 验证安装:
运行以下命令以检查安装:
python -c "import openvino; print(openvino.__version__)"
部署示例代码
PyTorch 模型部署:
import openvino as ov
import torch# 加载PyTorch模型
model = torch.hub.load("pytorch/vision", "shufflenet_v2_x1_0", weights="DEFAULT")
example = torch.randn(1, 3, 224, 224)# 转换为OpenVINO模型
ov_model = ov.convert_model(model, example_input=(example,))# 编译并运行推理
core = ov.Core()
compiled_model = core.compile_model(ov_model, 'CPU')
output = compiled_model({0: example.numpy()})
print(output)
TensorFlow 模型部署:
import openvino as ov
import tensorflow as tf
import numpy as np# 加载TensorFlow模型
model = tf.keras.applications.MobileNetV2(weights='imagenet')# 转换为OpenVINO模型
ov_model = ov.convert_model(model)# 编译并运行推理
core = ov.Core()
compiled_model = core.compile_model(ov_model, 'CPU')
data = np.random.rand(1, 224, 224, 3)
output = compiled_model({0: data})
print(output)
优化和部署步骤
OpenVINO 提供了各种工具来优化模型:
- 模型优化器:转换和优化模型。
- 训练后优化工具:调整模型以获得更好的性能。
- 基准测试工具:测量推理性能。
- 有关详细步骤和高级配置,请参阅官方的 OpenVINO文档 和 GitHub 仓库。
详细部署示例
- 准备环境
-
- 安装必要的软件包:
!pip install openvino-dev[onnx]
- 创建并保存模型
import torch
import timm
from torch.onnx import export# 从timm加载预训练模型
model = timm.create_model('resnet50', pretrained=True)
model.eval()# 为模型设置虚拟输入;这应该与模型的输入大小匹配
input_tensor = torch.randn(1, 3, 224, 224)# 导出模型
output_onnx = 'model.onnx'
export(model, input_tensor, output_onnx, opset_version=11, input_names=['input'], output_names=['output'])
- 将模型转换为OpenVINO格式
!mo --input_model /kaggle/working/model.onnx --output_dir /kaggle/working --input_shape [1,3,224,224]
- 定义OpenVINO对象并执行推理
from openvino.runtime import Core# 初始化推理引擎
ie = Core()# 从IR文件读取网络和相应的权重
model_path = '/kaggle/working/model.xml' # .xml文件的路径
model = ie.read_model(model=model_path)# 为特定设备编译模型
compiled_model = ie.compile_model(model=model_path, device_name='CPU')
infer_request = compiled_model.create_infer_request()# 获取输入和输出层
input_layer = compiled_model.input(0)
output_layer = compiled_model.output(0)# 准备输入数据(例如,处理成张量的图像)
input_sample = torch.randn(1, 3, 224, 224)
# 检索第一个输入层的名称并创建字典
inputs = {input_layer.any_name: input_sample}# 执行推理
result = infer_request.infer(inputs=inputs)# 访问结果
output = result[output_layer]
# 1000类分类
print(len(output[0]))
print(output)
时间测量(可选)
测量推理时间:
import time
import numpy as nptimes = []
loop = 10 # 时间测量的循环次数
for i in range(loop):t1 = time.time()infer_request.infer(inputs)t2 = time.time()times.append(t2 - t1)print("平均推理时间:", np.mean(times))