基于openvino 2019R3的推理性能优化的学习与分析 (三) 基于CPU的推理(inference)性能分析

根据前面2部分对benchmark_app的分析,重新改写了一下benchmark的代码,主要去掉了命令传递参数的方法,所有参数改为代码里hard code;去掉了智能指针之类的高级用法,只使用简单的操作系统提供的多线程同步接口。这么做的目的是为了以后把inference这部分作为一个模块,可以更简单的集成进自己的程序里 :)

 

首先看一下纯CPU的mobilenet-ssd FP32模型的推理性能, 我手里是个i5 7440HQ的4核4线程的移动处理器, 

首先batch size = 1,即每次推理只输入一张图片,

  • inference request(nireq) = 1时,即同时只有一个推理请求

每推理100帧计算打印一下单次推理所需的时间Latency(us),以及总的推理性能throughput (FPS)

此时Latency为28ms左右, Throughtput为36FPS

  • inference request(nireq) = 4时,即设置CPU_THROUGHPUT_STREAMS = CPU_THROUGHPUT_AUTO时,openvino建议的并发数为4, 同时并发4个推理请求

此时Latency为40ms左右, Throughtput为96FPS

可以看到同时并发4路推理时,单路推理的时间会变长,但是总的吞吐量提升了快3倍,说明硬件被更充分的利用了。同时每路推理处理的帧数大致相同,大约25frame左右,一致性还不错,基本上可以保证先推理先结束

 

 

接下来看看batch size = 3,inference request(nireq) = 4时。即每次推理处理三张图片, 4路推理并发

随着单次推理数据的增大,单帧Latency略有变大(这里代码写错了,真实数字应该除以9),FPS也略有下降。增大单次数据量对性能反而有负面影响。说明硬件的处理能力也就这么回事了,再多的数据也只能增加程序反复调度的开销,无法在性能上再进一步了。

 

最后测一下纯CPU的mobilenet-ssd FP16模型的性能,发现性能和FP32基本一致。这也印证了openvino官网上说的, CPU的推理时,如果加载FP16的模型,会在加载时把FP16转为FP32

 

简单总结一下,OpenVINO的CPU推理

  1. 推理并发数决定了Lantency的大小,如果需要快速得到推理结果,最好并发数为1,即让openvino集中所有硬件做单次推理。如果要获得高吞吐量,则需要增多并发数。
  2. CPU推理时的"CPU_BIND_THREAD"基本是鸡肋,因为并不能指定bind到哪颗物理内核,所以可能会造成负面影响(和其他代码都绑到同一个物理核上)
  3. CPU推理时加载FP32/FP16模型,推理性能是一样的
  4. CPU推理非常容易受到后台程序的影响,比如后台的病毒扫描,或者windows update线程,性能可能会下降超过10%
  5. 极限挖掘CPU推理性能时很容易造成CPU过热导致降频,这时候可以听到风扇狂响,这时候性能也会急剧会下降
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值