Les appareils de périphérie disposent souvent d'une mémoire ou d'une puissance de calcul limitées. Divers des optimisations peuvent être appliquées aux modèles afin qu'elles puissent être exécutées au sein de ces de contraintes. De plus, certaines optimisations permettent d'utiliser des pour accélérer l'inférence.
LiteRT et TensorFlow Model Optimization d'outils fournissent des outils pour et minimiser la complexité de l'optimisation de l'inférence.
Nous vous recommandons d'optimiser vos modèles de développement d'applications. Ce document décrit quelques bonnes pratiques d'optimisation Modèles TensorFlow pour le déploiement sur du matériel de périphérie
Pourquoi optimiser les modèles
L'optimisation des modèles peut contribuer à améliorer l'application 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. Plus petite modèles présentent les avantages suivants:
- Espace de stockage réduit:les modèles plus petits occupent moins d'espace de stockage sur votre des utilisateurs appareils. Par exemple, une application Android utilisant un modèle plus petit aura d'espace de stockage en moins sur l'appareil mobile d'un utilisateur.
- Taille de téléchargement réduite:les modèles plus petits nécessitent moins de temps et de bande passante télécharger sur les appareils des utilisateurs appareils.
- 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 améliorent les performances et la stabilité.
La quantification permet de réduire la taille d'un modèle dans tous ces cas, au détriment d'une certaine précision. L'élagage et le clustering peuvent réduire la taille pour le téléchargement en les compressant plus facilement.
Réduction de la latence
La latence correspond au temps nécessaire pour exécuter une inférence unique avec une du modèle. Certaines formes d'optimisation permettent de réduire la quantité de calculs nécessaires. pour exécuter des inférences à l'aide d'un modèle, ce qui permet de réduire la latence. La latence peut également ont un impact sur la consommation d'énergie.
Actuellement, la quantification peut être utilisée pour réduire la latence en simplifiant des calculs effectués lors de l'inférence, potentiellement au détriment de certains précision.
Compatibilité avec les accélérateurs
Certains accélérateurs matériels, tels que Edge TPU, peut exécuter des inférences très rapidement grâce à qui ont été correctement optimisés.
En général, ces types d'appareils nécessitent que les modèles soient quantifiés dans un cadre spécifique de la même façon. Consultez la documentation de chaque accélérateur matériel pour en savoir plus exigences.
Compromis
Les optimisations peuvent potentiellement modifier la justesse du modèle, ce qui doit être pendant le processus de développement de l'application.
Les variations de justesse dépendent de l'optimisation du modèle. difficiles à prévoir à l'avance. En général, les modèles optimisés et la latence perdent un peu de précision. En fonction de votre application, cela peut ou non avoir un impact sur les performances expérience. Dans de rares cas, certains modèles peuvent gagner en précision grâce au processus d'optimisation.
Types d'optimisation
LiteRT prend actuellement en charge l'optimisation via la quantification, l'élagage et le clustering.
Ces tests font partie du processus TensorFlow Model Optimization d'outils, qui fournit Ressources pour les techniques d'optimisation de modèles compatibles avec TensorFlow Mode simplifié.
Quantification
Quantification consiste à réduire la précision des nombres utilisés pour représenter la (par défaut, des nombres à virgule flottante de 32 bits). Cela se traduit par une taille de modèle plus petite et des calculs plus rapides.
Les types de quantification suivants sont disponibles dans LiteRT:
Technique | Exigences en matière de données | Réduction de la taille | Précision | Matériel compatible |
---|---|---|---|---|
Quantification float16 post-entraînement | Aucune donnée | Jusqu'à 50% | Perte de précision non significative | Processeur, GPU |
Quantification de la plage dynamique post-entraînement | Aucune donnée | Jusqu'à 75% | Plus petite perte de précision | Processeur, GPU (Android) |
Quantification par nombres entiers post-entraînement | Échantillon représentatif sans libellé | Jusqu'à 75% | Faible perte de précision | Processeur, GPU (Android), EdgeTPU |
Entraînement tenant compte de la quantification | Données d'entraînement étiquetées | Jusqu'à 75% | Plus petite perte de précision | Processeur, GPU (Android), EdgeTPU |
L'arbre de décision suivant vous aide à sélectionner les schémas de quantification que vous souhaitez utiliser pour votre modèle, simplement en vous basant sur la taille de modèle attendue précision.
Vous trouverez ci-dessous les résultats de latence et de précision pour la quantification post-entraînement et un entraînement qui tient compte de la quantification sur quelques modèles. Toutes les valeurs de latence sont mesurées Appareils Pixel 2 utilisant un processeur à cœur unique. À mesure que le kit s'améliorera, les chiffres ici:
Modèle | Exactitude du premier élément (d'origine) | Précision du premier critère (quantifiée post-entraînement) | Précision principale (entraînement axé sur la quantification) | Latence (d'origine) (ms) | Latence (quantifiée après l'entraînement) (ms) | Latence (entraînement utilisant la quantification) (ms) | Taille (d'origine) (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 |
Inception_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 complète avec activations int16 et pondérations int8
Quantification avec activations int16 est un schéma de quantification complet avec des activations dans int16 et des pondérations dans int8. Ce mode peut améliorer la justesse du modèle quantifié par rapport au schéma de quantification complet avec activations et pondérations dans int8 en conservant une taille de modèle similaire. C'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 défaut, les métriques seront lents par rapport aux noyaux int8. L'ensemble des avantages de ce mode sont actuellement accessibles via du matériel spécialisé ou des logiciels personnalisés.
Vous trouverez ci-dessous les résultats concernant la justesse de certains modèles qui bénéficient de ce mode.
Modèle | Type de métrique de justesse | Précision (activations float32) | Précision (activations int8) | Précision (activations int16) |
---|---|---|---|---|
Wav2letter | Taux d'erreur sur les mots | 6,7% | 7,7% | 7,2% |
DeepSpeech 0.5.1 (déployée) | CER | 6,13% | 43,67% | 6,52% |
YoloV3 | mAP(IOU=0,5) | 0,577 | 0,563 | 0,574 |
MobileNetV1 | Top 1 de la justesse | 0,7062 | 0,694 | 0,6936 |
MobileNetV2 | Top 1 de la justesse | 0,718 | 0,7126 | 0,7137 |
MobileBert | F1(mot clé exact) | 88,81(81,23) | 2,08(0) | 88,73(81,15) |
Élagage
L'élagage fonctionne avec en supprimant les paramètres d'un modèle qui n'ont qu'un impact mineur sur des prédictions. Les modèles éliminés ont la même taille sur le disque et ont le même environnement d'exécution mais ils peuvent être compressés plus efficacement. Cela fait de l'élagage permettant de réduire la taille de téléchargement du modèle.
À l'avenir, LiteRT permettra de réduire la latence pour les modèles élagués.
Clustering
Clustering fonctionne en regroupant les pondérations de chaque couche d'un modèle dans un nombre prédéfini de clusters, en partageant les valeurs de centroïde des pondérations appartenant à chacun cluster individuel. Cela réduit le nombre de valeurs de pondération uniques dans un modèle, ce qui réduit sa complexité.
Les modèles en cluster peuvent donc être compressés plus efficacement, des avantages du déploiement similaires à l'élagage.
Workflow de développement
Pour commencer, vérifiez si les modèles hébergés modèles de ML peuvent fonctionner pour votre application. Sinon, nous recommandent aux utilisateurs de commencer par la quantification post-entraînement outil puisqu'il est largement applicable et ne ne nécessitent pas de données d'entraînement.
Lorsque les objectifs de précision et de latence ne sont pas atteints, ou lorsque la prise en charge des accélérateurs est importante, qui tient compte de la quantification. formation est la meilleure option. Découvrez d'autres techniques d'optimisation dans la Optimisation de modèles TensorFlow kit d'outils.
Si vous souhaitez réduire davantage la taille de votre modèle, vous pouvez essayer d'élaguer et/ou un clustering avant de quantifier vos modèles.