使用openvino加速resnet50在VOC2007上的推断结果
平台是win10,cpu是Intel® Core™ i5-8300H CPU @ 2.30GHz(一共4核,在这里分配了最多3核做推断),工具是openvino的DL Workbench。
下图的点从左至右的batch_size依次为1、16、32、48和64。
这是cpu核数为1时的推断结果图。
可以看出,随着batch_size的增加,延迟和fps均增加,直到在某个值后,fps不再增加,仅延迟增加。我们知道,推断的延迟和fps是一组矛盾的数据:在给定cpu时,低延迟往往意味着低fps(因为要尽量快地对输入图片进行反应,就会导致cpu性能不能得到充分的应用),而高fps则往往意味着高延迟(尽可能地利用cpu的性能使得单位时间推断的图片数更多,则往往会导致图片的平均等待时间即延迟的提升)。
所以上图左边曲线的增长是很科学的。而在右侧,fps不再增加,而延迟继续增长,这是因为batch_size的增长已经触及了cpu性能的上限。在这个时候,继续增加batch_size并不能增加fps,反而因为要处理的图片数增加,而增加推断的延迟。
上图是cpu核数为3时的结果。其基本形状与cpu核数为1时基本一致,原因在上面已有过阐述。但区别在于,在cpu核数为1时,fps的增长在batch_size为32左右时达到了极限,而cpu核数为3时,则在batch_size为16左右时就达到了极限。我认为这是因为,在使用单核时,cpu是在内部处理数据,数据传输的时间可以忽略不计;而使用3个核时,cpu之间可能要进行比较频繁的通信来传递数据,这就导致明明cpu核数增加了,但最优的batch_size值反而下降了。
我们还可以观察到,使用3个cpu核之后,最大fps的值并没有提升3倍,而只是提升了30%左右,我认为也是这个原因。
所以一个可能好的解决方法时,使用并行的网络结构,这样就能尽可能地避免通信带来的时间消耗。
这是把1核与3核放在一起的结果。可以看出,随着batch_size的增加,核数不同而batch_size相同的点的延迟差是在增加的;同时核数越多,相同核数的相邻batch_size的延迟的距离也是增大的。这些可以作为上述推测的佐证。可以猜测,随着cpu核数的增加,通信所占用的时间会逐渐增加,直到核数的增加反而产生负面效应。