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 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 kit d'outils d' optimisation de modèle TensorFlow 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 de votre processus de développement d'application. Ce document décrit quelques bonnes pratiques pour optimiser les modèles TensorFlow pour le déploiement sur du matériel en périphérie.
Pourquoi les modèles doivent être optimisés
Il existe plusieurs manières principales dont l'optimisation des modèles peut aider au développement d'applications.
Réduction de la 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 télécharger 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 regroupement 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 calculs nécessaires 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 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é des accélérateurs
Certains accélérateurs matériels, tels que Edge TPU , peuvent exécuter l'inférence 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 modifications de la précision du modèle, qui doivent être prises en compte lors du processus de développement de l'application.
Les changements de précision dépendent du modèle individuel à optimiser 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 perdent un peu en 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 à la suite du 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 kit d'outils d'optimisation de modèle TensorFlow , qui fournit des ressources pour les techniques d'optimisation de modèle 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 la taille | Précision | Matériel pris en charge |
---|---|---|---|---|
Quantification float16 post-formation | Pas de données | Jusqu'à 50% | Perte de précision insignifiante | CPU, GPU |
Quantification de 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 sensible à 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 pouvez utiliser pour votre modèle, simplement en fonction de la taille et de la précision attendues du modèle.
Vous trouverez ci-dessous les résultats de latence et de précision pour la quantification post-formation et la formation sensible à la quantification sur quelques modèles. Tous les nombres de latence sont mesurés sur les appareils Pixel 2 utilisant un seul gros processeur central. Au fur et à mesure que la boîte à outils s'améliorera, les chiffres ici s'amélioreront :
Modèle | Top-1 Précision (Original) | Précision Top-1 (post-formation quantifiée) | Précision Top-1 (formation sensible à la quantification) | Latence (Original) (ms) | Latence (post-formation quantifiée) (ms) | Latence (formation sensible à 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 |
Quantification entière entière avec activations int16 et poids int8
La quantification avec des activations int16 est un schéma de quantification entier complet avec des activations dans int16 et des poids dans 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 conservant une taille de modèle similaire. Il est recommandé lorsque les activations sont sensibles à la quantification.
REMARQUE : Actuellement, seules les implémentations de noyaux de référence non optimisées sont disponibles dans TFLite pour ce schéma de quantification, donc par défaut, les performances seront lentes par rapport aux noyaux int8. Tous les avantages de ce mode sont actuellement accessibles via un 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 mesure de précision Précision (activations float32) Précision (activations int8) Précision (activations int16) Wav2letter 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 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)
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 fournira une réduction de la latence pour les modèles élagués.
Regroupement
Le clustering fonctionne en regroupant les poids de chaque couche dans un modèle en un nombre prédéfini de clusters, puis en partageant les valeurs centroïdes 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é.
Par conséquent, 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
Pour commencer, vérifiez si les modèles des modèles hébergés peuvent fonctionner pour votre application. Si ce n'est pas le cas, 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 si la prise en charge de l'accélérateur matériel est importante, la formation prenant en compte la quantification est la meilleure option. Consultez les techniques d'optimisation supplémentaires dans le kit d'outils d'optimisation du 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.