TensorFlow Lite 转换器中的 TensorFlow 操作融合
2020 年 7 月 1 日
作者:Ashwin Murthy,Google TensorFlow 团队软件工程师

概述

边缘部署的效率和性能至关重要。TensorFlow Lite 通过将一系列更细粒度的 TensorFlow 操作(本身由复合操作组成,如 LSTM)融合和优化为单个可执行的 TensorFlow Lite 单位来实现这一点。

许多用户要求我们提供更细粒度的控制方式,以便将操作融合在一起以实现更高的性能提升。今天,我们通过为用户提供指定如何融合操作的能力来实现这一点。

此外,此新功能允许无缝转换 TensorFlow Keras LSTM 操作,这是我们最常被请求的功能之一。最重要的是,您现在可以将用户定义的 RNN 转换插入 TensorFlow Lite!

融合操作更高效

如前所述,TensorFlow 操作通常由许多基本、更细粒度的操作组成,例如 tf.add。这对于实现一定程度的可重用性很重要,使用户能够创建由现有单元组成的操作。tf.einsum 是复合操作的一个例子。执行复合操作等效于执行其所有组成操作。

但是,为了提高效率,通常将一组更细粒度操作的计算“融合”到单个操作中。

融合操作的另一个用途是提供更高层次的接口来定义复杂转换,例如量化,否则在更细粒度的级别上将不可行或非常难以实现。

TensorFlow Lite 中融合操作的具体示例包括各种 RNN 操作,如单向和双向序列 LSTM、卷积 (conv2d、偏置添加、relu)、全连接 (matmul、偏置添加、relu) 等等。

将 TensorFlow 操作融合到 TensorFlow Lite 操作中在过去一直很 具有挑战性,直到现在!

开箱即用的 RNN 转换和其他复合操作支持

开箱即用的 RNN 转换

我们现在支持 Keras LSTM Keras 双向 LSTM 的转换,这两个都是复合 TensorFlow 操作。这是让基于 RNN 的模型利用 TensorFlow Lite 中高效的 LSTM 融合操作的最简单方法。请参见 此笔记本,了解通过 TensorFlow Lite 解释器进行的 Keras LSTM 到 TensorFlow Lite 的端到端转换和执行。

此外,我们通过为转换基础设施提供一个方便的接口,使转换能够转换为任何其他 TensorFlow RNN 实现。您可以看到使用 lingvoLSTMCellSimpleLayerNormalizedLSTMCellSimple RNN 实现的几个示例。

有关更多信息,请查看我们的 RNN 转换 文档

注意:我们正在努力为 TensorFlow Lite 的 LSTM 操作添加量化支持。这将在将来公布。

将转换扩展到其他复合操作

我们扩展了 TensorFlow Lite 转换器 以允许将其他复合 TensorFlow 操作转换为现有的或自定义的 TensorFlow Lite 操作。

要实现 TensorFlow 操作融合到 TensorFlow Lite,需要执行以下步骤
  1. 将复合操作包装在 tf.function 中。在 TensorFlow 模型源代码中,识别并提取复合操作为带有 experimental_implements 函数注释的 tf.function。
  2. 编写转换代码。从概念上讲,转换代码将此接口的复合实现替换为融合实现。在准备复合函数传递中,插入您的 转换代码
  3. 调用 TensorFlow Lite 转换器。使用 TFLiteConverter.from_saved_model API 转换为 TensorFlow Lite。
有关此基础设施的总体架构,请参见 此处。有关带代码示例的详细步骤,请参见 此处。要了解操作融合在幕后的工作原理,请参见详细的 文档

反馈

请发送电子邮件至 [email protected] 或创建一个带有“TFLiteConverter”组件标签的 GitHub 问题

致谢

这项工作离不开自项目启动以来一直是主要合作者的 Renjie Liu 的努力。我们要感谢 Raziel Alvarez 的领导和指导。我们要感谢 Jaesung Chung、Scott Zhu、Sean Silva、Mark Sandler、Andrew Selle、Qiao Liang 和 River Riddle 的重要贡献。我们要感谢 Sarah Sirajuddin、Jared Duke、Lawrence Chan、Tim Davis 和 TensorFlow Lite 团队以及 Tatiana Shpeisman、Jacques Pienaar 和 Google MLIR 团队对这项工作的积极支持。
下一篇
TensorFlow operation fusion in the TensorFlow Lite converter

作者:Ashwin Murthy,Google TensorFlow 团队软件工程师
概述边缘部署的效率和性能至关重要。TensorFlow Lite 通过将一系列更细粒度的 TensorFlow 操作(本身由复合操作组成,如 LSTM)融合和优化为单个可执行的 TensorFlow Lite 单位来实现这一点。

许多用户要求我们提供更细粒度的控制方式,以便将操作融合在一起以实现更高的性能提升。