当前位置: 代码迷 >> 综合 >> 基于openvino 2019R3的推理性能优化的学习与分析 (六) 基于CPU的INT8推理(inference)性能分析
  详细解决方案

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

热度:75   发布时间:2024-01-12 21:17:25.0

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的性能提升了

 

下面实操一下

先搭建环境

  1. 安装docker for windows, 按照这个连接的windows安装部分一步一步来 Install DL Workbench from Docker Hub* on Windows* OS
  2. 安装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推理

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

 

最后补充一下,以上结果均是就mobilenet-ssd来测试。数据显示INT8 multi模式和FP16 multi模式性能接近。但是还没有分析性能不能提升的原因在哪里,不知道此时瓶颈在内存带宽上还是在计算量上。对于其他推理模型,可能结果不一样;同时对于其他的硬件平台,可能结果也不一样,有的笔记本平台Intel的集成显卡性能更强一些,大部分台式机上CPU的主频和核数更多一些。所以测试结果很可能也不一样,但是就只做推理计算而言,普通的CPU和集成显卡也是可以胜任相当一部分实时推理计算的需求的。

  相关解决方案