Bonnes pratiques liées aux performances

Les appareils mobiles et embarqués disposent de ressources de calcul limitées. Il est donc important de maintenir l’efficacité de vos ressources applicatives. Nous avons compilé une liste de bonnes pratiques et de stratégies que vous pouvez utiliser pour améliorer les performances de votre modèle TensorFlow Lite.

Choisissez le meilleur modèle pour la tâche

En fonction de la tâche, vous devrez faire un compromis entre la complexité et la taille du modèle. Si votre tâche nécessite une grande précision, vous aurez peut-être besoin d'un modèle volumineux et complexe. Pour les tâches qui nécessitent moins de précision, il est préférable d’utiliser un modèle plus petit car non seulement ils utilisent moins d’espace disque et de mémoire, mais ils sont aussi généralement plus rapides et plus économes en énergie. Par exemple, les graphiques ci-dessous montrent les compromis en matière de précision et de latence pour certains modèles courants de classification d'images.

Graph of model size vs accuracy

Graph of accuracy vs latency

Un exemple de modèles optimisés pour les appareils mobiles sont les MobileNets , qui sont optimisés pour les applications de vision mobile. TensorFlow Hub répertorie plusieurs autres modèles optimisés spécifiquement pour les appareils mobiles et embarqués.

Vous pouvez recycler les modèles répertoriés sur votre propre ensemble de données en utilisant l'apprentissage par transfert. Consultez les didacticiels d'apprentissage par transfert à l'aide de TensorFlow Lite Model Maker .

Profilez votre modèle

Une fois que vous avez sélectionné un modèle candidat adapté à votre tâche, il est conseillé de profiler et de comparer votre modèle. L'outil d'analyse comparative TensorFlow Lite dispose d'un profileur intégré qui affiche les statistiques de profilage par opérateur. Cela peut aider à comprendre les goulots d'étranglement en matière de performances et quels opérateurs dominent le temps de calcul.

Vous pouvez également utiliser le traçage TensorFlow Lite pour profiler le modèle dans votre application Android, à l'aide du traçage standard du système Android, et pour visualiser les invocations des opérateurs par heure avec des outils de profilage basés sur une interface graphique.

Profiler et optimiser les opérateurs dans le graphique

Si un opérateur particulier apparaît fréquemment dans le modèle et que, sur la base du profilage, vous constatez que c'est l'opérateur qui consomme le plus de temps, vous pouvez envisager de l'optimiser. Ce scénario devrait être rare car TensorFlow Lite propose des versions optimisées pour la plupart des opérateurs. Cependant, vous pourrez peut-être écrire une version plus rapide d'une opération personnalisée si vous connaissez les contraintes dans lesquelles l'opérateur est exécuté. Consultez le guide des opérateurs personnalisés .

Optimisez votre modèle

L'optimisation des modèles vise à créer des modèles plus petits, généralement plus rapides et plus économes en énergie, afin qu'ils puissent être déployés sur des appareils mobiles. TensorFlow Lite prend en charge plusieurs techniques d'optimisation, telles que la quantification.

Consultez les documents d'optimisation du modèle pour plus de détails.

Ajustez le nombre de threads

TensorFlow Lite prend en charge les noyaux multithread pour de nombreux opérateurs. Vous pouvez augmenter le nombre de threads et accélérer l'exécution des opérateurs. Cependant, l'augmentation du nombre de threads obligera votre modèle à utiliser plus de ressources et de puissance.

Pour certaines applications, la latence peut être plus importante que l'efficacité énergétique. Vous pouvez augmenter le nombre de threads en définissant le nombre de threads d'interprétation . L'exécution multithread, cependant, se fait au prix d'une variabilité accrue des performances en fonction de ce qui est exécuté simultanément. C'est particulièrement le cas pour les applications mobiles. Par exemple, des tests isolés peuvent montrer une accélération 2x par rapport à une application monothread, mais si une autre application s'exécute en même temps, cela peut entraîner des performances moins bonnes qu'une application monothread.

Éliminez les copies redondantes

Si votre application n'est pas soigneusement conçue, des copies redondantes peuvent apparaître lors de l'alimentation des entrées et de la lecture de la sortie du modèle. Assurez-vous d'éliminer les copies redondantes. Si vous utilisez des API de niveau supérieur, comme Java, assurez-vous de consulter attentivement la documentation pour connaître les mises en garde en matière de performances. Par exemple, l'API Java est beaucoup plus rapide si ByteBuffers sont utilisés comme entrées .

Profilez votre application avec des outils spécifiques à la plateforme

Les outils spécifiques à la plate-forme tels que le profileur Android et Instruments fournissent une multitude d'informations de profilage qui peuvent être utilisées pour déboguer votre application. Parfois, le bug de performances peut ne pas provenir du modèle mais de parties du code d’application qui interagissent avec le modèle. Assurez-vous de vous familiariser avec les outils de profilage spécifiques à la plateforme et les meilleures pratiques pour votre plateforme.

Évaluez si votre modèle bénéficie de l'utilisation des accélérateurs matériels disponibles sur l'appareil

TensorFlow Lite a ajouté de nouvelles façons d'accélérer les modèles avec du matériel plus rapide comme les GPU, les DSP et les accélérateurs neuronaux. En règle générale, ces accélérateurs sont exposés via des sous-modules délégués qui prennent en charge une partie de l'exécution de l'interpréteur. TensorFlow Lite peut utiliser des délégués :

  • Utilisation de l'API des réseaux de neurones d'Android. Vous pouvez utiliser ces backends d’accélérateurs matériels pour améliorer la vitesse et l’efficacité de votre modèle. Pour activer l'API Neural Networks, consultez le guide du délégué NNAPI .
  • Le délégué GPU est disponible sur Android et iOS, utilisant respectivement OpenGL/OpenCL et Metal. Pour les essayer, consultez le didacticiel et la documentation des délégués GPU .
  • Le délégué Hexagon est disponible sur Android. Il exploite le DSP Qualcomm Hexagon s'il est disponible sur l'appareil. Consultez le didacticiel des délégués Hexagon pour plus d’informations.
  • Il est possible de créer votre propre délégué si vous avez accès à du matériel non standard. Consultez les délégués TensorFlow Lite pour plus d'informations.

Sachez que certains accélérateurs fonctionnent mieux pour différents types de modèles. Certains délégués ne prennent en charge que les modèles flottants ou les modèles optimisés d'une manière spécifique. Il est important d' évaluer chaque délégué pour voir s'il constitue un bon choix pour votre candidature. Par exemple, si vous disposez d'un très petit modèle, cela ne vaut peut-être pas la peine de déléguer le modèle à l'API NN ou au GPU. À l’inverse, les accélérateurs constituent un excellent choix pour les grands modèles présentant une intensité arithmétique élevée.

Besoin d'aide

L'équipe TensorFlow se fera un plaisir de vous aider à diagnostiquer et à résoudre les problèmes de performances spécifiques auxquels vous pourriez être confronté. Veuillez signaler un problème sur GitHub avec les détails du problème.