TensorFlow Lite(TFLite)现在在Android设备上使用OpenCL支持GPU推理。
这项改进使TFLite性能比使用现有OpenGL后端快大约2倍。
TensorFlow Lite团队介绍了使用OpenCL在移动GPU推理方面的最新进展,并宣布正式推出基于OpenCL的Android移动GPU推理引擎。
该引擎可提供高达2倍的性能提升。
OpenGL ES 3.1中添加了计算着色器,但其向后兼容的API设计决策限制了GPU的全部潜力。
另一方面,OpenCL从一开始就设计为使用各种加速器进行计算,因此它与移动GPU推理领域更加相关。
因此,TFLite团队研究了基于OpenCL的推理引擎,并介绍了一些功能,这些功能可以优化移动GPU推理引擎。
相反,新的移动GPU推理引擎具有以下几点:性能分析:与OpenGL相比,优化OpenCL后端要容易得多,因为OpenCL提供了良好的分析功能和Qualcomm Adreno的良好支持。
使用这些概要分析API,可以非常准确地衡量每个核心调度的性能。
优化工作组规模:高通Adreno GPU上的TFLite GPU的性能对工作组规模非常敏感。
选择正确的工作组规模可以提高性能,反之亦然。
使用OpenCL中的上述性能分析功能,可以实现针对工作组规模的优化器,从而将平均速度提高了50%。
本机16位精度浮点(FP16):OpenCL本机支持FP16,并要求加速器指定数据类型的可用性。
作为官方规范的一部分,即使是某些较旧的GPU,例如2012年推出的Adreno 305,也可以执行其全部功能。
恒定内存:OpenCL具有恒定内存的概念。
高通公司增加了物理内存功能,使其非常适合与OpenCL的恒定内存一起使用。
对于某些特殊情况,例如神经网络开始或末尾的非常薄的层,这被证明是非常有效的。
Adreno上的OpenCL可以通过此物理常量内存和上述本机FP16支持的协同作用大大超越OpenGL的性能。
TFLite专门显示了使用现有OpenGL后端GPU和新的OpenCL后端GPU的CPU(大型内核上的单线程)之间的性能比较。
上图说明了在两个著名的神经网络MNASNet 1.3和SSD MobileNet v3(大)上使用OpenCL的特定Android设备上推理引擎的性能。
如您所见,新的OpenCL后端的速度大约是OpenGL后端的两倍,而OpenCL在大型网络上的性能甚至更高。
另外,由于OpenCL本身不是Android的一部分,因此某些用户可能无法使用它。
为了简化开发,TFLite GPU委托添加一些修改,首先在运行时检查OpenCL的可用性,如果可用,它将使用新的OpenCL后端,否则将回退到现有的OpenGL后端。
实际上,OpenCL后端自2019年中以来一直位于TensorFlow存储库中,并通过TFLite GPU委托v2无缝集成。