Compatibilité des opérateurs TensorFlow Lite et TensorFlow

Les opérateurs de machine learning (ML) que vous utilisez dans votre modèle peuvent avoir une incidence sur le processus de conversion d'un modèle TensorFlow au format TensorFlow Lite. Le convertisseur TensorFlow Lite n'accepte qu'un nombre limité d'opérations TensorFlow utilisées dans les modèles d'inférence courants, 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 d'un modèle de cette manière nécessite également de modifier l'environnement d'exécution TensorFlow Lite que vous utilisez pour exécuter votre modèle, ce qui peut limiter votre capacité à utiliser les options de déploiement d'environnement d'exécution standards, telles que les services Google Play.

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

Même pour les opérations compatibles, des modèles d'utilisation spécifiques sont parfois attendus, pour des raisons de performances. Le meilleur moyen de comprendre comment créer un modèle TensorFlow pouvant être utilisé avec TensorFlow Lite est d'examiner attentivement la manière dont les opérations sont converties et optimisées, ainsi que les limites imposées par ce processus.

Opérateurs compatibles

Les opérateurs intégrés à TensorFlow Lite constituent un sous-ensemble des opérateurs qui font partie de la bibliothèque principale de TensorFlow. Votre modèle TensorFlow peut également inclure des opérateurs personnalisés sous la forme d'opérateurs composites ou de nouveaux opérateurs que vous définissez. 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, trois types de modèles sont acceptés par le processus de conversion:

  1. Modèles avec uniquement l'opérateur intégré TensorFlow Lite. (recommandé)
  2. Modèles avec les opérateurs intégrés et sélection des opérateurs principaux TensorFlow.
  3. Modèles avec les opérateurs intégrés, les opérateurs de base TensorFlow et/ou les opérateurs personnalisés.

Si votre modèle ne contient que des opérations nativement compatibles avec TensorFlow Lite, vous n'avez pas besoin d'indicateurs supplémentaires pour le convertir. Il s'agit du chemin recommandé, car ce type de modèle effectue des conversions de manière fluide, et est plus simple à optimiser et à exécuter à l'aide de l'environnement d'exécution TensorFlow Lite par défaut. Vous disposez également d'autres options de déploiement pour votre modèle, telles que les services Google Play. Vous pouvez commencer par consulter le guide du convertisseur TensorFlow Lite. Consultez la page des opérations TensorFlow Lite pour obtenir la liste des opérateurs intégrés.

Si vous devez inclure certaines opérations TensorFlow de 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. Pour en savoir plus, consultez la page Sélectionner des opérateurs TensorFlow.

Dans la mesure du possible, évitez la dernière option consistant à inclure des opérateurs personnalisés dans le modèle converti. Les opérateurs personnalisés sont des opérateurs créés en combinant plusieurs opérateurs principaux TensorFlow primitifs ou en en définissant un nouveau. Lorsque des opérateurs personnalisés sont convertis, ils peuvent augmenter la taille du modèle global en encourant des dépendances en dehors de la bibliothèque TensorFlow Lite intégrée. Les opérations personnalisées, si elles ne sont pas spécifiquement créées pour le déploiement sur des appareils mobiles ou des appareils, peuvent entraîner de moins bonnes performances lorsqu'elles sont déployées sur des appareils disposant de ressources limitées par rapport à un environnement de serveur. Enfin, tout comme pour inclure certains opérateurs principaux TensorFlow, les opérateurs personnalisés nécessitent 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 TensorFlow Lite ciblent à la fois l'inférence à virgule flottante (float32) et l'inférence quantifiée (uint8, int8), mais de nombreuses opérations ne le font pas encore pour les autres types tels que tf.float16 et les chaînes.

Hormis l'utilisation d'une version différente des opérations, l'autre différence entre les modèles à virgule flottante et les modèles quantifiés réside dans la façon dont ils sont convertis. La conversion quantifiée nécessite des informations sur la plage dynamique pour les Tensors. Cela nécessite une "quantification factice" lors de l'entraînement du modèle, l'obtention d'informations sur l'échelle via un ensemble de données de calibration ou une estimation de la plage "à la volée". Pour en savoir plus, consultez la section quantification.

Conversions simples, pliage et fusion constants

Un certain nombre d'opérations TensorFlow peuvent être traitées par TensorFlow Lite, même si elles n'ont pas d'équivalent direct. C'est le cas des opérations qui peuvent être simplement supprimées du graphe (tf.identity), 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'un de ces processus.

Voici une liste non exhaustive des opérations TensorFlow qui sont généralement supprimées du graphe:

  • 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 TensorFlow Lite suivantes sont présentes, mais ne sont pas prêtes pour les modèles personnalisés:

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