Operadores seleccionados de TensorFlow admitidos

Operadores principales de TensorFlow

La siguiente es una lista exhaustiva de las operaciones principales de TensorFlow que son compatibles con el tiempo de ejecución de TensorFlow Lite con la función Seleccionar operaciones de TensorFlow.

Operadores de texto y frase de TensorFlow

Los siguientes operadores de texto y frase de TensorFlow son compatibles si usa la API de Python para la conversión e importación de esas bibliotecas.

Operadores TF.Text:

  • CaseFoldUTF8
  • ConstrainedSequence
  • MaxSpanningTree
  • NormalizeUTF8
  • NormalizeUTF8WithOffsetsMap
  • RegexSplitWithOffsets
  • RougeL
  • SentenceFragments
  • SentencepieceOp
  • SentencepieceTokenizeOp
  • SentencepieceTokenizeWithOffsetsOp
  • SentencepieceDetokenizeOp
  • SentencepieceVocabSizeOp
  • SplitMergeTokenizeWithOffsets
  • UnicodeScriptTokenizeWithOffsets
  • WhitespaceTokenizeWithOffsets
  • WordpieceTokenizeWithOffsets

Operadores de pieza de oración:

  • SentencepieceGetPieceSize
  • SentencepiecePieceToId
  • SentencepieceIdToPiece
  • SentencepieceEncodeDense
  • SentencepieceEncodeSparse
  • SentencepieceDecode

El siguiente fragmento 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 el lado del tiempo de ejecución, también es necesario vincular la biblioteca TensorFlow Text o SentencePiece a la aplicación o binario final.

Operadores definidos por el usuario

Si creó sus propios operadores de TensorFlow , también puede convertir los modelos que los contienen a TensorFlow Lite enumerando los operadores requeridos en 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 el lado del tiempo de ejecución, también es necesario vincular la biblioteca de operadores a la aplicación o binario final.

Agregue los operadores principales de TensorFlow a la lista permitida.

Si se encuentra con el caso en el que los operadores principales de TensorFlow no están en la lista permitida anterior, puede informar la solicitud de función aquí con los nombres de los operadores principales de TensorFlow, que no figuran en la lista permitida.

También puede crear su propia solicitud de extracción a partir del código fuente. Por ejemplo, si desea agregar la operación raw_ops.StringToNumber en la lista permitida, hay tres lugares para actualizar como este commit .

(1) Agregue el código fuente del kernel del operador a la regla BUILD portable_extended_ops_group2 .

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

        ...
    ],
)

Para encontrar el archivo fuente del kernel del operador relevante en el directorio tensorflow/core/kernels , puede buscar la ubicación del código fuente, que contiene la siguiente declaración del 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 , requerido en el código fuente del kernel del operador, debe agregar el archivo de encabezado a la regla BUILD portable_extended_ops_headers de la siguiente manera:

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

        ...
    ],
)

(2) Agregue el nombre del operador a la lista permitida.

La lista de permitidos se define en tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . Es necesario incluir el nombre del operador principal de TensorFlow para poder acceder a través de la opción Seleccionar TF.

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

        ...
    });

Dado que la lista anterior está ordenada alfabéticamente, garantiza que el nombre se coloque en el lugar correcto.

(3) Agregue el nombre del operador a esta página de guía.

Para mostrar la inclusión del operador a los demás desarrolladores, esta página de guía también 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 TensorFlow Lite runtime with the Select TensorFlow Ops feature.

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

Dado que la lista anterior está ordenada alfabéticamente, garantiza que el nombre se coloque en el lugar correcto.