Les appareils mobiles et embarqués ont des ressources de calcul limitées, il est donc important de maintenir l'efficacité des ressources de votre application. Nous avons compilé une liste des meilleures pratiques et 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
Selon 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 nécessitant 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 de précision et de latence pour certains modèles courants de classification d'images.
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 intégré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 recommandé 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 des performances et les opérateurs qui 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 système Android standard, et pour visualiser les appels d'opérateur en fonction du temps avec des outils de profilage basés sur l'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, sur la base du profilage, vous trouvez que l'opérateur consomme le plus de temps, vous pouvez envisager d'optimiser cet opérateur. Ce scénario devrait être rare car TensorFlow Lite a 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 multithreads 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 fera que votre modèle utilisera 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 notamment le cas des applications mobiles. Par exemple, des tests isolés peuvent montrer une accélération 2x par rapport à un seul thread, mais, si une autre application s'exécute en même temps, cela peut entraîner des performances inférieures à celles d'un seul thread.
Éliminer les copies redondantes
Si votre application n'est pas soigneusement conçue, il peut y avoir des copies redondantes lors de l'alimentation de l'entrée 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 vérifier attentivement la documentation pour les mises en garde en matière de performances. Par exemple, l'API Java est beaucoup plus rapide si ByteBuffers
est utilisé 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 les instruments fournissent une multitude d'informations de profilage qui peuvent être utilisées pour déboguer votre application. Parfois, le bogue de performances peut ne pas se trouver dans le modèle mais dans des parties du code d'application qui interagissent avec le modèle. Assurez-vous de vous familiariser avec les outils de profilage spécifiques à la plate-forme et les meilleures pratiques pour votre plate-forme.
É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 des parties de l'exécution de l'interpréteur. TensorFlow Lite peut utiliser des délégués en :
- Utilisation de l' API Neural Networks 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 des délégués NNAPI .
- Le délégué GPU est disponible sur Android et iOS, en utilisant respectivement OpenGL/OpenCL et Metal. Pour les essayer, consultez le didacticiel et la documentation du délégué 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 sur les 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 de comparer chaque délégué pour voir s'il s'agit d'un bon choix pour votre candidature. Par exemple, si vous avez un très petit modèle, il peut ne pas être utile de déléguer le modèle à l'API NN ou au GPU. Inversement, les accélérateurs sont un excellent choix pour les grands modèles qui ont 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 déposer un problème sur GitHub avec les détails du problème.