TensorFlow Lite(TFLite)现在支持在 Android 设备上使用 OpenCL 进行 GPU 推理,这一改进使得 TFLite 性能比使用现有 OpenGL 后端提高了约 2 倍。
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 上的性能对比。
上图分别说明了在两个著名的神经网络 MNASNet 1.3 和 SSD MobileNet v3(大型)上使用 OpenCL 的特定 Android 设备上推理引擎的性能。可以看到,新的 OpenCL 后端的速度大约是 OpenGL 后端的两倍,并且 OpenCL 在较大的网络上的性能甚至更好。
此外,因为 OpenCL 本身不属于 Android 的一部分,某些用户可能无法使用。为了简化开发,TFLite GPU 委托添加了一些修改,首先在运行时检查 OpenCL 的可用性,如果可用,将使用新的 OpenCL 后端,否则将退回到现有的 OpenGL 后端。
实际上,OpenCL 后端自 2019 年中期以来一直存在于 TensorFlow 存储库中,并且通过 TFLite GPU delegate v2 无缝集成。
另外,现在马上就是“金九银十跳槽期”了,有不少朋友都在 跃跃欲试了 ,对于程序员来说,要学习的知识内容、技术有太多太多难点,要想不被面试淘汰就只能提前做好复习规划、认真刷题,在学习中不断提升自己,个人建议在面试之前 给自己做一次完整的知识梳理 和 刷题 是必不可少的。 做知识梳理能加深你对原理的掌握程度,而刷题能提高你对技术面试的广度和深度。
请记住,从来都是只是我们去适应环境,而不是环境来适应我们!
附上我之前收集的 二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴) 和我 自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总共计732页)。
腾讯Android面试真题(Java部分)
腾讯Android面试真题(Android部分)
一二线互联网公司Android面试真题分类总览