快 2 倍TFLite 推出基于 OpenCL 的 Android 移动 GPU 推理引擎TensorFlow Lite 团队介绍了目前其使用 OpenCL 在移动 GPU 推理上所取得的进展,并宣布正式推出基于 OpenCL 的 Android 移动 GPU 推理引擎,该引擎在大小合理的神经网络上可比现有的 OpenGL 后端提供高达 2 倍的性能提升。
OpenGL ES 3.1 中添加了计算着色器,但其向后兼容的 API 设计决策限制了发挥 GPU 的全部潜能。另一方面,OpenCL 从一开始就是为使用各种加速器进行计算而设计的,因此与移动 GPU 推理领域更加相关。
因此,TFLite 团队研究了基于 OpenCL 的推理引擎,引入了一些功能,使得能够优化移动 GPU 推理引擎。
性能分析:与 OpenGL 相比,优化 OpenCL 后端要容易得多,因为 OpenCL 提供了良好的分析功能与高通 Adreno 很好的支持。使用这些概要分析 API,能够非常精确地测量每个内核调度的性能。
优化工作组大小:高通 Adreno GPU 上的 TFLite GPU 性能对工作组大小非常敏感,选择正确的工作组大小可以提高性能,反之亦然。借助上述 OpenCL 中的性能分析功能开云网址·(中国)官方网站,能够实现针对工作组大小的优化器,这使平均速度提高了 50%。
原生 16 位精度浮点(FP16):OpenCL 原生支持 FP16,并要求加速器指定数据类型的可用性。作为正式规范的一部分,即使是某些较旧的 GPU,例如 2012 年推出的 Adreno 305,也可以发挥其全部功能。
恒定内存(constant memory):OpenCL 具有恒定内存的概念。高通增加了一个物理内存能力开云网址·(中国)官方网站,使其非常适合与 OpenCL 的恒定内存一起使用。对于某些特殊情况,例如在神经网络开始或末尾非常薄的层,这被证明是非常有效的。Adreno 上的 OpenCL 通过与该物理恒定内存和上述原生 FP16 支持的协同作用,能够大大超越 OpenGL 的性能。
TFLite 具体展示了在 CPU(大内核上的单线程)使用现有 OpenGL 后端的 GPU 以及使用新的 OpenCL 后端的 GPU 上的性能对比。
可以看到开云网址·(中国)官方网站,新的 OpenCL 后端的速度大约是 OpenGL 后端的两倍,并且 OpenCL 在较大的网络上的性能甚至更好。
此外,因为 OpenCL 本身不属于 Android 的一部分,某些用户可能无法使用。为了简化开发,TFLite GPU 委托添加了一些修改,首先在运行时检查 OpenCL 的可用性,如果可用,将使用新的 OpenCL 后端,否则将退回到现有的 OpenGL 后端。