Obsługiwane operatory Wybierz TensorFlow

Operatory rdzeniowe TensorFlow

Poniżej znajduje się wyczerpująca lista podstawowych operacji TensorFlow obsługiwanych przez środowisko wykonawcze TensorFlow Lite z funkcją Wybierz TensorFlow Ops.

Operatory TensorFlow Text i SentencePiece

Następujące operatory TensorFlow Text i SentencePiece są obsługiwane, jeśli używasz interfejsu API języka Python do konwersji i importowania tych bibliotek.

Operatory TF.Text:

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

Operatory fragmentu zdania:

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

Poniższy fragment pokazuje, jak konwertować modele za pomocą powyższych operatorów:

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()

Po stronie środowiska wykonawczego wymagane jest również połączenie biblioteki TensorFlow Text lub SentencePiece z ostateczną aplikacją lub plikiem binarnym.

Operatory zdefiniowane przez użytkownika

Jeśli utworzyłeś własne operatory TensorFlow , możesz także przekonwertować zawierające je modele na TensorFlow Lite, wymieniając wymagane operatory w pliku experimental_select_user_tf_ops w następujący sposób:

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()

Po stronie środowiska wykonawczego wymagane jest również połączenie biblioteki operatorów z ostateczną aplikacją lub plikiem binarnym.

Dodaj podstawowe operatory TensorFlow do listy dozwolonych.

Jeśli trafisz na przypadek, w którym operatorzy rdzenia TensorFlow nie znajdują się na powyższej liście dozwolonych, możesz zgłosić tutaj prośbę o dodanie funkcji, podając nazwy operatorów rdzenia TensorFlow, których nie ma na liście dozwolonych.

Możesz także utworzyć własne żądanie ściągnięcia z kodu źródłowego. Na przykład, jeśli chcesz dodać operację raw_ops.StringToNumber do listy dozwolonych, istnieją trzy miejsca do aktualizacji, takie jak to zatwierdzenie .

(1) Dodaj kod źródłowy jądra operatora do reguły BUILD portable_extended_ops_group2 .

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

        ...
    ],
)

Aby znaleźć odpowiedni plik źródłowy jądra operatora w katalogu tensorflow/core/kernels , możesz przeszukać lokalizację kodu źródłowego, która zawiera następującą deklarację jądra z nazwą operatora:

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

Jeśli w katalogu tensorflow/core/kernels znajdują się jakieś pliki nagłówkowe, wymagane w kodzie źródłowym jądra operatora, musisz dodać plik nagłówkowy do reguły BUILD portable_extended_ops_headers w następujący sposób:

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

        ...
    ],
)

(2) Dodaj nazwę operatora do listy dozwolonych.

Lista dozwolonych jest zdefiniowana w tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . Aby można było zezwolić na użycie opcji Wybierz TF, musi zostać wymieniona nazwa operatora podstawowego TensorFlow.

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

        ...
    });

Ponieważ powyższa lista jest posortowana alfabetycznie, dba o to, aby nazwa została umieszczona we właściwym miejscu.

(3) Dodaj nazwę operatora do tej strony przewodnika.

Aby pokazać włączenie operatora innym programistom, należy zaktualizować także tę stronę przewodnika. Ta strona znajduje się pod adresem 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`
...

Ponieważ powyższa lista jest posortowana alfabetycznie, dba o to, aby nazwa została umieszczona we właściwym miejscu.