TensorFlow Lite Core ML 代理使 iPhone 和 iPad 上的推理更快
2020 年 4 月 2 日
作者:Tei Jeong 和 Karim Nosseir,软件工程师



TensorFlow Lite 提供了将模型推理的一部分或整个模型推理委托给加速器的选项,例如 GPU、DSP 和/或 NPU,以实现高效的移动推理。在 Android 上,您可以从多个代理中选择:NNAPIGPU 以及最近添加的 Hexagon 代理。以前,对于苹果的移动设备(iPhone 和 iPad)来说,唯一的选择是 GPU 代理。

当苹果发布其机器学习框架 Core ML 和 Neural Engine(苹果 Bionic SoC 中的神经处理单元 (NPU))时,这使得 TensorFlow Lite 可以利用苹果的硬件。

神经处理单元 (NPU),类似于 Google 的 Edge TPU 和苹果的 Neural Engine,是专门设计的硬件加速器,旨在加速机器学习应用程序。这些芯片旨在加快移动或边缘设备上的模型推理速度,并比在 CPU 或 GPU 上运行推理消耗更少的能量。

今天,我们很高兴宣布一个新的 TensorFlow Lite 代理,它使用苹果的 Core ML API 在带有 Neural Engine 的 iPhone 和 iPad 上更快地运行浮点模型。我们能够看到 MobileNet 和 Inception V3 等模型的性能提升高达 14 倍(见下文详细信息)。
TFLite Core
图 1:运行时代理工作原理的高级概述。图形的支持部分在加速器上运行,而其他操作通过 TensorFlow Lite 内核在 CPU 上运行。

哪些设备受支持?

此代理在运行 iOS 12 或更高版本的 iOS 设备(包括 iPadOS)上运行。但是,要获得真正的性能优势,它应该在带有 Apple A12 SoC 或更高版本的设备上运行(例如,iPhone XS)。对于较旧的 iPhone,您应该使用 TensorFlow Lite GPU 代理 来获得更快的性能。

哪些模型受支持?

在此初始发布中,支持 32 位浮点模型。一些受支持模型的示例包括但不限于图像分类、目标检测、目标分割和姿态估计模型。代理支持许多计算密集型操作,例如卷积,尽管某些操作存在某些限制。这些限制在运行时进行委托之前进行检查,因此不受支持的操作会自动回退到 CPU。操作的完整列表以及相应的限制(如果有)在 代理的文档 中。

对性能的影响

我们使用两个常见的浮点模型 MobileNet V2 和 Inception V3 测试了代理。基准测试是在 iPhone 8+(A11 SoC)、iPhone XS(A12 SoC)和 iPhone 11 Pro(A13 SoC)上进行的,并针对三个代理选项进行了测试:仅 CPU(无代理)、GPU 和 Core ML 代理。如前所述,您可以在具有 A12 SoC 或更高版本的模型上看到加速性能,但在 iPhone 8+ 上(第三方无法使用 Neural Engine)——使用 Core ML 代理时,小型模型没有观察到性能提升。对于大型模型,性能类似于 GPU 代理。

除了模型推理延迟之外,我们还测量了启动延迟。请注意,加速速度是以延迟启动为代价的。对于 Core ML 代理,启动延迟会随着模型大小的增加而增加。例如,在 MobileNet 等小型模型上,我们观察到 200-400 毫秒的启动延迟。另一方面,对于 Inception V3 等大型模型,启动延迟可能为 2-4 秒。我们正在努力减少启动延迟。代理也会影响二进制大小。使用 Core ML 代理可能会使二进制大小增加多达 1 MB。

模型


  • MobileNet V2 (1.0, 224, float) [下载] : 图像分类
    • 小型模型。整个图形在 Core ML 上运行。
  • Inception V3 [下载] : 图像分类
    • 大型模型。整个图形在 Core ML 上运行。

设备

  • iPhone 8+(Apple A11,iOS 13.2.3)
  • iPhone XS(Apple A12,iOS 13.2.3)
  • iPhone 11 Pro(Apple A13,iOS 13.2.3)

MobileNet V2 观察到的延迟和加速

图 2:MobileNet V2 观察到的延迟和加速。所有版本都使用浮点模型。CPU 基线表示双线程 TensorFlow Lite 内核。
* GPU:Core ML 使用 CPU 和 GPU 进行推理。NPU:Core ML 使用 CPU 和 GPU,以及 NPU(神经引擎)进行推理。

Inception V3 观察到的延迟和加速

图 3:Inception V3 观察到的延迟和加速。所有版本都使用浮点模型。CPU 基线表示双线程 TensorFlow Lite 内核。
* GPU:Core ML 使用 CPU 和 GPU 进行推理。NPU:Core ML 使用 CPU 和 GPU,以及 NPU(神经引擎)进行推理。

如何使用它?

您只需使用新代理实例在 TensorFlow Lite Interpreter 上进行调用即可。有关详细说明,请阅读 完整文档。您可以使用 Swift API(以下示例)或 C++ API(如文档所示)在推理过程中调用 TensorFlow Lite 代理。

Swift 示例

这是从典型的 Swift 应用程序调用此代理的样子。您只需创建一个新的 Core ML 代理并将其传递给原始解释器初始化代码。
let coreMLDelegate = CoreMLDelegate()
let interpreter = try Interpreter(modelPath: modelPath,
                                  delegates: [coreMLDelegate])

未来的工作

在接下来的几个月中,我们将通过更多操作覆盖和额外的优化来改进现有的代理。支持使用 训练后浮点 16 量化 训练的模型正在路线图中。这将允许加速模型,模型大小减半,精度损失很小。

支持 训练后权重量化(也称为动态量化)也在路线图中。

反馈

这是我们开发人员的常见功能请求。我们很高兴发布它,并期待听到您的想法。分享您的用例,可以直接分享或在 Twitter 上使用标签 #TFLite 和 #PoweredByTF。对于错误或问题,请在 GitHub 上联系我们。

致谢

感谢 Tei Jeong、Karim Nosseir、Sachin Joglekar、Jared Duke、Wei Wei、Khanh LeViet。

注意:Core ML、Neural Engine 和 Bionic SoC(A12、A13)是 Apple Inc. 的产品。
下一篇文章
TensorFlow Lite Core ML delegate enables faster inference on iPhones and iPads

- 作者:Tei Jeong 和 Karim Nosseir,软件工程师



TensorFlow Lite 提供了将模型推理的一部分或整个模型推理委托给加速器的选项,例如 GPU、DSP 和/或 NPU,以实现高效的移动推理。在 Android 上,您可以从多个代理中选择:NNAPIGPU 以及最近添加的 Hexagon 代理。以前,对于苹果的移动设备(iPhone…