Operadores selecionados do TensorFlow compatíveis

Operadores principais do TensorFlow

Confira a seguir uma lista completa das principais operações do TensorFlow compatível com o ambiente de execução LiteRT e o recurso "Selecionar operações do TensorFlow".

Operadores Text e SentencePiece do TensorFlow

Os comandos TensorFlow texto e Operadores SentencePiece são compatíveis se você usa a API Python para conversão e importar essas bibliotecas.

Operadores TF.Text:

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

Operadores SentencePiece:

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

O snippet a seguir mostra como converter modelos com os operadores acima:

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

No lado do ambiente de execução, também é necessário vincular o TensorFlow Text ou SentencePiece ao app ou binário final.

Operadores definidos pelo usuário

Se você criou seu próprio ambiente do TensorFlow operadores, também é possível converter modelos que os contêm para LiteRT listando os operadores necessários na experimental_select_user_tf_ops da seguinte maneira:

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

No lado do ambiente de execução, também é necessário vincular sua biblioteca de operadores ao binário ou app final.

Adicione os principais operadores do TensorFlow à lista de permissões.

Nos casos em que os operadores principais do TensorFlow não estão nas opções acima, list permitida, você pode denunciar a solicitação de recurso aqui pelos nomes das Operadores principais do TensorFlow, não listados na lista de permissões.

Você também pode criar sua própria solicitação de envio a partir do código-fonte. Por exemplo, se adicionar a operação raw_ops.StringToNumber à lista de permissões, haverá três lugares para atualizar dessa forma commit.

(1) Adicionar o código-fonte do kernel do operador ao portable_extended_ops_group2 BUILD.

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

        ...
    ],
)

Para encontrar o arquivo de origem do kernel do operador relevante na seção tensorflow/core/kernels, será possível pesquisar o local do código-fonte, que contém a seguinte declaração de kernel com o nome do operador:

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

Se houver arquivos principais no diretório tensorflow/core/kernels, necessário no código-fonte do kernel do operador, você precisa adicionar o arquivo de cabeçalho para a regra BUILD portable_extended_ops_headers da seguinte maneira:

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

        ...
    ],
)

(2) Adicionar o nome do operador à lista de permissões

A lista de permissões é definida no tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc: O núcleo do TensorFlow O nome do operador precisa ser listado para ser permitido pelo "Select TF". é a melhor opção.

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

        ...
    });

Como a lista acima está em ordem alfabética, ela não deixe de colocar os no lugar certo.

(3) Adicione o nome do operador a esta página do guia.

Para mostrar a inclusão do operador aos outros desenvolvedores, esta página do guia deve serão atualizadas. Ela está localizada na 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`
...

Como a lista acima está em ordem alfabética, ela não deixe de colocar os no lugar certo.