Operadores seleccionados de TensorFlow compatibles

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.

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.