Obsługiwane operatory Select TensorFlow

Podstawowe operatory TensorFlow

Poniżej znajdziesz wyczerpującą listę podstawowych operacji TensorFlow, które są obsługiwane przez środowisko wykonawcze LiteRT z funkcją Select TensorFlow Ops.

Operatory TensorFlow Text i SentencePiece

Następujący TensorFlow tekst i Obsługiwane są operatory SentencePiece jeśli do konwersji używasz interfejsu Python API, i zaimportuj te biblioteki.

Operatory TF.Text:

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

Operatory SentencePiece:

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

Z tego fragmentu kodu dowiesz się, jak konwertować modele przy użyciu 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 też połączenie z biblioteką tekstu TensorFlow lub z biblioteki SentencePiece do ostatecznej aplikacji lub pliku binarnego.

Operatory zdefiniowane przez użytkownika

Jeśli utworzysz własny TensorFlow , możesz też skonwertować zawierające je do LiteRT, umieszczając wymagane operatory w funkcji 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()

Od strony środowiska wykonawczego wymagane jest też połączenie biblioteki operatorów z aplikacji lub pliku binarnego.

Dodaj podstawowe operatory TensorFlow do listy dozwolonych.

Jeśli w przypadku zadania, w którym podstawowych operatorów TensorFlow nie ma w powyższym przypadku, listy dozwolonych, możesz zgłosić prośbę o dodanie funkcji. tutaj z nazwami Podstawowe operatory TensorFlow nie są wymienione na liście dozwolonych.

Możesz też utworzyć własne żądanie pull z kodu źródłowego. Na przykład, jeśli chcesz dodać działanie raw_ops.StringToNumber do listy dozwolonych, nie ma 3 miejsca do aktualizacji w ten sposób commit.

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

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

        ...
    ],
)

Aby znaleźć odpowiedni plik źródłowy jądra operatora w pliku tensorflow/core/kernels umożliwia wyszukiwanie w lokalizacji kodu źródłowego, który 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ę pliki nagłówka, wymagane w kodzie źródłowym jądra operatora, musisz dodać plik nagłówka w regule BUILD portable_extended_ops_headers w ten 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 Podstawy TensorFlow Nazwa operatora musi być wymieniona, aby można ją było stosować za pośrednictwem pola Select TF .

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

        ...
    });

Ponieważ powyższa lista jest posortowana w kolejności alfabetycznej, upewnij się, że we właściwym miejscu.

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

Aby pokazać innym programistom uwzględnienie operatora, na tej stronie przewodnika które również zostaną zaktualizowane. Ta strona znajduje się w 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`
...

Ponieważ powyższa lista jest posortowana w kolejności alfabetycznej, upewnij się, że we właściwym miejscu.