LiteRT 和 TensorFlow 运算符兼容性

您在模型中使用的机器学习 (ML) 运算符可能会影响 将 将 TensorFlow 模型转换为 LiteRT 格式。LiteRT 转换器 支持有限数量的 TensorFlow 操作, 也就是说,并非所有模型都可以直接转换。 借助转换器工具,您可以添加其他运算符, 以这种方式创建模型,还需要修改 LiteRT 运行时 环境,这可能会限制您 使用标准运行时部署选项,例如 Google Play 服务

LiteRT Converter 旨在分析 设计结构并应用优化,使其与 直接支持的运算符。例如,具体取决于 模型,则转换器 省略或融合它们 以便将其映射到对应的 LiteRT。

即使对于受支持的操作,有时也符合特定的使用模式, 。了解如何构建 TensorFlow 的最佳方式 模型 LiteRT 会仔细考虑运算的转换方式和 以及这一过程造成的限制。

支持的运算符

LiteRT 内置运算符 是 TensorFlow 核心库的一部分。您的 TensorFlow 模型 还可以包含复合运算符形式的自定义运算符 或者由您自己定义的新运算符下图显示了 。

TensorFlow 运算符

在这些机器学习模型运算符中,有 3 种类型 转换流程支持的模型:

  1. 仅具有 LiteRT 内置运营商的模型。(推荐
  2. 带有内置运算符和选择 TensorFlow 的模型 核心运算符。
  3. 使用内置运算符、TensorFlow 核心运算符和/或 自定义运算符。

如果您的模型仅包含 LiteRT,您无需任何其他标志即可对其进行转换。这个 是推荐使用的路径,因为此类模型 并且使用默认 LiteRT 运行时更轻松地优化和运行。 您还可以使用更多部署选项,例如 Google Play 服务。 您可以从 LiteRT 转换器指南。请参阅 LiteRT Ops 页面 内置运算符的列表。

如果您需要从核心库中加入特定 TensorFlow 操作, 您必须在转换时指定这一点,并确保您的运行时包含 操作。如需了解更多详情,请参阅选择 TensorFlow 运算符主题。 详细步骤。

请尽可能避免在 转换后的模型。自定义运算符 也就是 多个原始 TensorFlow 核心运算符,或者定义一个全新的核心运算符。 转换自定义运算符时,它们可能会增加 内置 LiteRT 库之外的依赖项。 自定义操作(如果不是专门为移动或设备部署而创建的), 可能会导致性能下降, 与服务器环境相比,资源受限的设备数量。 最后,就像添加选定的 TensorFlow 核心运算符一样,自定义运算符 要求您 修改模型运行时环境 这会限制您使用标准运行时服务 Google Play 服务

支持的类型

大多数 LiteRT 运算同时以浮点数 (float32) 和 量化(uint8int8)推理,但许多运算尚未用于其他类型的推理 例如 tf.float16 和字符串。

除了使用不同版本的操作之外 浮点和量化模型的转换方式不同。 量化转换需要张量的动态范围信息。这个 需要“伪量化”在模型训练期间获取距离信息, 通过校准数据集,或者进行“即时”操作,范围估算。请参阅 量化

直接转换、不断折叠和融合

LiteRT 可以处理许多 TensorFlow 操作, (尽管它们没有直接对等项)。这种情况就属于 会直接从图中移除 (tf.identity),并替换为张量 (tf.placeholder) 或融合为更复杂的运算 (tf.nn.bias_add)。 有时,某些受支持的操作可能也会通过上述某种方法被移除。 过程。

下面列出了通常会移除的 TensorFlow 操作(并非详尽无遗) 从图表中生成:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

实验性操作

以下 LiteRT 操作存在,但还不能进行自定义 模型:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF