openvino 将onnx转为IR并进行int8量化

环境

- Ubuntu 22.04
- python 3.10

安装环境

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-venv build-essential python3-dev git-all -y
sudo apt-get install intel-opencl-icd -y

编译 mo

下载 openvino

git clone https://github.com/openvinotoolkit/openvino

编译 mo

cd openvino/tools
python3 -m pip install mo

编译成功输出如下信息:

Collecting mo
  Downloading mo-0.3.0-py2.py3-none-any.whl (12 kB)
Requirement already satisfied: PyYAML in /usr/local/lib/python3.10/dist-packages (from mo) (6.0)
Collecting colorama (from mo)
  Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Requirement already satisfied: toml in /usr/local/lib/python3.10/dist-packages (from mo) (0.10.2)
Installing collected packages: colorama, mo
Successfully installed colorama-0.4.6 mo-0.3.0

安装

pip install openvino-dev

查看帮助

mo -h

onnx 转为 IR

mo --input_model onnx/model.onnx --compress_to_fp16 --output_dir ir_model

这里压缩为fp16

输出信息:

[ INFO ] Generated IR will be compressed to FP16. If you get lower accuracy, please consider disabling compression explicitly by adding argument --compress_to_fp16=False.
Find more information about compression to FP16 at https://docs.openvino.ai/2023.0/openvino_docs_MO_DG_FP16_Compression.html
[ INFO ] The model was converted to IR v11, the latest model format that corresponds to the source DL framework input/output format. While IR v11 is backwards compatible with OpenVINO Inference Engine API v1.0, please use API v2.0 (as of 2022.1) to take advantage of the latest improvements in IR v11.
Find more information about API v2.0 and IR v11 at https://docs.openvino.ai/2023.0/openvino_2_0_transition_guide.html
[ SUCCESS ] Generated IR version 11 model.
[ SUCCESS ] XML file: /workspace/bert/ir_model/model.xml
[ SUCCESS ] BIN file: /workspace/bert/ir_model/model.bin

转换成功了!

输出文件对比:

# ls -lh ir_model/
total 321M
-rw-r--r-- 1 root root 319M Sep 22 11:27 model.bin
-rw-r--r-- 1 root root 1.8M Sep 22 11:27 model.xml

# ls -lh onnx/
total 640M
-rw-r--r-- 1 root root 640M Sep 21 20:23 model.onnx

IR 模型量化为 int8

编译 Post-Training Optimization Tool

cd openvino/tools/pot/
python3 setup.py install

bert模型量化步骤参考:
https://github.com/openvinotoolkit/openvino_notebooks/tree/main/notebooks/105-language-quantize-bert

Quantization of Image Classification model参考:
https://github.com/openvinotoolkit/openvino_notebooks/tree/main/notebooks/301-tensorflow-training-openvino

参考

  1. https://github.com/openvinotoolkit/openvino_notebooks#-installation-guide
  2. https://docs.openvino.ai/2022.3/notebooks/102-pytorch-onnx-to-openvino-with-output.html
  3. https://github.com/openvinotoolkit/openvino/tree/master/tools/mo
  4. https://github.com/openvinotoolkit/openvino
  5. https://github.com/openvinotoolkit/openvino/tree/master/tools/pot
<think>嗯,用户的问题是关于YOLOv8OpenVINO结合时,多batch的异步推理是否适用以及如何进行性能优化。我需要先理解这两个技术的基本情况,然后分析异步推理的适用场景和多batch处理的影响。 首先,YOLOv8是一个目标检测模型,通常用于实时检测,处理速度很重要。OpenVINO是英特尔开发的工具包,专门用于优化和部署AI模型,支持多种硬件加速。用户提到的多batch推理,可能是指同时处理多个输入样本,这可以提高吞吐量,尤其是在服务器端或需要处理大量数据的场景下。 接下来,异步推理的概念。异步模式允许应用程序在等待推理结果的同时继续处理其他任务,这样能更高效地利用硬件资源,特别是当处理多个请求时。同步推理是逐个处理请求,而异步可以行处理多个,减少等待时间。 然后,用户的问题是多batch推理是否适合使用异步模式。根据OpenVINO的文档,异步推理通常推荐用于需要高吞吐量的场景,比如多摄像头实时处理或者批量处理图像。多batch推理本身已经是在批量处理数据,结合异步可能进一步提升效率,但需要注意任务之间的依赖和资源竞争。 性能优化方面,可能需要考虑模型量化,比如使用8量化来减少模型大小和加快推理速度,同时保持精度。另外,硬件选择也很重要,比如使用GPU或NPU可能比CPU更快。预处理和后处理的优化也不可忽视,使用OpenVINO的预处理API可以减少不必要的拷贝。还有线程配置,合理设置行线程数可以充分利用CPU资源。 另外,用户提供的引用中提到,YOLOv8通过导出ONNX转为OpenVINO的中间表示(IR),这步骤是否正确?是的,引用3和5说明YOLOv5需要先转ONNX再转OpenVINO,所以YOLOv8应该类似。异步推理在OpenVINO的新版SDK中支持良好,引用4提到C++和Python的SDK都做了优化,方便使用。 可能需要注意的问题包括异步模式下的资源管理和任务调度,确保多batch的数据正确传递和处理,以及错误处理机制。此外,量化可能会影响模型精度,需要测试验证。 总结下来,回答应该确认异步推理适用于多batch场景,给出具体的优化步骤,比如量化、硬件选择、预处理优化和线程配置,同时引用相关的文献支持。</think>### YOLOv8OpenVINO多Batch异步推理的适用性与优化分析 #### 1. **异步推理的适用性** 异步推理在OpenVINO中通过行处理多个推理请求提升吞吐量,尤其适合以下场景: - **多Batch输入**:当需要同时处理多张图像时(如视频流分析或批量图片检测),异步模式可充分利用硬件资源[^2][^4]。 - **异构计算**:支持CPU、GPU、NPU等设备协同工作,通过异步任务分配减少等待时间。 - **实时性要求**:异步模式允许在等待当前推理结果时处理其他任务(如数据预处理),降低端到端延迟[^4]。 **结论**:YOLOv8模型通过OpenVINO部署时,**多Batch异步推理是推荐方案**,尤其在高吞吐量需求场景中。 --- #### 2. **性能优化关键步骤** ##### 2.1 模型量化与格式转换 - **步骤**:将YOLOv8模型转换为OpenVINO IR格式,应用8量化: ```bash # 导出ONNX格式 yolo export model=yolov8n.pt format=onnx # 使用OpenVINO Model Optimizer转换为IR量化 mo --input_model yolov8n.onnx --data_type FP16 --compress_to_fp16 ``` 量化可减少模型体积和内存占用,同时保持精度[^1][^5]。 ##### 2.2 异步推理实现(Python示例) ```python from openvino.runtime import Core # 初始化Core加载模型 core = Core() model = core.read_model("yolov8n.xml") compiled_model = core.compile_model(model, "AUTO") # 创建异步推理请求池 num_requests = 4 # 根据硬件资源调整 infer_requests = [compiled_model.create_infer_request() for _ in range(num_requests)] # 多Batch数据异步推理 import numpy as np batch_size = 8 input_data = np.random.randn(batch_size, 3, 640, 640).astype(np.float32) # 分配请求异步执行 results = [] for i in range(batch_size): request_id = i % num_requests infer_requests[request_id].wait() # 等待空闲请求 infer_requests[request_id].input_tensor.data[:] = input_data[i] infer_requests[request_id].start_async() results.append(infer_requests[request_id].output_tensor) ``` ##### 2.3 关键优化参数 | 参数 | 建议配置 | 作用 | |---------------------|--------------------------|----------------------------------| | `INFERENCE_NUM_THREADS` | CPU物理核心数 | 最大化CPU行度[^4] | | `PERFORMANCE_HINT` | `THROUGHPUT` | 优化吞吐量而非单次延迟[^2] | | `CACHE_DIR` | 指定缓存路径 | 加速模型加载[^3] | --- #### 3. **性能对比数据(示例)** | 配置 | 吞吐量 (FPS) | 延迟 (ms) | 备注 | |---------------------|-------------|----------|-------------------------------| | 同步模式 (Batch=1) | 45 | 22 | 单请求处理 | | 异步模式 (Batch=8) | 320 | 25 | 吞吐量提升7倍,延迟略微增加 | | 量化后 (INT8) | 500 | 18 | 精度下降<1% mAP | --- #### 4. **注意事项** 1. **资源竞争**:异步请求数需根据硬件资源(如CPU线程/GPU内存)动态调整,避免资源耗尽。 2. **数据对齐**:多Batch输入需保证维度一致性,预处理建议使用OpenVINO内置API(如`preprocess`模块)。 3. **精度验证**:量化后需验证检测精度,必要时启用部分层微调。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

szZack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值