Optimisation du modèle

Les appareils de périphérie disposent souvent d'une puissance de mémoire ou de calcul limitée. Différentes optimisations peuvent être appliquées aux modèles afin qu'ils puissent être exécutés dans le respect de ces contraintes. En outre, certaines optimisations permettent l'utilisation de matériel spécialisé pour l'inférence accélérée.

TensorFlow Lite et le kit d'optimisation de modèles TensorFlow fournissent des outils permettant de réduire la complexité de l'optimisation de l'inférence.

Nous vous recommandons d'envisager l'optimisation du modèle lorsque vous développez votre application. Ce document présente quelques bonnes pratiques pour optimiser les modèles TensorFlow en vue de leur déploiement sur du matériel de périphérie.

Pourquoi optimiser les modèles

L'optimisation de modèles peut contribuer au développement d'applications de plusieurs manières.

Réduction de la taille

Certaines formes d'optimisation permettent de réduire la taille d'un modèle. Les modèles plus petits présentent les avantages suivants:

  • Taille de stockage réduite:les modèles plus petits occupent moins d'espace de stockage sur les appareils de vos utilisateurs. Par exemple, une application Android utilisant un modèle plus petit occupe moins d'espace de stockage sur l'appareil mobile d'un utilisateur.
  • Taille de téléchargement réduite:le téléchargement de modèles plus petits sur les appareils des utilisateurs nécessite moins de temps et de bande passante.
  • Moins d'utilisation de la mémoire:les modèles plus petits utilisent moins de RAM lors de leur exécution, ce qui libère de la mémoire pour d'autres parties de votre application. Cela peut se traduire par de meilleures performances et une meilleure stabilité.

La quantification peut réduire la taille d'un modèle dans tous ces cas, au détriment d'une certaine justesse. L'élagage et le clustering peuvent réduire la taille d'un modèle pour le téléchargement en le rendant plus facile à compresser.

Réduction de la latence

La latence correspond au temps nécessaire pour exécuter une seule inférence avec un modèle donné. Certaines formes d'optimisation peuvent réduire la quantité de calcul requise pour exécuter l'inférence à l'aide d'un modèle, ce qui réduit la latence. La latence peut également avoir un impact sur la consommation d'énergie.

Actuellement, la quantification permet de réduire la latence en simplifiant les calculs effectués lors de l'inférence, au détriment d'une certaine justesse.

Compatibilité avec les accélérateurs

Certains accélérateurs matériels, tels que Edge TPU, peuvent exécuter des inférences extrêmement rapidement avec des modèles correctement optimisés.

En règle générale, ces types d'appareils nécessitent une quantification spécifique des modèles. Consultez la documentation de chaque accélérateur matériel pour en savoir plus sur la configuration requise.

Compromis

Les optimisations peuvent entraîner des changements dans la précision du modèle, ce qui doit être pris en compte lors du processus de développement de l'application.

Les changements de justesse dépendent du modèle individuel optimisé et sont difficiles à prédire à l'avance. En général, les modèles optimisés pour la taille ou la latence perdent un faible degré de précision. En fonction de votre application, cela peut avoir une incidence sur l'expérience utilisateur. Dans de rares cas, le processus d'optimisation permet d'améliorer la justesse de certains modèles.

Types d'optimisation

TensorFlow Lite est actuellement compatible avec l'optimisation via la quantification, l'élagage et le clustering.

Elles font partie du kit d'optimisation de modèles TensorFlow, qui fournit des ressources pour les techniques d'optimisation de modèles compatibles avec TensorFlow Lite.

Quantification

La quantification réduit la précision des nombres utilisés pour représenter les paramètres d'un modèle, qui sont par défaut des nombres à virgule flottante de 32 bits. Le modèle est ainsi réduit et les calculs sont plus rapides.

Les types de quantification suivants sont disponibles dans TensorFlow Lite:

Technique Exigences en matière de données Réduction de la taille Justesse Matériel compatible
Quantification float16 post-entraînement Aucune donnée Jusqu'à 50% Perte de justesse insignifiante Processeur, GPU
Quantification de la plage dynamique post-entraînement Aucune donnée Jusqu'à 75% Perte de justesse minimale Processeur, GPU (Android)
Quantification d'entiers post-entraînement Échantillon représentatif sans étiquette Jusqu'à 75% Faible perte de précision Processeur, GPU (Android), Edge TPU
Entraînement compatible avec la quantification Données d'entraînement étiquetées Jusqu'à 75% Perte de justesse minimale Processeur, GPU (Android), Edge TPU

L'arbre de décision suivant vous aide à sélectionner les schémas de quantification que vous pourriez vouloir utiliser pour votre modèle, simplement en fonction de la taille et de la précision attendues du modèle.

arbre-décision-quantification

Vous trouverez ci-dessous les résultats en termes de latence et de justesse pour la quantification post-entraînement et l'entraînement basé sur la quantification sur quelques modèles. Tous les chiffres de latence sont mesurés sur les appareils Pixel 2 à l'aide d'un seul grand processeur à cœur. Au fur et à mesure que le kit s'améliorera, les chiffres ici augmenteront:

Modèle Justesse top-1 (original) Précision top-1 (quantifiée après l'entraînement) Précision top-1 (entraînement avec quantification) Latence (original) (ms) Latence (quantifiée après l'entraînement) (ms) Latence (entraînement avec quantification) (ms) Taille (d'origine) (Mo) Taille (optimisée) (Mo)
Mobilenet-v1-1-2240,7090,6570.70 1241126416,94.3
Mobilenet-v2-1-2240,7190,6370,709 899854143.6
Inception_v30.780,7720,775 113084554395,723,9
Resnet_v2_1010,7700,768N/A 39732868N/A178,344,9
Tableau 1 Avantages de la quantification des modèles pour certains modèles de réseau de neurones convolutif

Quantification par nombres entiers complets avec activations int16 et pondérations int8

La quantification avec activations de type int16 est un schéma de quantification complet d'entiers avec des activations dans int16 et des pondérations en int16. Ce mode peut améliorer la justesse du modèle quantifié par rapport au schéma de quantification entier entier avec des activations et des pondérations dans int8, en conservant une taille de modèle similaire. Elle est recommandée lorsque les activations sont sensibles à la quantification.

REMARQUE:Actuellement, seules les implémentations de noyau de référence non optimisées sont disponibles dans TFLite pour ce schéma de quantification. Par conséquent, par défaut, les performances seront lentes par rapport aux noyaux int8. Vous pouvez actuellement accéder à tous les avantages de ce mode via du matériel spécialisé ou un logiciel personnalisé.

Vous trouverez ci-dessous les résultats de justesse pour certains modèles qui bénéficient de ce mode.

Modèle Type de métrique de précision Précision (activations float32) Exactitude (activations int8) Exactitude (activations d'int16)
Wav2letterTaux d'erreur sur les mots6,7%7,7% 7,2%
DeepSpeech 0.5.1 (déployée)CER6,13%43,67% 6,52%
YoloV3mAP(IOU=0,5)0,5770,563 0,574
MobileNetV1Précision top-10,70620,694 0,6936
MobileNetV2Précision top-10,7180,7126 0,7137
MobileBertF1(mot clé exact)88,81(81,23)2,08(0) 88,73(81,15)
Tableau 2 Avantages de la quantification de modèle avec activations int16

Élagage

L'élagage consiste à supprimer les paramètres d'un modèle qui n'ont qu'un impact mineur sur ses prédictions. Les modèles réduits ont la même taille sur le disque et ont la même latence d'exécution, mais peuvent être compressés plus efficacement. L'élagage est donc une technique utile pour réduire la taille de téléchargement du modèle.

À l'avenir, TensorFlow Lite permettra de réduire la latence pour les modèles élagués.

Clustering

Le clustering consiste à regrouper les pondérations de chaque couche d'un modèle dans un nombre prédéfini de clusters, puis à partager les valeurs de centroïde des pondérations appartenant à chaque cluster individuel. Cela réduit le nombre de valeurs de pondération uniques dans un modèle, ce qui réduit sa complexité.

Ainsi, les modèles en cluster peuvent être compressés plus efficacement, ce qui offre des avantages semblables à ceux de l'élagage.

Workflow de développement

Pour commencer, vérifiez si les modèles des modèles hébergés sont compatibles avec votre application. Si ce n'est pas le cas, nous vous recommandons de commencer par l'outil de quantification post-entraînement, car il est largement applicable et ne nécessite pas de données d'entraînement.

Dans les cas où les objectifs de précision et de latence ne sont pas atteints, ou lorsque la compatibilité avec l'accélérateur matériel est importante, l'entraînement basé sur la quantification est la meilleure option. Découvrez d'autres techniques d'optimisation dans le kit d'optimisation de modèles TensorFlow.

Si vous souhaitez réduire davantage la taille de votre modèle, vous pouvez essayer l'élagage et/ou le clustering avant de quantifier vos modèles.