Les opérateurs de machine learning (ML) que vous utilisez dans votre modèle peuvent avoir un impact sur le processus de conversion d'un modèle TensorFlow au format TensorFlow Lite. Le convertisseur TensorFlow Lite prend en charge 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 que vous modifiiez 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'exécution standard, 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, selon les opérateurs ML de votre modèle, le convertisseur peut éliminer ou fusionner ces opérateurs afin de les mapper à leurs homologues TensorFlow Lite.
Même pour les opérations prises en charge, des modèles d'utilisation spécifiques sont parfois attendus, pour des raisons de performances. La meilleure façon de comprendre comment créer un modèle TensorFlow pouvant être utilisé avec TensorFlow Lite consiste à examiner attentivement la manière dont les opérations sont converties et optimisées, ainsi que les limitations imposées par ce processus.
Opérateurs pris en charge
Les opérateurs intégrés TensorFlow Lite sont 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 définis par vous. Le schéma ci-dessous montre les relations entre ces opérateurs.
Dans cette gamme d'opérateurs de modèle ML, il existe 3 types de modèles pris en charge par le processus de conversion :
- Modèles avec uniquement l'opérateur intégré TensorFlow Lite. ( Recommandé )
- Modèles avec les opérateurs intégrés et certains opérateurs de base TensorFlow.
- 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 prises en charge par 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 se convertit en douceur et est plus simple à optimiser et à exécuter à l'aide de l'environnement d'exécution TensorFlow Lite par défaut. Vous disposez également de davantage d'options de déploiement pour votre modèle, telles que les services Google Play . Vous pouvez commencer avec le guide du convertisseur TensorFlow Lite . Consultez la page TensorFlow Lite Ops pour obtenir une liste des opérateurs intégrés.
Si vous devez inclure des opérations TensorFlow sélectionnées à partir 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. Consultez la rubrique Sélectionner les opérateurs TensorFlow pour connaître les étapes détaillées.
Dans la mesure du possible, évitez la dernière option consistant à inclure des opérateurs personnalisés dans votre modèle converti. Les opérateurs personnalisés sont soit des opérateurs créés en combinant plusieurs opérateurs de base TensorFlow primitifs, soit en définissant un tout nouveau. Lorsque les opérateurs personnalisés sont convertis, ils peuvent augmenter la taille du modèle global en créant 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 de mobiles ou d'appareils, peuvent entraîner une dégradation des performances lorsqu'elles sont déployées sur des appareils à ressources limitées par rapport à un environnement de serveur. Enfin, tout comme l'inclusion de certains opérateurs de base TensorFlow, les opérateurs personnalisés vous obligent à modifier l'environnement d'exécution du modèle , ce qui vous empêche de tirer parti des services d'exécution standard tels que les services Google Play .
Types pris en charge
La plupart des opérations TensorFlow Lite ciblent à la fois l'inférence en virgule flottante ( float32
) et 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 les modèles quantifiés réside dans la manière dont ils sont convertis. La conversion quantifiée nécessite des informations de plage dynamique pour les tenseurs. Cela nécessite une "fausse quantification" pendant la formation du modèle, l'obtention d'informations sur la plage via un ensemble de données d'étalonnage ou une estimation de la plage "à la volée". Voir quantification pour plus de détails.
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 tenseurs ( 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 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 pas prêtes pour les modèles personnalisés :
-
CALL
-
CONCAT_EMBEDDINGS
-
CUSTOM
-
EMBEDDING_LOOKUP_SPARSE
-
HASHTABLE_LOOKUP
-
LSH_PROJECTION
-
SKIP_GRAM
-
SVDF