Opérateurs TensorFlow sélectionnés pris en charge

Opérateurs principaux de TensorFlow

Voici une liste exhaustive des opérations principales de TensorFlow prises en charge par le runtime TensorFlow Lite avec la fonctionnalité Select TensorFlow Ops.

Opérateurs TensorFlow Text et SentencePièce

Les opérateurs TensorFlow Text et SentencePièce suivants sont pris en charge si vous utilisez l'API Python pour la conversion et 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 SentencePièce :

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

L'extrait 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()

Côté exécution, il est également nécessaire de lier la bibliothèque TensorFlow Text ou SentencePièce à l'application ou au binaire final.

Opérateurs définis par l'utilisateur

Si vous avez créé vos propres opérateurs TensorFlow , vous pouvez également convertir les modèles les contenant en TensorFlow Lite en répertoriant les opérateurs requis dans 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é exécution, il est également nécessaire de lier votre bibliothèque d'opérateurs à l'application ou au binaire final.

Ajoutez les opérateurs principaux TensorFlow à la liste autorisée.

Si vous rencontrez le cas où les opérateurs principaux TensorFlow ne figurent pas dans la liste autorisée ci-dessus, vous pouvez signaler la demande de fonctionnalité ici avec les noms des opérateurs principaux TensorFlow, non répertoriés dans la liste autorisée.

Vous pouvez également créer votre propre pull request à partir du code source. Par exemple, si vous souhaitez ajouter l'opération raw_ops.StringToNumber dans la liste autorisée, il existe trois emplacements à mettre à jour, comme ce commit .

(1) Ajoutez le code source du noyau de l'opérateur à la règle BUILD portable_extended_ops_group2 .

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

        ...
    ],
)

Afin de trouver le fichier source du noyau d'opérateur approprié dans le répertoire tensorflow/core/kernels , vous pouvez rechercher l'emplacement du code source, qui contient la déclaration de noyau suivante avec le nom de l'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 , requis dans le code source du noyau de l'opérateur, vous devez ajouter le fichier d'en-tête dans la règle BUILD 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 autorisée.

La liste autorisée est définie dans le tensorflow/lite/delegates/flex/allowlisted_flex_ops.cc . Le nom de l'opérateur principal TensorFlow doit être répertorié pour pouvoir être autorisé via l'option Select TF.

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

        ...
    });

Étant donné que la liste ci-dessus est triée par ordre alphabétique, elle garantit que le nom est placé au bon endroit.

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

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

Étant donné que la liste ci-dessus est triée par ordre alphabétique, elle garantit que le nom est placé au bon endroit.