使用 OpenCL 加速移动 GPU 推理
2020 年 8 月 17 日
作者:Juhyun Lee 和 Raman Sarokin,软件工程师

虽然 TensorFlow Lite (TFLite) GPU 团队一直在不断改进现有的基于 OpenGL 的移动 GPU 推理引擎,但我们也一直在探索其他技术。其中一项实验取得了相当大的成功,我们很高兴地宣布正式推出基于 OpenCL 的移动 GPU 推理引擎,用于 Android,它可以比我们现有的 OpenGL 后端快约 2 倍,适用于神经网络,这些网络具有足够的工作负载以充分利用 GPU。
图 1. Duo 的 AR 效果由我们的 OpenCL 后端提供支持。

OpenGL 后端的改进

从历史上看,OpenGL 是一个旨在渲染矢量图形的 API。计算着色器是与 OpenGL ES 3.1 一起添加的,但其向后兼容的 API 设计决策限制了我们充分利用 GPU 的潜力。另一方面,OpenCL 从一开始就设计用于使用各种加速器进行计算,因此与我们移动 GPU 推理领域的应用更加相关。因此,我们研究了基于 OpenCL 的推理引擎,它带来了许多功能,使我们能够优化移动 GPU 推理引擎。

性能分析:优化 OpenCL 后端比优化 OpenGL 后端容易得多,因为 OpenCL 提供了良好的性能分析功能,而 Adreno 也很好地支持了这些功能。通过这些分析 API,我们可以非常精确地测量每个内核调度的性能。

优化的工作组大小:我们观察到,TFLite GPU 在 Qualcomm Adreno GPU 上的性能对工作组大小非常敏感;选择正确的工作组大小可以提高性能,而选择错误的工作组大小则会使性能下降同样的幅度。不幸的是,对于具有复杂内存访问模式的复杂内核来说,选择正确的工作组大小并非易事。借助 OpenCL 中提到的性能分析功能,我们能够实现工作组大小的优化器,这使得平均性能提高了 50%。

原生 16 位精度浮点 (FP16):OpenCL 原生支持 FP16,并要求加速器指定数据类型的可用性。作为官方规范的一部分,即使是一些较旧的 GPU,例如 2012 年的 Adreno 305,也能充分发挥其性能。另一方面,OpenGL 依赖于提示,供应商可以选择在其实现中忽略这些提示,从而导致没有性能保证。

常量内存:OpenCL 有一个常量内存的概念。高通添加了一种物理内存,其特性使其非常适合与 OpenCL 的常量内存一起使用。这对于某些特殊情况非常有效,例如神经网络开头或结尾的非常薄的层。Adreno 上的 OpenCL 能够通过与这种物理常量内存和前面提到的原生 FP16 支持相结合,大大优于 OpenGL 的性能。

性能评估

下面,我们展示了 TFLite 在 CPU(大核心上单线程)、使用我们现有的 OpenGL 后端的 GPU 和使用我们新的 OpenCL 后端的 GPU 上的性能。图 2 和图 3 分别描述了推理引擎在几个流行的神经网络(MNASNet 1.3 和 SSD MobileNet v3(大型))上,在选定 Android 设备上的 OpenCL 性能。每组 3 个条形图应独立观察,它们显示了 TFLite 后端在设备上的相对加速。我们的新 OpenCL 后端大约是 OpenGL 后端的两倍快,但在 Adreno 设备(带 SD 注释)上表现更好,因为我们使用前面提到的 Adreno 性能分析器调整了工作组大小。此外,图 2 和图 3 之间的差异表明,OpenCL 在较大的网络上表现更好。
图 2. MNASNet 1.3 在选定 Android 设备上的 OpenCL 推理延迟。
图 3. SSD MobileNet v3(大型)在选定 Android 设备上的 OpenCL 推理延迟。

通过 GPU 代理实现无缝集成

采用 OpenCL 推理引擎的一个主要障碍是,OpenCL 不是标准 Android 发行版的一部分。虽然主要的 Android 供应商将 OpenCL 作为其系统库的一部分,但 OpenCL 可能无法用于某些用户。对于这些设备,需要回退到 OpenGL 后端,该后端在每台 Android 设备上都可用。

为了使开发人员的生活更轻松,我们对 TFLite GPU 代理进行了一些修改。我们首先在运行时检查 OpenCL 的可用性。如果它可用,我们使用新的 OpenCL 后端,因为它比 OpenGL 后端快得多;如果它不可用或无法加载,我们回退到现有的 OpenGL 后端。事实上,OpenCL 后端自 2019 年年中以来一直在 TensorFlow 存储库中,并通过 TFLite GPU 代理 v2 无缝集成,因此您可能已经在通过代理的回退机制使用它。

致谢

Andrei Kulik、Matthias Grundmann、Jared Duke、Sarah Sirajuddin,以及对 Sachin Joglekar 对这篇博文的贡献表示特别感谢。
下一篇文章
Even Faster Mobile GPU Inference with OpenCL

- 作者:Juhyun Lee 和 Raman Sarokin,软件工程师

虽然 TensorFlow Lite (TFLite) GPU 团队一直在不断改进现有的基于 OpenGL 的移动 GPU 推理引擎,但我们也一直在探索其他技术。其中一项实验取得了相当大的成功,我们很高兴地宣布正式推出基于 OpenCL 的移动 GPU 推理引擎,用于 Android,它可以…