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".
raw_ops.TokenizerFromLogits
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.