Cette page a été traduite par l'API Cloud Translation.
Switch to English

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 kit d'outils d'optimisation de modèle TensorFlow fournissent des outils pour minimiser la complexité de l'optimisation de l'inférence.

Il est recommandé d'envisager l'optimisation du modèle pendant le processus de développement de votre application. Ce document décrit 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 contribuer 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:

  • Plus petite taille de stockage: 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 à utiliser 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 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 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 l' Edge TPU , peuvent exécuter l'inférence extrêmement rapidement 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.

Les 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 perdent un peu de précision. En fonction de votre application, cela peut avoir un impact ou non 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 32 bits. Il en résulte 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 après l'entraînement Pas de données Jusqu'à 75% Perte de précision Processeur, GPU (Android)
Quantification d'entiers post-entraînement Échantillon représentatif non étiqueté Jusqu'à 75% Moins de 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

Vous trouverez ci-dessous les résultats de latence et de précision pour la quantification post-entraînement et la formation consciente de la quantification sur quelques modèles. Tous les nombres de latence sont mesurés sur les appareils Pixel 2 à l'aide d'un seul processeur à gros cœur. Au fur et à mesure que la boîte à outils s'améliorera, les chiffres augmenteront également:

Modèle Précision Top-1 (Original) Précision Top-1 (quantifiée après l'entraînement) Précision Top-1 (formation à la quantification) Latence (d'origine) (ms) Latence (quantifiée après la formation) (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
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
Tableau 1 Avantages de la quantification des modèles pour certains modèles CNN

Quantification 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 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 entier complet avec à la fois des activations et des poids en 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, donc 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 de 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 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 Top-1 0,7062 0,694 0,6936
MobileNetV2 Précision Top-1 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.

Clustering

Le clustering fonctionne en regroupant les pondérations de chaque couche d'un modèle en un nombre prédéfini de clusters, puis en partageant les valeurs de centroïde pour les pondérations 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 des avantages de déploiement similaires à l'élagage.

Workflow de développement

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

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

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