Aide à protéger la Grande barrière de corail avec tensorflow sur Kaggle Rejoignez Défi

Optimisation du modèle

Les périphériques 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 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 le modèle d' optimisation tensorflow Toolkit fournissent des outils pour minimiser la complexité de l' optimisation de l' inférence.

Il est recommandé d'envisager l'optimisation du modèle au cours de votre processus de développement d'applications. Ce document présente quelques bonnes pratiques pour optimiser les modèles TensorFlow pour le déploiement sur du matériel de périphérie.

Pourquoi les modèles doivent être optimisés

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

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 :

  • Réduire la taille de stockage: Les petits modèles occupent moins d' espace de stockage sur les appareils de vos utilisateurs. Par exemple, une application Android utilisant un modèle plus petit prendra moins d'espace de stockage sur l'appareil mobile d'un utilisateur.
  • Réduire la taille de téléchargement: les modèles plus petits nécessitent moins de temps et de bande passante à télécharger sur les appareils des utilisateurs.
  • Moins utilisation de la mémoire: Les petits modèles utilisent moins de RAM quand ils sont exécutés, qui permet de libérer de la mémoire pour d' autres parties de votre application à utiliser et peuvent se traduire par de meilleures performances et la 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 latence

Latence est la quantité de temps qu'il faut 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 qui se produisent pendant l'inférence, potentiellement au détriment d'une certaine précision.

Compatibilité accélérateur

Certains accélérateurs matériels, tels que le TPU bord , peut exécuter l' inférence extrêmement rapide avec des modèles qui ont été 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 pour la taille ou la latence perdront un peu de précision. Selon votre application, cela peut ou non avoir 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 modèle d' optimisation tensorflow Toolkit , qui fournit des ressources pour les techniques d'optimisation modèle qui sont compatibles avec tensorflow Lite.

Quantification

Quantification fonctionne en réduisant la précision des chiffres utilisés pour représenter les paramètres d'un modèle, qui par défaut sont des nombres à virgule flottante 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 CPU, GPU
Quantification de la plage dynamique après l'entraînement Pas de données Jusqu'à 75 % Plus petite perte de précision CPU, GPU (Android)
Quantification d'entiers post-apprentissage Échantillon représentatif non étiqueté Jusqu'à 75 % Petite perte de précision CPU, GPU (Android), EdgeTPU, Hexagon DSP
Formation sensible à la quantification Données d'entraînement étiquetées Jusqu'à 75 % Plus petite perte de précision CPU, GPU (Android), EdgeTPU, Hexagon DSP

L'arbre de décision suivant vous aide à sélectionner les schémas de quantification que vous pouvez 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-entraînement et l'entraînement prenant en compte la quantification sur quelques modèles. Tous les nombres de latence sont mesurés sur les appareils Pixel 2 à l'aide d'un seul gros processeur central. Au fur et à mesure que la boîte à outils s'améliore, les chiffres ici s'amélioreront également :

Modèle Précision Top 1 (Original) Précision Top-1 (post-formation quantifiée) Précision Top 1 (formation prenant en compte la quantification) Latence (Original) (ms) Latence (post-formation quantifiée) (ms) Latence (formation adaptée à 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 1130 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 quantification de modèle pour certains modèles CNN

Quantification entière avec activations int16 et poids int8

Quantification avec activations Int16 est un système de quantification entier avec plein activations dans Int16 et poids en int8. Ce mode peut améliorer la précision du modèle quantifié par rapport au schéma de quantification entier complet avec à la fois des activations et des poids dans int8 en gardant une taille de modèle similaire. Elle est recommandée lorsque les activations sont sensibles à la quantification.

NOTE: Actuellement , seules les mises en œuvre du noyau référence non optimisés sont disponibles dans TFLite pour ce schéma de quantification, donc par défaut la performance sera lente 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 qui bénéficient de ce mode.

Modèle Type de métrique de précision Précision (activations float32) Précision (activations int8) Précision (activations int16)
Wav2letter SER 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 Top 1 Précision 0,7062 0,694 0,6936
MobileNetV2 Top 1 Précision 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 du modèle avec des activations Int16

Taille

La taille des œuvres en supprimant les paramètres dans un modèle qui ont un impact mineur sur ses prévisions. 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 offrira une réduction de la latence pour les modèles élagués.

Regroupement

Clustering travaux en regroupant les poids de chaque couche dans un modèle dans un nombre prédéfini de clusters, puis en partageant les valeurs centroïdes pour les poids appartenant à chaque groupe 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 des avantages de déploiement similaires à l'élagage.

Flux de travail de développement

En tant que point de départ, vérifier si les modèles de modèles hébergés peuvent travailler pour votre application. Sinon, nous recommandons que les utilisateurs commencent par l' outil de quantification post-formation puisque c'est largement applicable et ne nécessite pas de formation de données.

Pour les cas où la précision et les objectifs de latence ne sont pas respectées, ou le soutien de l' accélérateur matériel est important, la formation de quantification consciente est la meilleure option. Voir les techniques d'optimisation supplémentaires dans le cadre du modèle d' optimisation tensorflow Toolkit .

Si vous voulez réduire davantage la taille de votre modèle, vous pouvez essayer la taille et / ou le regroupement avant quantifiant vos modèles.