Sélectionner des opérateurs TensorFlow compatibles

Opérateurs de base de TensorFlow

Voici une liste exhaustive des opérations de base de TensorFlow compatibles avec l'environnement d'exécution LiteRT avec la fonctionnalité "Select TensorFlow Ops".

Opérateurs TensorFlow Text et SentencePiece

La requête TensorFlow Texte et Les opérateurs SentencePiece sont acceptés. si vous utilisez l'API Python pour la conversion et que vous importez ces bibliothèques.

Opérateurs TF.Text:

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

Opérateurs SentencePiece:

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

L'extrait de code suivant montre comment convertir des modèles avec les opérateurs ci-dessus:

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()

Du côté de l'environnement d'exécution, vous devez également associer SentencePiece dans l'application ou le binaire final.

Opérateurs définis par l'utilisateur

Si vous avez créé votre propre modèle TensorFlow des opérateurs, vous pouvez également convertir les modèles qui les contiennent dans LiteRT en listant les opérateurs requis dans le experimental_select_user_tf_ops comme suit:

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()

Côté environnement d'exécution, vous devez également associer votre bibliothèque d'opérateurs l'application finale ou le binaire.

Ajoutez les principaux opérateurs TensorFlow à la liste d'autorisation.

Si les opérateurs de base TensorFlow ne figurent pas dans la liste ci-dessus liste d'autorisation, vous pouvez signaler la demande de fonctionnalité sur cette page. Opérateurs de base TensorFlow, non répertoriés dans la liste des opérateurs de base.

Vous pouvez également créer votre propre demande d'extraction à partir du code source. Par exemple, si vous souhaitez ajouter l'opération raw_ops.StringToNumber à la liste des valeurs autorisées, trois endroits à mettre à jour comme ceci commit.

(1) Ajoutez le code source du noyau de l'opérateur à portable_extended_ops_group2. CRÉER.

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

        ...
    ],
)

Pour trouver le fichier source du noyau de l'opérateur approprié sous le tensorflow/core/kernels, vous pouvez rechercher l'emplacement du code source, qui contient la déclaration de noyau suivante avec le nom d'opérateur:

REGISTER_KERNEL_BUILDER(Name("StringToNumber")                 \
                            .Device(DEVICE_CPU)                \
                            .TypeConstraint<type>("out_type"), \
                        StringToNumberOp<type>)

S'il existe des fichiers d'en-tête dans le répertoire tensorflow/core/kernels, dans le code source du noyau de l'opérateur, vous devez ajouter le fichier d'en-tête dans la règle CRÉER portable_extended_ops_headers comme suit:

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

        ...
    ],
)

(2) Ajoutez le nom de l'opérateur à la liste des opérateurs autorisés.

La liste d'autorisation est définie tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc TensorFlow Core Le nom de l'opérateur doit être répertorié afin d'être autorisé via l'instruction TF SELECT .

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

        ...
    });

La liste ci-dessus étant triée dans l'ordre alphabétique, elle veille à placer au bon endroit.

(3) Ajoutez le nom de l'opérateur à cette page de guide.

Pour montrer aux autres développeurs l'inclusion de l'opérateur, cette page de guide doit également à jour. Cette page se trouve à l'adresse 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`
...

La liste ci-dessus étant triée dans l'ordre alphabétique, elle veille à placer au bon endroit.