サポートされている Select TensorFlow 演算子

注意: この演算子の一覧は頻繁に更新されます。

TensorFlow コア演算子

次の一覧は、TensorFlow Lite ランタイムと Select TensorFlow Ops 機能でサポートされている、すべての TensorFlow コア演算子の一覧です。

TensorFlow Text および SentencePiece 演算子

次の TensorFlow Text および 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 2.5 でのみ利用できます。

独自の TensorFlow 演算子を作成した場合は、次のように、必要な演算子を experimental_select_user_tf_ops でリストにすることで、演算子を含むモデルを TensorFlow Lite に変換することもできます。

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 演算子を追加する場合は、次の commit のように 3 箇所で更新する必要があります。

(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 で定義されます。Select TF を使用して許可するには、TensorFlow コア演算子名をリスト出力する必要があります。

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 TensorFlow Lite runtime with the Select TensorFlow Ops feature.

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

上記のリストはアルファベット順にソートされているため、名前が正しい場所にあることを確認できます。