热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于openvino2019R3的推理性能优化的学习与分析(四)基于GPU的推理(inference)性能分析

再看看纯集成显卡GPU的mobilenet-ssd的推理性能, 测试平台是i57440HQ,4核4线程,GPU是Gen9的GT2,24EU,属于纯大白菜集成显卡 首先是FP32模型

再看看纯集成显卡GPU的mobilenet-ssd 的推理性能,  测试平台是i5 7440HQ, 4核4线程, GPU是Gen9 的GT2, 24EU, 属于纯大白菜集成显卡

 

首先是FP32模型

当Batch size =1时

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

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

Latency = 13.6ms, Throughtput = 73FPS, 性能还不错,是CPU的2倍多

  • inference request(nireq) = 4时,即设置GPU_THROUGHPUT_STREAMS = GPU_THROUGHPUT_AUTO时,openvino建议number of stream数为2, 对应的number of ireq并发数为4 , 同时并发4个推理请求

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

这个就有点尴尬了,Throughtput = 78FPS, 提升不大, 对应的CPU推理是96FPS。这时候的性能表现不如CPU。这时候每路推理的一致性还不错,每路的工作量基本一致

 

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

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

63FPS, 看来集成显卡资源有限,数据量一旦超出硬件的能力范围性能就会大打折扣

 

 

接下来是FP16模型

当Batch size =1时

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

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

Latency: 9ms, Throughtput: 113FPS, 这个数字大大高于CPU FP32的最好表现

 

  • inference request(nireq) = 4时,即设置GPU_THROUGHPUT_STREAMS = GPU_THROUGHPUT_AUTO时,openvino建议number of stream数为2, 对应的number of ireq并发数为4 , 同时并发4个推理请求

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

133FPS,看来GPU相对于CPU确实更适合做推理。同时相对于FP32的模型,因为FP16模型对内存带宽的需求减半,所以性能也是大大的提升。

 

还是看batch size = 3,inference request(nireq) = 4时。即每次推理处理三张图片, 4路推理并发的情况

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

看来还是硬件资源有限,数据一多以后处理能力就会大幅度下降。

 

前面都是用GPU_THROUGHPUT_STREAMS = GPU_THROUGHPUT_AUTO来测试,最后看一下手工设置GPU_THROUGHPUT_STREAMS = 1,即nstream = 1, nireq =2的情况,看看性能会不会减半

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

这个FPS几乎和GPU_THROUGHPUT_AUTO一样了,只有不到2%的下降,看来前2路的推理就占了GPU绝大多数的资源,GPU_THROUGHPUT_AUTO多出来的2路nireq就是为了再从蚊子腿里再找一些肉。

 

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

  1. 对GPU推理来说,FP16的性能大大好于FP32, 基本可以翻倍
  2. batch size一定要设为1,因为GPU的资源限制比CPU还多,所以一定要精打细算,少食多餐
  3. 推理并发数不一定非要按照GPU_THROUGHPUT_AUTO的建议值来设,并发数稍微少一些也能获得很好的性能,同时也能给其他系统应用保留更多的资源调度
  4. GPU推理不容易造成CPU过热降频而引起性能下降,同时也不怎么受Windows后台程序的影响。只要有足够的CPU资源给GPU喂数据,处理速度都会比较稳定
  5. GPU推理性能会受其他图形程序使用GPU而引起性能下降,比如推理同时调用OpenCV的imshow()显示会导致推理速度下降

推荐阅读
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • 本文详细介绍了进程、线程和协程的概念及其之间的区别与联系。进程是在内存中运行的独立实体,具有独立的地址空间和资源;线程是操作系统调度的基本单位,属于进程内部;协程则是用户态下的轻量级调度单元,性能更高。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Requests库的基本使用方法
    本文介绍了Python中Requests库的基础用法,包括如何安装、GET和POST请求的实现、如何处理Cookies和Headers,以及如何解析JSON响应。相比urllib库,Requests库提供了更为简洁高效的接口来处理HTTP请求。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • 汇编语言:编程世界的始祖,连C语言都敬畏三分!
    当C语言还在萌芽阶段时,它首次接触到了汇编语言,并对其简洁性感到震惊。尽管汇编语言的指令极其简单,但它却是所有现代编程语言的基础,其重要性不言而喻。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
author-avatar
白色的睡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有