OpenVINO GPU推理
Warning
基于目前 openvino==2022.3.0 版,存在申请内存不释放的问题,这也就意味着当推理图像很大时,推理完之后,内存会一直占用。详情可参见 issue11939
安装
| $ pip install openvino
# 里面含有mo
$ pip install openvino-dev
|
模型问题
- 因为 OpenVINO 可以直接推理 ONNX 模型,故这里暂时不作转换,直接推理之前 ONNX 模型即可
-
这里仍然给出转换的代码,用作参考:
| mo --input_model models/ch_PP-OCRv2_det_infer.onnx --output_dir models/IR/
mo --input_model models/ch_PP-OCRv2_det_infer.onnx \
--output_dir models/IR/static \
--input_shape "[1,3,12128,800]"
|
关于 OpenVINO
-
OpenVINO 可以直接推理 IR, ONNX 和 PaddlePaddle 模型,具体如下 (图来源:link):
-
和 ONNX Runtime 同时推理同一个 ONNX 模型,OpenVINO 推理速度更快
-
但是从对比来看,OpenVINO 占用内存更大,其原因是拿空间换的时间
- 当指定
input_shape 在一个区间范围时,推理时内存占用会减少一些。示例命令:
| mo --input_model models/ch_PP-OCRv2_det_infer.onnx \
--output_dir models/IR/static \
--input_shape "[1,3,960:1200,800]"
|
OpenVINO 与 ONNX Runtime 性能对比
- 推理设备:
Windows 64 位 Intel(R) Core(TM) i5-4210M CPU @ 2.60GHz 2.59 GHz
- 测试图像宽高:
12119x810
| 测试模型 |
推理框架 |
占用内存 (3 次平均) |
推理时间 (3 次平均) |
ch_PP-OCRv2_det_infer.onnx |
ONNX Runtime=1.10.0 |
0.8G |
5.354s |
ch_PP-OCRv2_det_infer.onnx |
openvino=2022.1.0 |
3.225G |
2.53s |
ch_PP-OCRv2_det_infer.xml FP32 动态图 |
openvino=2022.1.0 |
3.175G |
2.0455s |
OpenVINO 与 ONNX Runtime 推理代码写法对比
Example
以 ch_ppocr_mobile_v2_det 中推理代码为例子
ONNX Runtime
| import onnxruntime
# 声明
sess_opt = onnxruntime.SessionOptions()
sess_opt.log_severity_level = 4
sess_opt.enable_cpu_mem_arena = False
session = onnxruntime.InferenceSession(det_model_path, sess_opt)
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
# 推理
preds = session.run([output_name], {input_name: img})
|
OpenVINO
| from openvino.runtime import Core
# 初始化
ie = Core()
model_onnx = ie.read_model(det_model_path)
compile_model = ie.compile_model(model=model_onnx, device_name='CPU')
vino_session = compile_model.create_infer_request()
# 推理
vino_session.infer(inputs=[img])
vino_preds = vino_session.get_output_tensor().data
|