支持的选择 TensorFlow 运算符

TensorFlow 核心运算符

以下是 TensorFlow 核心操作的详尽列表, 具有“选择 TensorFlow 操作”功能的 LiteRT 运行时。

TensorFlow Text 和 SentencePiece 运算符

以下 TensorFlow 文字和 支持 SentencePiece 运算符 如果您使用 Python API 进行转换并导入这些库,

TF.Text 运算符:

  • CaseFoldUTF8
  • ConstrainedSequence
  • MaxSpanningTree
  • NormalizeUTF8
  • NormalizeUTF8WithOffsetsMap
  • RegexSplitWithOffsets
  • RougeL
  • SentenceFragments
  • SentencepieceOp
  • SentencepieceTokenizeOp
  • SentencepieceTokenizeWithOffsetsOp
  • SentencepieceDetokenizeOp
  • SentencepieceVocabSizeOp
  • SplitMergeTokenizeWithOffsets
  • UnicodeScriptTokenizeWithOffsets
  • WhitespaceTokenizeWithOffsets
  • WordpieceTokenizeWithOffsets

SentencePiece 运算符:

  • SentencepieceGetPieceSize
  • SentencepiecePieceToId
  • SentencepieceIdToPiece
  • SentencepieceEncodeDense
  • SentencepieceEncodeSparse
  • SentencepieceDecode

以下代码段展示了如何使用上述运算符转换模型:

import tensorflow as tf
# These imports are required to load operators' definition.
import tensorflow_text as tf_text
import sentencepiece as spm

converter = tf.lite.TFLiteConverter.from_keras_model(your_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
model_data = converter.convert()

在运行时,还需要将 TensorFlow Text 或 SentencePiece 库导入最终应用或二进制文件。

用户定义的运算符

如果您创建了自己的 TensorFlow, 运算符,还可以将 并列出包含这些特征的必要运算符, experimental_select_user_tf_ops 如下所示:

import tensorflow as tf

ops_module = tf.load_op_library('./your_ops_library.so')

converter = tf.lite.TFLiteConverter.from_saved_model(your_model)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS
]
converter.target_spec.experimental_select_user_tf_ops = [
    'your_op_name1',
    'your_op_name2'
]
model_data = converter.convert()

在运行时,还需要将运算符库链接到 最终的应用或二进制文件。

将 TensorFlow 核心运算符添加到许可名单中。

如果您遇到上面没有 TensorFlow 核心运算符的情况 许可列表后,您可以向用户提出功能请求, 此处,并附上 TensorFlow 核心运算符,未在允许列表中列出。

您还可以通过源代码创建自己的拉取请求。例如,如果 您想在许可名单中添加 raw_ops.StringToNumber 操作, 有 3 个地方更新,就像这样 commit

(1) 将运营商内核源代码添加到 portable_extended_ops_group2 BUILD 规则中。

filegroup(
    name = "portable_extended_ops_group2",
    srcs = [
        ...
+   "string_to_number_op.cc",

        ...
    ],
)

为了在 tensorflow/core/kernels 目录中,您可以搜索源代码位置, 它包含以下带运算符名称的内核声明:

REGISTER_KERNEL_BUILDER(Name("StringToNumber")                 \
                            .Device(DEVICE_CPU)                \
                            .TypeConstraint<type>("out_type"), \
                        StringToNumberOp<type>)

如果 tensorflow/core/kernels 目录下有任何头文件, 是运营商内核源代码中必需的代码,则需要将头文件 复制到 portable_extended_ops_headers BUILD 规则中,如下所示:

filegroup(
    name = "portable_extended_ops_headers",
    srcs = [
        ...
+   "string_util.h",

        ...
    ],
)

(2) 将运营商名称添加到许可名单中。

许可名单在 tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc。TensorFlow 核心 需要列出运营商名称,才能通过“Select TF”(选择 TF) 选项。

static const std::set<std::string>* allowlisted_flex_ops =
    new std::set<std::string>({
        ...
+   "StringToNumber",

        ...
    });

由于以上列表是按字母顺序排序的,因此务必将 放在正确的位置上

(3) 将运营商名称添加到此指南页面。

为了向其他开发者展示该运算符包含的运营商,本指南页面应 也会随之更新此页面位于 tensorflow/lite/g3doc/guide/op_select_allowlist.md

## TensorFlow core operators

The following is an exhaustive list of TensorFlow core operations that are
supported by LiteRT runtime with the Select TensorFlow Ops feature.

...
+*   `raw_ops.StringToNumber`
...

由于以上列表是按字母顺序排序的,因此务必将 放在正确的位置上