Operadores principales de TensorFlow
La siguiente es una lista exhaustiva de las operaciones principales de TensorFlow que se compatibles con el entorno de ejecución de LiteRT con la función Select TensorFlow Ops.
raw_ops.TokenizerFromLogits
Operadores TensorFlow Text y SentencePiece
Los siguientes TensorFlow Texto y Se admiten los operadores SentencePiece si usas la API de Python para la conversión y, luego, importas esas bibliotecas.
Operadores de TF.Text:
CaseFoldUTF8
ConstrainedSequence
MaxSpanningTree
NormalizeUTF8
NormalizeUTF8WithOffsetsMap
RegexSplitWithOffsets
RougeL
SentenceFragments
SentencepieceOp
SentencepieceTokenizeOp
SentencepieceTokenizeWithOffsetsOp
SentencepieceDetokenizeOp
SentencepieceVocabSizeOp
SplitMergeTokenizeWithOffsets
UnicodeScriptTokenizeWithOffsets
WhitespaceTokenizeWithOffsets
WordpieceTokenizeWithOffsets
Operadores de SentencePiece:
SentencepieceGetPieceSize
SentencepiecePieceToId
SentencepieceIdToPiece
SentencepieceEncodeDense
SentencepieceEncodeSparse
SentencepieceDecode
En el siguiente fragmento, se muestra cómo convertir modelos con los operadores anteriores:
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()
En cuanto al entorno de ejecución, también es necesario vincular el archivo TensorFlow Text o de SentencePiece en la app o el objeto binario finales.
Operadores definidos por el usuario
Si creaste tu propio TensorFlow
, también puedes convertir
los modelos que los contengan a LiteRT con una lista de los operadores necesarios
experimental_select_user_tf_ops
de la siguiente manera:
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()
En cuanto al entorno de ejecución, también es necesario vincular la biblioteca de operadores a la el objeto binario o la app final.
Agregar operadores principales de TensorFlow a la lista permitida
Si encuentras el caso en el que los operadores principales de TensorFlow no están en el ejemplo anterior lista permitida, puedes denunciar la solicitud de función aquí con los nombres de las Operadores principales de TensorFlow que no figuran en la lista permitida.
También puedes crear tu propia solicitud de extracción desde el código fuente. Por ejemplo,
agregar la op raw_ops.StringToNumber
a la lista de permitidos, hay
tres lugares para actualizar como este
confirmar.
(1) Agrega el código fuente del kernel del operador a portable_extended_ops_group2
.
regla de BUILD.
filegroup(
name = "portable_extended_ops_group2",
srcs = [
...
+ "string_to_number_op.cc",
...
],
)
Para encontrar el archivo de origen del kernel del operador correspondiente en el
tensorflow/core/kernels
, puedes buscar la ubicación del código fuente
que contiene la siguiente declaración de kernel con el nombre del operador:
REGISTER_KERNEL_BUILDER(Name("StringToNumber") \
.Device(DEVICE_CPU) \
.TypeConstraint<type>("out_type"), \
StringToNumberOp<type>)
Si hay archivos de encabezado en el directorio tensorflow/core/kernels
, haz lo siguiente:
obligatorio en el código fuente del kernel del operador, debes agregar el archivo de encabezado
en la regla de COMPILACIÓN portable_extended_ops_headers
de la siguiente manera:
filegroup(
name = "portable_extended_ops_headers",
srcs = [
...
+ "string_util.h",
...
],
)
(2) Agrega el nombre del operador a la lista de permitidos.
La lista permitida se define en el
tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc
El núcleo de TensorFlow
el nombre del operador debe mostrarse en la lista para que se le permita a través de la sección Select TF
de 12 a 1 con la nueva opción de compresión.
static const std::set<std::string>* allowlisted_flex_ops =
new std::set<std::string>({
...
+ "StringToNumber",
...
});
Dado que la lista anterior está ordenada alfabéticamente, asegúrate de colocar los en el lugar correcto.
(3) Agrega el nombre del operador a esta página de la guía.
Para mostrar la inclusión del operador a otros desarrolladores, esta página de guía debe
actualizarse. Esta página se encuentra en
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`
...
Dado que la lista anterior está ordenada alfabéticamente, asegúrate de colocar los en el lugar correcto.