Bonnes pratiques liées aux performances

Les appareils mobiles et intégrés disposent de ressources de calcul limitées. Il est donc important de préserver l'efficacité des ressources de votre application. 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.

Choisir le modèle le mieux adapté à la tâche

En fonction de la tâche, vous devrez trouver 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. En effet, non seulement elles utilisent moins d'espace disque et de mémoire, mais elles sont également généralement plus rapides et plus économes en énergie. Par exemple, les graphiques ci-dessous montrent les compromis de justesse et de latence pour certains modèles courants de classification d'images.

Graphique comparant la taille du modèle et la justesse

Graphique de justesse en fonction de la latence

MobileNets est un exemple de modèle optimisé pour les appareils mobiles et optimisé pour les applications de vision mobile. TensorFlow Hub répertorie plusieurs autres modèles spécialement optimisés pour les appareils mobiles et intégrés.

Vous pouvez réentraîner les modèles répertoriés sur votre propre ensemble de données à l'aide de l'apprentissage par transfert.

Profiler votre modèle

Une fois que vous avez sélectionné un modèle candidat adapté à votre tâche, il est recommandé de profiler et d'analyser 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 vous aider à comprendre les goulots d'étranglement qui affectent les performances et à identifier les opérateurs les plus chronophages.

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érateurs par heure à l'aide d'outils de profilage basés sur l'IUG.

Profiler et optimiser les opérateurs dans le graphique

Si un opérateur particulier apparaît fréquemment dans le modèle et que, selon le profilage, vous constatez qu'il utilise le plus de temps, vous pouvez envisager d'optimiser cet opérateur. Ce scénario est rare, car TensorFlow Lite dispose de versions optimisées pour la plupart des opérateurs. Toutefois, vous pouvez é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.

Optimiser 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 de pouvoir les déployer sur des appareils mobiles. TensorFlow Lite accepte plusieurs techniques d'optimisation, telles que la quantification.

Pour en savoir plus, consultez la documentation sur l'optimisation des modèles.

Ajuster le nombre de threads

TensorFlow Lite est compatible avec 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. En revanche, si vous augmentez le nombre de threads, 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 de l'interprète. Cependant, l'exécution multithread entraîne une plus grande variabilité des performances en fonction des autres éléments exécutés simultanément. Cela est particulièrement le cas pour les applications mobiles. Par exemple, les tests isolés peuvent indiquer une vitesse deux fois supérieure à celle des tests monothread, mais si une autre application s'exécute en même temps, cela peut entraîner des performances inférieures à celles des tests monothread.

Éliminer les copies redondantes

Si votre application n'est pas soigneusement conçue, il peut y avoir des copies redondantes lorsque vous alimentez le modèle en entrée et lisez les résultats. Veillez à éliminer les copies redondantes. Si vous utilisez des API de niveau supérieur, telles que Java, veillez à lire attentivement la documentation concernant les mises en garde liées aux performances. Par exemple, l'API Java est beaucoup plus rapide si ByteBuffers est utilisé comme entrées.

Profiler votre application avec des outils spécifiques à la plate-forme

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 bug de performances peut ne pas être dans le modèle, mais dans les parties du code de l'application qui interagissent avec le modèle. Veillez à vous familiariser avec les outils de profilage propres à chaque plate-forme et avec les bonnes pratiques propres à celle-ci.

Évaluer 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 grâce à du matériel plus rapide, tel que des GPU, des DSP et des accélérateurs de neurones. 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 pour:

  • Le délégué de GPU est disponible sur Android et iOS, respectivement avec OpenGL/OpenCL et Metal. Pour les essayer, consultez le délégué de GPU.
  • Vous pouvez créer votre propre délégué si vous avez accès à du matériel non standard. Pour en savoir plus, consultez la section Délégués TensorFlow Lite.

Sachez que certains accélérateurs fonctionnent mieux pour différents types de modèles. Certains délégués ne sont compatibles qu'avec les modèles à virgule flottante ou optimisés d'une manière spécifique. Il est important d'effectuer une analyse comparative de chaque délégué pour voir s'il s'agit d'un bon choix pour votre application. Par exemple, si votre modèle est très petit, il n'est peut-être pas utile de déléguer le modèle au GPU. À l'inverse, les accélérateurs sont un excellent choix pour les grands modèles à forte intensité arithmétique.