Bonnes pratiques liées aux performances

Les appareils mobiles et intégrés ont des ressources de calcul limitées, il est donc important pour préserver l'efficacité des ressources de votre application. Nous avons dressé une liste de bonnes pratiques et de stratégies pour améliorer votre TensorFlow Performances du modèle Lite.

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

Selon la tâche, vous devrez trouver un compromis entre la complexité du modèle et la taille de l'image. Si votre tâche nécessite une grande précision, vous aurez peut-être besoin d'un grand et complexe. Pour les tâches nécessitant moins de précision, il est préférable d'utiliser plus petit, car ils occupent non seulement moins d'espace disque et de mémoire, généralement plus rapide et plus économe en énergie. Par exemple, les graphiques ci-dessous présentent des compromis de justesse et de latence pour certains modèles courants de classification d'images.

Graphique de la taille du modèle par rapport à
précision

Graphique de précision et de latence

Voici un exemple de modèles optimisés pour les appareils mobiles : MobileNets, optimisés pour les mobiles des applications de vision. Kaggle "Models" répertorie plusieurs autres optimisés spécifiquement 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 la fonction de transfert de machine learning.

Profiler votre modèle

Une fois que vous avez sélectionné un modèle candidat adapté à votre tâche, pour profiler et comparer votre modèle. Analyse comparative LiteRT outil dispose d'un profileur intégré qui affiche des statistiques de profilage par opérateur. Cela peut Il est plus facile de comprendre les goulots d'étranglement qui affectent les performances et de savoir quels opérateurs dominent le le temps de calcul.

Vous pouvez également utiliser LiteRT traçage au profilage le modèle dans votre application Android, à l'aide du traçage système Android standard, et visualiser les appels d'opérateurs par heure grâce au profilage basé sur l'IUG outils.

Profiler et optimiser les opérateurs dans le graphique

Si un opérateur particulier apparaît fréquemment dans le modèle et, en fonction de et le profilage, vous constatez que l'opérateur est celui qui consomme le plus de temps. à optimiser cet opérateur. Ce scénario est rare, car TensorFlow Lite dispose de 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 est exécuté. Consultez le guide des opérateurs personnalisés.

Optimiser votre modèle

L'optimisation des modèles a pour but de créer des modèles plus petits, généralement plus rapides, plus économes en énergie, pour pouvoir être déployés sur des appareils mobiles. LiteRT prend en charge 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

LiteRT 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. En hausse le nombre de threads obligera toutefois votre modèle à utiliser plus de ressources .

Pour certaines applications, la latence peut être plus importante que l'efficacité énergétique. Toi peut augmenter le nombre de threads en définissant le nombre d'interprètes fils de discussion. Cependant, l'exécution multithread a pour effet d'améliorer les performances en fonction des autres éléments qui sont exécutés simultanément. C'est en particulier pour les applications mobiles. Par exemple, les tests isolés peuvent indiquer 2x par rapport à un thread monothread, mais si une autre appli s'exécute en même temps, les performances peuvent être moins élevées qu'avec un thread unique.

Éliminer les copies redondantes

Si votre application n'est pas soigneusement conçue, il peut y avoir des copies redondantes lors de l'alimentation en entrée et de la lecture de la sortie du modèle. Veillez à et éliminer les copies redondantes. Si vous utilisez des API de niveau supérieur, comme Java, consultez attentivement la documentation pour connaître 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

Des outils propres à une plate-forme comme Android profileur et Les instruments constituent une mine d'informations d'informations de profilage pouvant être utilisées pour déboguer votre application. Parfois, le les bugs de performances ne sont peut-être pas dans le modèle, mais dans des parties du code d'application interagissent avec le modèle. Familiarisez-vous avec la plate-forme des outils de profilage spécifiques et des bonnes pratiques pour votre plate-forme.

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

LiteRT propose de nouvelles façons d'accélérer les modèles grâce à un matériel plus rapide. comme les GPU, les DSP et les accélérateurs de neurones. En général, ces accélérateurs exposés via des sous-modules délégués qui prennent le relais de l'exécution par l'interprète. LiteRT peut utiliser des délégués pour:

  • Le délégué de GPU est disponible sur Android et iOS, avec OpenGL/OpenCL et Metal, respectivement. Pour les essayer, consultez le délégué de GPU.
  • Vous pouvez créer votre propre délégué si vous avez accès à matériel non standard. Voir LiteRT délégués pour plus d'informations.

Sachez que certains accélérateurs fonctionnent mieux pour différents types de modèles. Un peu les 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'effectuer une analyse comparative de chaque délégué afin de voir s'il s'agit d'une bonne pour votre application. Par exemple, si votre modèle est très petit, de déléguer le modèle au GPU. À l'inverse, les accélérateurs Il est idéal pour les grands modèles à forte intensité arithmétique.