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 TensorFlow Text y SentencePiece

Los siguientes operadores de TensorFlow Text y SentencePiece son compatibles si usa la API de Python para la conversión e importa esas bibliotecas.

Operadores 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

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 final o binario.

Operadores definidos por el usuario

Si creó sus propios operadores de TensorFlow , también puede convertir modelos que los contengan 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 se requiere vincular su biblioteca de operadores a la aplicación o binario final.

Agregue operadores principales de TensorFlow a la lista de permitidos.

Si llega al caso en 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 algún archivo 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 permitida se define en tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . El nombre del operador principal de TensorFlow debe aparecer en la lista 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, asegúrese de colocar el nombre 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, asegúrese de colocar el nombre en el lugar correcto.