Optimisation du modèle

Les appareils Edge ont souvent une mémoire ou une puissance de calcul limitée. Diverses optimisations peuvent être appliquées aux modèles afin qu'ils puissent être exécutés dans le cadre de ces contraintes. De plus, certaines optimisations permettent l'utilisation de matériel spécialisé pour une inférence accélérée.

TensorFlow Lite et TensorFlow Model Optimization Toolkit fournissent des outils permettant de minimiser la complexité de l'optimisation de l'inférence.

Il est recommandé d'envisager l'optimisation du modèle lors du processus de développement de votre application. Ce document présente quelques bonnes pratiques pour optimiser les modèles TensorFlow en vue du déploiement sur du matériel périphérique.

Pourquoi les modèles doivent être optimisés

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

Réduction de taille

Certaines formes d'optimisation peuvent être utilisées pour réduire la taille d'un modèle. Les modèles plus petits présentent les avantages suivants :

  • Taille de stockage plus petite : 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 occupera moins d'espace de stockage sur l'appareil mobile d'un utilisateur.
  • Taille de téléchargement plus petite : les modèles plus petits nécessitent moins de temps et de bande passante pour être téléchargés sur les appareils des utilisateurs.
  • Moins d'utilisation de la mémoire : les modèles plus petits utilisent moins de RAM lorsqu'ils sont exécutés, ce qui libère de la mémoire pour d'autres parties de votre application et peut se traduire par de meilleures performances et stabilité.

La quantification peut réduire la taille d’un modèle dans tous ces cas, potentiellement au détriment d’une certaine précision. L'élagage et le clustering peuvent réduire la taille d'un modèle à télécharger en le rendant plus facilement compressible.

Réduction de la latence

La latence est le 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 entraîne une latence plus faible. La latence peut également avoir un impact sur la consommation électrique.

Actuellement, la quantification peut être utilisée pour réduire la latence en simplifiant les calculs effectués lors de l'inférence, potentiellement au détriment d'une certaine précision.

Compatibilité des 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.

Généralement, ces types d’appareils nécessitent que les modèles soient quantifiés d’une manière spécifique. Consultez la documentation de chaque accélérateur matériel pour en savoir plus sur leurs exigences.

Compromis

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

Les changements de précision dépendent du modèle individuel optimisé et sont difficiles à prévoir à l’avance. En règle générale, les modèles optimisés en termes de taille ou de latence perdront un peu en précision. En fonction de votre application, cela peut avoir ou non un impact sur l'expérience de vos utilisateurs. Dans de rares cas, certains modèles peuvent gagner en précision grâce au processus d'optimisation.

Types d'optimisation

TensorFlow Lite prend actuellement en charge l'optimisation via la quantification, l'élagage et le clustering.

Ceux-ci font partie du TensorFlow Model Optimization Toolkit , qui fournit des ressources pour les techniques d'optimisation de modèles compatibles avec TensorFlow Lite.

Quantification

La quantification fonctionne en réduisant 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. Cela se traduit par une taille de modèle plus petite et un calcul plus rapide.

Les types de quantification suivants sont disponibles dans TensorFlow Lite :

Technique Exigences en matière de données Réduction de taille Précision Matériel pris en charge
Quantification float16 post-entraînement Pas de données Jusqu'à 50% Perte de précision insignifiante Processeur, GPU
Quantification de la plage dynamique post-entraînement Pas de données Jusqu'à 75% Plus petite perte de précision Processeur, GPU (Android)
Quantification entière post-formation Échantillon représentatif non étiqueté Jusqu'à 75% Petite perte de précision Processeur, GPU (Android), EdgeTPU, Hexagon DSP
Formation prenant en compte la quantification Données d'entraînement étiquetées Jusqu'à 75% Plus petite perte de précision Processeur, GPU (Android), EdgeTPU, Hexagon DSP

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

arbre de décision de quantification

Vous trouverez ci-dessous les résultats de latence et de précision pour la quantification post-formation et la formation prenant en compte la quantification sur quelques modèles. Tous les chiffres de latence sont mesurés sur les appareils Pixel 2 à l'aide d'un seul processeur à gros cœur. À mesure que la boîte à outils s’améliore, les chiffres ici s’améliorent également :

Modèle Précision Top-1 (original) Précision de premier ordre (quantifiée après l'entraînement) Précision de premier ordre (formation axée sur la quantification) Latence (originale) (ms) Latence (post-formation quantifiée) (ms) Latence (formation prenant en compte la quantification) (ms) Taille (original) (Mo) Taille (optimisée) (Mo)
Mobilenet-v1-1-224 0,709 0,657 0,70 124 112 64 16.9 4.3
Mobilenet-v2-1-224 0,719 0,637 0,709 89 98 54 14 3.6
Création_v3 0,78 0,772 0,775 11h30 845 543 95,7 23.9
Resnet_v2_101 0,770 0,768 N / A 3973 2868 N / A 178,3 44,9
Tableau 1 Avantages de la quantification de modèle pour certains modèles CNN

Quantification entière complète avec activations int16 et poids int8

La quantification avec activations int16 est un schéma de quantification d'entiers complets avec des activations en int16 et des poids en int8. Ce mode peut améliorer la précision du modèle quantifié par rapport au schéma de quantification d'entiers complets avec à la fois des activations et des poids dans int8 en conservant une taille de modèle similaire. Il est recommandé 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. Tous les avantages de ce mode sont actuellement accessibles via du matériel spécialisé ou un logiciel personnalisé.

Vous trouverez ci-dessous les résultats de précision pour certains modèles bénéficiant de ce mode.

Modèle Type de métrique de précision Précision (activations float32) Précision (activations int8) Précision (activations int16)
Wav2lettre WER 6,7% 7,7% 7,2%
DeepSpeech 0.5.1 (déroulé) CER 6,13% 43,67% 6,52%
YoloV3 mAP(IOU=0,5) 0,577 0,563 0,574
MobileNetV1 Précision de premier ordre 0,7062 0,694 0,6936
MobileNetV2 Précision de premier ordre 0,718 0,7126 0,7137
MobileBert F1 (correspondance exacte) 88,81(81,23) 2.08(0) 88,73(81,15)
Tableau 2 Avantages de la quantification de modèle avec activations int16

Taille

L'élagage fonctionne en supprimant les paramètres d'un modèle qui n'ont qu'un impact mineur sur ses prédictions. Les modèles élagués ont la même taille sur le disque et ont la même latence d'exécution, mais peuvent être compressés plus efficacement. Cela fait de l’élagage 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.

Regroupement

Le clustering fonctionne en regroupant les poids de chaque couche d'un modèle en un nombre prédéfini de clusters, puis en partageant les valeurs du centroïde pour les poids appartenant à chaque cluster individuel. Cela réduit le nombre de valeurs de poids uniques dans un modèle, réduisant ainsi sa complexité.

En conséquence, les modèles en cluster peuvent être compressés plus efficacement, offrant ainsi des avantages de déploiement similaires à ceux de l'élagage.

Flux de travail de développement

Pour commencer, vérifiez si les modèles hébergés peuvent fonctionner pour votre application. Dans le cas contraire, nous recommandons aux utilisateurs de commencer par l' outil de quantification post-formation , car il est largement applicable et ne nécessite pas de données de formation.

Dans les cas où les objectifs de précision et de latence ne sont pas atteints, ou où la prise en charge d'un accélérateur matériel est importante, une formation prenant en compte la quantification est la meilleure option. Consultez des techniques d'optimisation supplémentaires dans la boîte à outils d'optimisation de modèle TensorFlow .

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