Merci de vous être connecté à Google I/O. Voir toutes les sessions à la demande Regarder à la demande

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 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.

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 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
Tableau 1 Avantages de la quantification du modèle pour certains modèles CNN

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)
Tableau 2 Avantages de la quantification du modèle avec les 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 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.