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

opencl加速_移动端GPU推理性能提升2倍!TensorFlow推出新OpenCL后端

本文转载自TensorFlow。文软件工程师JuhyunLee和RamanSarokinTensorFlowLite(TFLite)GPU团队在不断改进现有基于OpenGL的移动G

fb4508453c16d9b93eb35d410f738607.gif

本文转载自TensorFlow。

文 / 软件工程师 Juhyun Lee 和 Raman Sarokin

TensorFlow Lite (TFLite) GPU 团队在不断改进现有基于 OpenGL 的移动 GPU 推理引擎,同时我们也在不断研究其他技术。在我们所开展的实验中,有一个实验相当成功。在此,我们很高兴地为 Android 推出基于 OpenCL 的移动 GPU 推理引擎,与现有的 OpenGL 后端相比,其在适当大小的神经网络(为 GPU 提供足够的工作负载)的推理速度可提升高 2 倍。

86db3837648635edc8a417b51f79cbb8.gif

图 1. OpenCL 后端可为 Duo 的 AR 特效提供技术支持

对 OpenGL 后端的改进

一直以来,OpenGL 都是为渲染矢量图形而打造 API。我们已在 OpenGL ES 3.1 中添加计算着色器 (Compute shaders),但限于其向后兼容的 API 设计限制,无法发挥出 GPU 的全部潜力。另一方面,OpenCL 本就是为在不同加速器上开展计算工作而设计的,因而与移动 GPU 推理领域尤为相关。因此,我们研究出了基于 OpenCL 的推理引擎,并运用其中的许多功能来优化我们的移动 GPU 推理引擎。

  • OpenGL

    https://www.opengl.org/

  • OpenCL

    https://www.khronos.org/opencl/

性能分析:与优化 OpenGL 相比,优化 OpenCL 后端更容易实现,因为 OpenCL 可为我们提供出色的分析功能,且 Adreno 能为其提供良好支持。通过使用这些分析 API,我们能够非常精确地衡量出每个内核调度的性能。

  • Adrenohttps://developer.qualcomm.com/software/adreno-gpu-sdk/gpu

经过优化的工作组大小:我们发现,Qualcomm Adreno GPU 上的 TFLite GPU 性能易受工作组大小影响;采用合适的工作组大小可以提高性能,而选择不当的工作组大小则会相应地降低性能。遗憾的是,对于具有复杂显存访问模式的复杂内核来说,采用合适的工作组大小却并非易事。借助 OpenCL 中的性能分析功能(如上所述),我们可实现针对工作组大小的优化工具,从而将平均速度提升了50%。

原生 16 位精度浮点 (FP16):OpenCL 本身支持 FP16,并需要加速器指定可用的数据类型。官方规范中规定,一些较早推出的 GPU(例如 2012 年推出的 Adreno 305)也可全功能运行 OpenCL。另一方面,OpenGL 比较依赖提示,而供应商有可能在实施过程中选择忽略这些提示,导致无法保证发挥其应有的性能水平。

常量显存 (Constant Memory):我们已在 OpenCL 中引入常量显存的概念。Qualcomm 在其 GPU 中加入了物理显存,物理显存的一些特性使其非常适合与 OpenCL 的常量显存一起使用。并在某些特定情况下有非常好的效果,例如在神经网络首尾较窄的层上运行时。通过与该物理常量显存和原生 FP16 支持(如上所述)的协同作用,Adreno 上的 OpenCL 可发挥出远超 OpenGL 的性能。

性能评估

我们会在下方展示 TFLite 在 CPU(大核单线程)、使用现有 OpenGL 后端的 GPU 和使用新 OpenCL 后端的 GPU 上的性能水平。图 2 和图 3 分别说明推理引擎在搭载 OpenCL 的所选 Android 设备上,使用数个广为人知的神经网络(如 MNASNet 1.3 和 SSD MobileNet v3(大))时所发挥出的性能水平。每组的 3 个柱形显示了 TFLite 后端在设备上的相对加速效果。我们新 OpenCL 后端的速度约为 OpenGL 后端的两倍,其在 Adreno 设备(标注 SD)上的表现尤为出色,这是因为我们已使用 Adreno 性能分析器(如上所述)调整了工作组的大小。此外,图 2 和图 3 之前的差异表明,OpenCL 在较大网络上的表现更为出色。

86f05b5b490b00a8bc992250060d970b.png

图 2. 在搭载 OpenCL 的特定 Android 设备上,推理引擎在 MNASNet 1.3 中的延迟时间

d50dadb83af9c0419240115dcff2e886.png

图 3. 在搭载 OpenCL 的特定 Android 设备上,SSD MobileNet v3 (large) 的推理延迟时间

借助 GPU Delegate,提供无缝集成体验

使用 OpenCL 推理引擎的主要障碍在于 Android 发行版中不包含 OpenCL。尽管大多数 Android 供应商会将 OpenCL 纳入系统库中,但一些用户可有能仍无法使用 OpenCL。针对这些设备,我们需要回退到 Android 设备上运行的 OpenGL 后端。

为方便开发者,我们对 TFLite GPU Delegate 添加了一些修改。首先,我们会在运行时检查 OpenCL 的可用性。如果 OpenCL 可用,我们会使用新的 OpenCL 后端,因为其速度远高于 OpenGL 后端;如果 OpenCL 不可用或无法加载,我们将会回退到现有的 OpenGL 后端。事实上,OpenCL 后端自 2019 年年中以来便一直存在于 TensorFlow 代码库中,并已通过 TFLite GPU Delegate v2 版与代码库无缝集成,因此,您可能已在使用代理的回退机制时,用到过这个后端。

致谢

感谢 Andrei Kulik、Matthias Grundman、Jared Duke、Sarah Sirajuddin,也特别感谢 Sachin Joglekar 对本博文的贡献。

ea46f9e18b0ce90a78d9af66e1f9ca16.png

备注:框架

1bc510823716a70db8e03d11d1204352.png

TF&PyTorch学习交流群

深度学习框架、TensorFlow、PyTorch等技术,若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

017a8a1d4bd524fea73235a160b4d1dd.png

在看,让更多人看到  08abea3fee08299c7584e8589609d12e.gif




推荐阅读
  • ASP.NET Core WebAPI 开发新建WebAPI项目  转
    转 http:www.cnblogs.comlinezerop5497472.htmlASP.NETCoreWebAPI开发-新建WebAPI项目ASP.NETCoreWebAPI ... [详细]
  • 在Android源码环境下编译系统App使用第三方jar包的方法(备忘)
    1将要使用的jar包放入App的根目录,即Android.mk所在目录2按如下方式编写Android.mk文件(########之间的行用于编译和使用jar包)LOCAL_PATH:$(ca ... [详细]
  • PHPcURL获取微信公众号access_token的实例php实例:这篇文章主要介绍了PHPcURL获取微信公众号access_token的实例,需要的朋友可以参考下1.开发微信 ... [详细]
  • Mac下Flutter安装AndroidStudio配置
    补一个Mac下Flutter安装AndroidStudio配置(官网地址:https:flutter.devdocsget-startedinstallmacos)1.下载安装包; ... [详细]
  • Spring Boot 打包上传Docker 仓库的详细步骤
    这篇文章主要介绍了SpringBoot打包上传Docker仓库的详细步骤,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ... [详细]
  • 在MirrorAPI中,我们可以使用以下内容: ... [详细]
  • 下面是一个用openssl实现获取https网页内容的demo,整个流程比较简单,主要封装的API如下staticinthttps_init(http ... [详细]
  • ARToolKitunity
    ARToolKit为开源的AR库,相对于高通和easyAr有几点特点:1)开源2)识别项目可以动态添加(详细在后)3)识别文件可以本地生成4)目前只能识别图片(目前为.jpg格式) ... [详细]
  • 2019 年 Firebase 峰会上发布的新功能
    作者FrancisMa,HeadofProductFirebase的使命是帮助移动开发者和Web开发者迈向成功,但考虑到Firebase每个月有超过200万个活跃的应 ... [详细]
  • 一.支付1.系统繁忙,请稍后重试。(ALI40247):签名错误。我的问题来源(两个问题):①签名串sig ... [详细]
  • Maven 无法打包jar到 Tomcat
    今天新来的同事,让他调试短信验证的接口。跟我说添加的aliyun的短信验证服务无法在tomcat上运行。然后给我看了报错信息:java.lang.NoClassDefFoundEr ... [详细]
  • POI编程
    POI编程1简介在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中 ... [详细]
  • 近期因为内部培训有序列化的需求,于是趁此机会由浅入深的剖析一下序列化相关内容。之前也写过由浅入深的xml漏洞系列,欢迎阅读:https:skysec.top20180817浅析xml及其安全问题 ... [详细]
  • flutter 环境安装以及配置
    首先需要下载flutter源码,以下是github地址:https:github.comflutterflutter然后需要安装git环境吧,下图红框可以自行下载安装接下来需要安装 ... [详细]
  • 将android-support-multidex.jar放到libs下然后编译,出现如下错误:Error:Executionfailedfortask':app:pack ... [详细]
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社区 版权所有