快 2 倍,TensorFlow Lite 推出基于 OpenCL 的 Android 移動 GPU 推理引擎
TensorFlow Lite(TFLite)現(xiàn)在支持在 Android 設(shè)備上使用 OpenCL 進行 GPU 推理,這一改進使得 TFLite 性能比使用現(xiàn)有 OpenGL 后端提高了約 2 倍。
TensorFlow Lite 團隊介紹了目前其使用 OpenCL 在移動 GPU 推理上所取得的進展,并宣布正式推出基于 OpenCL 的 Android 移動 GPU 推理引擎,該引擎在大小合理的神經(jīng)網(wǎng)絡(luò)上可比現(xiàn)有的 OpenGL 后端提供高達 2 倍的性能提升。
OpenGL ES 3.1 中添加了計算著色器,但其向后兼容的 API 設(shè)計決策限制了發(fā)揮 GPU 的全部潛能。另一方面,OpenCL 從一開始就是為使用各種加速器進行計算而設(shè)計的,因此與移動 GPU 推理領(lǐng)域更加相關(guān)。因此,TFLite 團隊研究了基于 OpenCL 的推理引擎,引入了一些功能,使得能夠優(yōu)化移動 GPU 推理引擎。
相比之下,新的移動 GPU 推理引擎有以下要點:
性能分析:與 OpenGL 相比,優(yōu)化 OpenCL 后端要容易得多,因為 OpenCL 提供了良好的分析功能與高通 Adreno 很好的支持。使用這些概要分析 API,能夠非常精確地測量每個內(nèi)核調(diào)度的性能。
優(yōu)化工作組大?。?/strong>高通 Adreno GPU 上的 TFLite GPU 性能對工作組大小非常敏感,選擇正確的工作組大小可以提高性能,反之亦然。借助上述 OpenCL 中的性能分析功能,能夠?qū)崿F(xiàn)針對工作組大小的優(yōu)化器,這使平均速度提高了 50%。
原生 16 位精度浮點(FP16):OpenCL 原生支持 FP16,并要求加速器指定數(shù)據(jù)類型的可用性。作為正式規(guī)范的一部分,即使是某些較舊的 GPU,例如 2012 年推出的 Adreno 305,也可以發(fā)揮其全部功能。
恒定內(nèi)存(constant memory):OpenCL 具有恒定內(nèi)存的概念。高通增加了一個物理內(nèi)存能力,使其非常適合與 OpenCL 的恒定內(nèi)存一起使用。對于某些特殊情況,例如在神經(jīng)網(wǎng)絡(luò)開始或末尾非常薄的層,這被證明是非常有效的。Adreno 上的 OpenCL 通過與該物理恒定內(nèi)存和上述原生 FP16 支持的協(xié)同作用,能夠大大超越 OpenGL 的性能。
TFLite 具體展示了在 CPU(大內(nèi)核上的單線程)使用現(xiàn)有 OpenGL 后端的 GPU 以及使用新的 OpenCL 后端的 GPU 上的性能對比。
上圖分別說明了在兩個著名的神經(jīng)網(wǎng)絡(luò) MNASNet 1.3 和 SSD MobileNet v3(大型)上使用 OpenCL 的特定 Android 設(shè)備上推理引擎的性能。可以看到,新的 OpenCL 后端的速度大約是 OpenGL 后端的兩倍,并且 OpenCL 在較大的網(wǎng)絡(luò)上的性能甚至更好。
此外,因為 OpenCL 本身不屬于 Android 的一部分,某些用戶可能無法使用。為了簡化開發(fā),TFLite GPU 委托添加了一些修改,首先在運行時檢查 OpenCL 的可用性,如果可用,將使用新的 OpenCL 后端,否則將退回到現(xiàn)有的 OpenGL 后端。實際上,OpenCL 后端自 2019 年中期以來一直存在于 TensorFlow 存儲庫中,并且通過 TFLite GPU delegate v2 無縫集成。