TensorFlow采用OpenCL后端使GPU推理性能加倍

TensorFlow团队以异构平台开发框架OpenCL为基础,在Android开发了新的行动GPU推理引擎,在适当大小的神经网络上,以及足够的GPU工作负载,其执行的效率是现有OpenGL后端的2倍。

目前常用的GPU推理引擎是以OpenGL开发,是一种渲染图形API,虽然在OpenGL ES 3.1版本加入了运算着色器(Compute Shader),可用来计算任意的信息,但开发团队提到,其为了要向后兼容的API设计,限制了GPU的运算能力,因此TensorFlow Lite(TFLite)GPU团队在继续发展基于OpenGL行动CPU推理引擎的同时,也在寻求各种可能性。

Duo App中的AR效果,使用OpenCL后端处理

而同样可用来发展机器学习应用的OpenCL(Open Computing Language),一开始就是为各种计算加速器设计,更适合用于行动GPU推理,所以TFLite开发团队便也投入资源,研究基于OpenCL的推理引擎,发现其确实能用来优化GPU推理工作负载。TFLite开发团队提到,与OpenGL相比,优化OpenCL后端要简单许多,因为OpenCL提供良好的分析功能,利用概要分析API,开发团队能够精确地测量核心调度性能。

OpenCL能够良好地支持用于高端Android移动设备的高通Adreno GPU,但是Adreno GPU对于工作组大小非常敏感,配置适当大小的神经网络工作组可以提高性能,错误大小的工作组,却会降低性能,虽然在具有复杂内存访问模式的复杂核心,要找出适当的工作组大小并不容易,但是因为OpenCL具有完整的性能分析功能,因此可被用来优化工作组大小,使平均运算速度提升50%。

而且OpenCL还原生支持16位元浮点数精度,即便是在2012年推出的Adreno 305老旧GPU,都够完全发挥GPU的性能,另外,OpenCL具有常数内存(Constant Memory)的概念,高通在GPU加入的物理内存非常适合用于OpenCL的常数内存,这使得OpenCL在高通GPU的性能大幅超过OpenGL。

TFLite开发团队将常用的2个行动机器学习模型MNASNet和MobileNet v3,拿来比较CPU、OpenGL和OpenCL的性能表现,无论是在MNASNet(如下图)或MobileNet v3,新的OpenCL后端延迟都是最低的,约是OpenGL后端的2倍,而且在标有SD字样使用Adreno GPU的设备上,OpenCL后端性能表现特别好。

开发团队提到,使用OpenCL推理引擎的主要障碍,是OpenCL不包含在标准Android发布版中,即便有一些Android设备厂商在系统函数库加入OpenCL,但是部分用户还是可能因为缺乏OpenCL必要组件,则必须回退使用OpenGL后端。

为了简化开发人员的工作,TFLite GPU一开始会检查OpenCL Runtime的可用性,当不可用或无法加载时,便会切换使用OpenGL后端,开发团队提到,从2019年中期开始,OpenCL后端就进到TensorFlow存储库中,并集成进TFLite GPU委托API里,因此现有TFLite GPU程序可能已经通过委托回退机制,使用到了最新的OpenCL后端。