Compatibilité avec les opérateurs LiteRT et TensorFlow

Les opérateurs de machine learning (ML) que vous utilisez dans votre modèle peuvent avoir un impact de conversion d'un au format LiteRT. Convertisseur LiteRT n'accepte qu'un nombre limité d'opérations TensorFlow les modèles d'inférence, ce qui signifie que tous les modèles ne sont pas directement convertibles. L'outil de conversion vous permet d'inclure des opérateurs supplémentaires, mais la conversion de cette façon, vous devez modifier l'environnement d'exécution LiteRT que vous utilisez pour exécuter votre modèle, ce qui peut limiter votre capacité d'utiliser des options de déploiement de l'environnement d'exécution standard, Services Google Play :

Le convertisseur LiteRT est conçu pour analyser des modèles structurer et appliquer des optimisations afin de le rendre compatible avec opérateurs directement pris en charge. Par exemple, en fonction des opérateurs de ML votre modèle, le convertisseur peut les fusionner ou les fusionner ; pour les mapper à leurs équivalents LiteRT.

Même pour les opérations prises en charge, des modèles d'utilisation spécifiques sont parfois attendus, pour des raisons de performances. Le meilleur moyen de comprendre comment créer une instance TensorFlow qui peut être utilisé avec LiteRT consiste à examiner attentivement la façon dont les opérations sont converties et optimisé, ainsi que les limites imposées par ce processus.

Opérateurs compatibles

Les opérateurs intégrés LiteRT sont un sous-ensemble des opérateurs qui font partie de la bibliothèque TensorFlow Core. Votre modèle TensorFlow peut incluent également des opérateurs personnalisés sous la forme d'opérateurs composites. ou de nouveaux opérateurs que vous avez définis. Le diagramme ci-dessous illustre les relations entre ces opérateurs.

Opérateurs TensorFlow

Dans cette gamme d'opérateurs de modèles de ML, il existe trois types de compatibles avec le processus de conversion:

  1. Modèles avec un opérateur LiteRT intégré uniquement. (recommandé)
  2. Modèles avec les opérateurs intégrés et sélectionner TensorFlow principaux opérateurs.
  3. Modèles avec les opérateurs intégrés, les opérateurs de base TensorFlow et/ou et personnalisés.

Si votre modèle ne contient que des opérations compatibles de manière native avec LiteRT, vous n'avez pas besoin d'indicateurs supplémentaires pour le convertir. Ce est recommandé, car ce type de modèle effectue des conversions et plus simple à optimiser et à exécuter à l'aide de l'environnement d'exécution LiteRT par défaut. Vous disposez également d'autres options de déploiement pour votre modèle, Services Google Play : Pour commencer, Guide du convertisseur LiteRT Voir la page des opérations LiteRT pour obtenir liste d'opérateurs intégrés.

Si vous devez inclure des opérations TensorFlow sélectionnées dans la bibliothèque principale, vous devez le spécifier lors de la conversion et vous assurer que votre environnement d'exécution inclut ces opérations. Consultez l'article Sélectionner des opérateurs TensorFlow pour découvrir les étapes à suivre.

Dans la mesure du possible, évitez la dernière option qui consiste à inclure des opérateurs personnalisés dans votre le modèle converti. Opérateurs personnalisés sont des opérateurs créés en combinant plusieurs opérateurs de base TensorFlow ou d'en définir un nouveau. La conversion des opérateurs personnalisés permet d'augmenter la taille du champ en générant des dépendances en dehors de la bibliothèque LiteRT intégrée. Opérations personnalisées (si elles ne sont pas spécifiquement créées pour le déploiement sur mobile ou appareil) peuvent dégrader les performances lorsqu'elles sont déployées des appareils avec des ressources limitées par rapport à un environnement de serveurs. Enfin, comme pour certains opérateurs de base TensorFlow, les opérateurs personnalisés vous demande de modifier l'environnement d'exécution du modèle ; ce qui vous empêche de profiter des services d'exécution standards tels que les services Google Play.

Types acceptés

La plupart des opérations LiteRT ciblent à la fois les valeurs à virgule flottante (float32) et l'inférence quantifiée (uint8, int8), mais de nombreuses opérations ne le font pas encore pour d'autres types comme tf.float16 et les chaînes.

Outre l'utilisation d'une version différente des opérations, l'autre différence entre les modèles à virgule flottante et quantifiés est la façon dont ils sont convertis. La conversion quantifiée nécessite des informations sur la plage dynamique pour les Tensors. Ce nécessite une "quantification factice" pendant l'entraînement du modèle, l'obtention d'informations sur les plages via un ensemble de données d'étalonnage, une estimation de la plage. Voir quantification.

Conversions simples, pliage et fusion continus

Un certain nombre d'opérations TensorFlow peuvent être traitées par LiteRT, bien qu'ils n'aient pas d'équivalent direct. C'est le cas pour les opérations être simplement supprimées du graphe (tf.identity) et remplacées par des Tensors ; (tf.placeholder) ou fusionnées en opérations plus complexes (tf.nn.bias_add). Même certaines opérations prises en charge peuvent parfois être supprimées via l'une de ces processus.

Voici une liste non exhaustive des opérations TensorFlow généralement supprimées. du graphique:

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

Opérations expérimentales

Les opérations LiteRT suivantes sont présentes, mais elles ne sont pas prêtes pour la personnalisation modèles:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF