摘要:“高性能推理”是ModelBox宣传的主要特性之一,不信谣不传谣的我决定通过原生API和ModelBox实现相同案例进行对比,看一下ModelBox推理是否真的“高性能”。
本文分享自华为云社区《ModelBox推理真的高效吗?》,作者:吴小鱼。
“高性能推理”是ModelBox宣传的主要特性之一,不信谣不传谣的我决定通过原生API和ModelBox实现相同案例进行对比,看一下ModelBox推理是否真的“高性能”。
我们分别使用onnxruntime与ModelBox Windows SDK对相同的模型实现相同的推理逻辑进行端到端性能对比,为了防止测试视频帧率成为性能瓶颈,我们准备了120fps的视频作为测试输入。
如果对Windows ModelBox SDK使用还不熟悉,可以参考我们的ModelBox 端云协同AI开发套件(Windows)上手指南。案例所需资源(代码、模型、测试数据等)均可从obs桶下载。
案例说明
为了充分考验不同框架的推理性能,我决定做一个稍微有那么一点点繁琐的双阶段单人人体关键点检测案例。案例具体流程如下:
其中,人形检测使用开源YOLOV7-tiny预训练模型,关键点检测使用开源PP-TinyPose预训练模型,在进行人形跟踪后我们过滤得到最早出现的id的检测框进行关键点检测。
onnxruntime推理
原生API推理代码位于资源包的onnxruntime_infer目录下,具体的代码组织为:
其中,入口脚本onnxruntime_infer.py中指定了使用的模型文件与测试视频:
人形检测模型为gpu推理,关键点检测模型为cpu推理,在使用ModelBox Windows SDK推理时也保持了同样的硬件配置。
fps取检测预处理开始到绘制关键点这一区间进行测试:
结果视频rt_result.mp4保存在hilens_data_dir文件夹下,查看结果:
可以看到,双阶段单人关键点技能在onnxruntime推理可以达到36fps左右。
ModelBox Windows SDK推理
ModelBox Windows SDK推理代码位于资源包的single_human_pose目录下,具体的代码组织为:
我们可以查看技能流程图graph/single_human_pose.toml了解技能逻辑:
fps在关键点绘制功能单元中进行计算,计算的为端到端全流程fps:
在bin/mock_task.toml中配置输入输出:
在技能流程图中开启性能统计配置项:
之后双击bin/main.bat或在bash中运行技能:
运行完成后生成的视频与性能统计文件都在hilens_data_dir文件夹下:
可以看到使用ModelBox SDK进行推理可以达到79fps,名不虚传哇,我们可以在Chrome浏览器chrome://tracing/中加载性能统计文件查看:
逐项查看后发现耗时最久的是检测后处理功能单元,平均耗时11.69ms,因为ModelBox是静态图并行推理,fps取决于耗时最久的功能单元,理论计算fps = 1000 / 11.69 \approx 85fps=1000/11.69≈85,与我们在程序中打点计算结果接近。
总结:ModelBox真的很快,nice!