技术编程|快 2 倍,TFLite 推出基于 OpenCL 的 Android 移动 GPU 推理引擎


TensorFlow Lite(TFLite)现在支持在 Android 设备上使用 OpenCL 进行 GPU 推理 , 这一改进使得 TFLite 性能比使用现有 OpenGL 后端提高了约 2 倍 。

技术编程|快 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 推理引擎 。
相比之下 , 新的移动 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 上的性能对比 。

技术编程|快 2 倍,TFLite 推出基于 OpenCL 的 Android 移动 GPU 推理引擎
本文插图


技术编程|快 2 倍,TFLite 推出基于 OpenCL 的 Android 移动 GPU 推理引擎
本文插图

上图分别说明了在两个著名的神经网络 MNASNet 1.3 和 SSD MobileNet v3(大型)上使用 OpenCL 的特定 Android 设备上推理引擎的性能 。 可以看到 , 新的 OpenCL 后端的速度大约是 OpenGL 后端的两倍 , 并且 OpenCL 在较大的网络上的性能甚至更好 。
此外 , 因为 OpenCL 本身不属于 Android 的一部分 , 某些用户可能无法使用 。 为了简化开发 , TFLite GPU 委托添加了一些修改 , 首先在运行时检查 OpenCL 的可用性 , 如果可用 , 将使用新的 OpenCL 后端 , 否则将退回到现有的 OpenGL 后端 。
【技术编程|快 2 倍,TFLite 推出基于 OpenCL 的 Android 移动 GPU 推理引擎】实际上 , OpenCL 后端自 2019 年中期以来一直存在于 TensorFlow 存储库中 , 并且通过 TFLite GPU delegate v2 无缝集成 。


    推荐阅读