サポートされている 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 を 演算子を使用すると、 必要な演算子をリスト化して、LiteRT にそれらのモデルを含む 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 コア演算子。

ソースコードから独自の pull リクエストを作成することもできます。たとえば 許可リストに 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 で許可されるようにするには、演算子名をリストする必要があります。 選択します。

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

        ...
    });

上記のリストはアルファベット順であるため、 見てみましょう。

(3)このガイドページに事業者名を追加します。

インクルードしているオペレーターを他のデベロッパーに示すには、このガイドのページを 更新されます。このページの URL: 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`
...

上記のリストはアルファベット順であるため、 見てみましょう。