O Dia da Comunidade de ML é dia 9 de novembro! Junte-nos para atualização de TensorFlow, JAX, e mais Saiba mais

Operadores selecionados do TensorFlow compatíveis

Operadores principais do TensorFlow

A seguir está uma lista completa de operações principais do TensorFlow compatíveis com o tempo de execução do TensorFlow Lite com o recurso Selecionar Operações do TensorFlow.

Operadores do TensorFlow Text e VotesPiece

Os seguintes texto TensorFlow e SentencePiece operadores são suportados se você usar a API do Python para a 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 SentençaPiece:

  • 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 VotesPiece ao aplicativo final ou binário.

Operadores definidos pelo usuário

Se você criou seus próprios operadores TensorFlow , você também pode converter modelos que os contem para TensorFlow Lite listando operadores necessários nas experimental_select_user_tf_ops da seguinte forma:

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 do TensorFlow Core à lista permitida.

Se você acertar o caso em que os operadores de centrais TensorFlow não estão no acima permitiu lista , você pode relatar o pedido de recurso no aqui com os nomes dos operadores do núcleo TensorFlow, não listados na lista de permitidos.

Você também pode criar sua própria solicitação de pull a partir do código-fonte. Por exemplo, se você deseja adicionar o raw_ops.StringToNumber op na lista permitida, há três lugares para atualização desta forma comprometer .

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

filegroup(
    name = "portable_extended_ops_group2",
    srcs = [
        ...

+       "string_to_number_op.cc",

        ...
    ],
)

A fim de encontrar o arquivo fonte do kernel operador relvant sob a tensorflow/core/kernels diretório, você pode procurar a localização de código-fonte, que contém a seguinte declaração kernel com o nome do operador:

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

Se houver quaisquer arquivos de cabeçalho sob a tensorflow/core/kernels diretório, exigida no código de operador fonte do kernel, você precisa adicionar o arquivo de cabeçalho no portable_extended_ops_headers regra BUILD como segue:

filegroup(
    name = "portable_extended_ops_headers",
    srcs = [
        ...

+       "string_util.h",

        ...
    ],
)

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

A lista permitida está definida na tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . O nome do operador do TensorFlow core 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 é classificada em ordem alfabética, ela garante que o nome está 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, a página deste guia também deve ser atualizada. Esta página está localizado 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 TensorFlow Lite runtime with the Select TensorFlow Ops feature.

...
+*   `raw_ops.StringToNumber`
...

Como a lista acima é classificada em ordem alfabética, ela garante que o nome está no lugar certo.