Operadores selecionados do TensorFlow compatíveis

Operadores principais do TensorFlow

Veja a seguir uma lista completa das principais operações do TensorFlow que são compatíveis com o tempo de execução do TensorFlow Lite com o recurso Select TensorFlow Ops.

Operadores de texto e SentencePiece do TensorFlow

Os seguintes operadores TensorFlow Text e SentencePiece são compatíveis se você usar a API Python para conversão e importar essas bibliotecas.

Operadores TF.Texto:

  • 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 tempo de execução, também é necessário vincular a biblioteca TensorFlow Text ou SentencePiece ao aplicativo ou binário final.

Operadores definidos pelo usuário

Se você criou seus próprios operadores do TensorFlow , também poderá converter os modelos que os contêm para o TensorFlow Lite listando os operadores necessários em 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 tempo de execução, também é necessário vincular sua biblioteca de operadores ao aplicativo ou binário final.

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

Se você encontrar o caso em que os operadores principais do TensorFlow não estão na lista de permissões acima , você pode relatar a solicitação de recurso aqui com os nomes dos operadores principais do TensorFlow, não listados na lista de permissões.

Você também pode criar seu próprio pull request a partir do código-fonte. Por exemplo, se você quiser adicionar o op raw_ops.StringToNumber na lista de permitidos, há três lugares para atualizar como este commit .

(1) Adicione o código-fonte do kernel do operador à regra BUILD portable_extended_ops_group2 .

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

        ...
    ],
)

Para encontrar o arquivo de origem do kernel do operador relevante no tensorflow/core/kernels , você pode pesquisar o local do código-fonte, que contém a seguinte declaração do kernel com o nome do operador:

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

Se houver algum arquivo de cabeçalho no diretório tensorflow/core/kernels , necessário no código-fonte do kernel do operador, você precisará adicionar o arquivo de cabeçalho na regra BUILD portable_extended_ops_headers da seguinte forma:

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

        ...
    ],
)

(2) Adicione o nome do operador à lista permitida.

A lista permitida é definida no tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . O nome do operador principal do TensorFlow precisa ser listado para ser permitido por meio da opção Selecionar TF.

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

        ...
    });

Como a lista acima está classificada em ordem alfabética, certifique-se de colocar o nome 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 de guia também deve ser atualizada. Esta página está localizada em 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`
...

Como a lista acima está classificada em ordem alfabética, certifique-se de colocar o nome no lugar certo.