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

英特尔边缘计算社区
企业官方账号
2020-09-28 04:42:58
加精
OpenVINO号称支持CPU INT8的推理已经好久了 Introducing int8 quantization for fast CPU inference using OpenVINO 号称在mobilenet-ssd上 i7-8700能有1.36X的性能提升。但是前几个版本的calibration tool的变化实在太大了,从native C++变成python tool, 再到现在的DL workbench docker, 从开始的反人类操作到现在总算能用了。虽然还有很多bug,虽然现在只是对于世界知名模型转换友好,但是总算能在我自己本地看看FP32到INT8的性能提升了

下面实操一下

先搭建环境

安装docker for windows, 按照这个连接的windows安装部分一步一步来 Install DL Workbench from Docker Hub* on Windows* OS
安装DeepLearning Workbench
屏幕右下角docker图标上点鼠标右键,进入Setting,把内存设大一点,否则等下转换可能会因为内存不够导致crash,设置完成后docker会自动重启动



启动powershell, 运行下面的命令把docker镜像拖到本地
docker pull openvino/workbench:latest
运行下面命令启动workbench container
docker run -p 127.0.0.1:5665:5665 \
--name workbench \
--privileged \
-v /dev/bus/usb:/dev/bus/usb \
-v /dev/dri:/dev/dri \
-e PROXY_HOST_ADDRESS=0.0.0.0 \
-e PORT=5665 \
-it openvino/workbench:latest
看到powershell里哗啦哗啦运行打印出了一堆字就好了

以后再要运行,直接在powershell里运行命令
docker start -a workbench


接下来打开Chrome浏览器(不要用edge浏览器),打开地址 127.0.0.1:5665,如果出现下面的网页就可以用了



Workbench可以帮你看模型文件的拓扑,测试推理的性能和精确度,以及做FP32/FP16/INT8转换。

具体导入模型的教程可以参考Intel官网 Work with Models and Sample Datasets

转换Mobilenet-ssd模型其实很简单了,按照官网教程

导入下载好的mobilenet-ssd caffe模型
导入一个用于校正用的数据集,转换INT8模型必须用ImageNet 或者 Pascal VOC格式的数据集,我这里用VOC的官方数据集
先验证一下mobilenet-ssd官方模型的准确率,
做INT8转换,转换时候需要设允许的精度下降程度和使用数据集的百分比
等待转换完成
下载转换好的INT8模型到本地
我的验证模型精度的设置为



转换好的网页显示如下



INT8的模型各层的数据类型也可以直接看到,不是所有层都转换成了INT8



把模型带进前面的benchmark程序里试试

CPU Batchsize = 1, nireq = 1 Throughput: 48FPS



CPU Batchsize = 1, nireq = 4 Throughput: 133FPS



把INT8模型加载到GPU里,推理性能和GPU FP32一致,可见GPU在内部把INT8模型转化为FP32

再测下MULTI:CPU,GPU INT8 Batchsize = 1, nireq = 8 (CPU_THROUGHPUT_AUTO/GPU_THROUGHPUT_AUTO), Throughput: 150FPS



这个性能倒是跟MULTI:CPU,GPU FP16的最好数据类似,大概是因为虽然CPU算INT8快了不少,但是GPU反而在做FP32计算,拖了后腿。

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

CPU INT8推理性能和GPU FP16性能类似,相对与CPU FP32有30%以上的性能提升,如果CPU推理时推理模型能转换成INT8模式,还是尽量用INT8模型
OpenVINO的INT8模型转换只是在保证设定的识别精度的情况下尽量把某些层转成INT8, 并不存在转换INT8过程中重新使用数据集training来提升精度的过程。所以转换出来的模型的效率不高,转出来的模型是FP32/INT8的混合模型,不是纯INT8模型
目前2019R3版本的OpenVINO的INT8模型转换只是针对一些开源的公开模型比较友好,对于支持那些有自定义层Custom Layer的模型转换还很麻烦,效果也不好
INT8模型对GPU来说等于FP32模型,所以GPU使用INT8模型效率不高,尽量不要给GPU加载INT8模型


最后补充一下,以上结果均是就mobilenet-ssd来测试。数据显示INT8 multi模式和FP16 multi模式性能接近。但是还没有分析性能不能提升的原因在哪里,不知道此时瓶颈在内存带宽上还是在计算量上。对于其他推理模型,可能结果不一样;同时对于其他的硬件平台,可能结果也不一样,有的笔记本平台Intel的集成显卡性能更强一些,大部分台式机上CPU的主频和核数更多一些。所以测试结果很可能也不一样,但是就只做推理计算而言,普通的CPU和集成显卡也是可以胜任相当一部分实时推理计算的需求的。
...全文
24972 2 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
妖妖琳 2020-12-18
  • 打赏
  • 举报
回复
dv_zheng 2020-12-17
6666666666666666666666666666
  • 打赏
  • 举报
回复
相关推荐
发帖
英特尔边缘计算技术

551

社区成员

英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
帖子事件
创建了帖子
2020-09-28 04:42
社区公告
暂无公告