Maintenu par l'optimisation du modèle TensorFlow
Il existe deux formes de quantification : la quantification post-formation et la formation prenant en compte la quantification. Commencez par la quantification post-formation , car elle est plus facile à utiliser, même si une formation prenant en compte la quantification est souvent meilleure pour la précision du modèle.
Cette page fournit un aperçu de la formation prenant en compte la quantification pour vous aider à déterminer comment elle s'adapte à votre cas d'utilisation.
- Pour plonger directement dans un exemple de bout en bout, consultez l' exemple de formation prenant en compte la quantification .
- Pour trouver rapidement les API dont vous avez besoin pour votre cas d'utilisation, consultez le guide complet de formation prenant en compte la quantification .
Aperçu
La formation prenant en compte la quantification émule la quantification du temps d'inférence, créant ainsi un modèle que les outils en aval utiliseront pour produire des modèles réellement quantifiés. Les modèles quantifiés utilisent une précision inférieure (par exemple 8 bits au lieu de 32 bits flottants), ce qui présente des avantages lors du déploiement.
Déployer avec quantification
La quantification apporte des améliorations via la compression du modèle et la réduction de la latence. Avec les valeurs par défaut de l'API, la taille du modèle est réduite de 4 fois et nous constatons généralement entre 1,5 et 4 fois des améliorations de la latence du processeur dans les backends testés. Finalement, des améliorations de la latence peuvent être constatées sur les accélérateurs d'apprentissage automatique compatibles, tels que EdgeTPU et NNAPI.
La technique est utilisée en production dans les cas d’utilisation de la parole, de la vision, du texte et de la traduction. Le code prend actuellement en charge un sous-ensemble de ces modèles .
Expérimentez avec la quantification et le matériel associé
Les utilisateurs peuvent configurer les paramètres de quantification (par exemple le nombre de bits) et, dans une certaine mesure, les algorithmes sous-jacents. Notez qu'avec ces modifications par rapport aux valeurs par défaut de l'API, il n'existe actuellement aucun chemin pris en charge pour le déploiement vers un backend. Par exemple, la conversion TFLite et les implémentations du noyau ne prennent en charge que la quantification 8 bits.
Les API spécifiques à cette configuration sont expérimentales et non soumises à une compatibilité ascendante.
Compatibilité API
Les utilisateurs peuvent appliquer la quantification avec les API suivantes :
- Construction de modèles :
keras
avec uniquement des modèles séquentiels et fonctionnels. - Versions TensorFlow : TF 2.x pour tf-nightly.
-
tf.compat.v1
avec un package TF 2.X n'est pas pris en charge.
-
- Mode d'exécution TensorFlow : exécution rapide
Il est sur notre feuille de route d'ajouter un support dans les domaines suivants :
- Création de modèles : clarifiez comment les modèles sous-classés ont une prise en charge limitée, voire inexistante.
- Formation distribuée :
tf.distribute
Matrice de support général
L’assistance est disponible dans les domaines suivants :
- Couverture du modèle : modèles utilisant des couches sur liste verte , BatchNormalization lorsqu'il suit les couches Conv2D et DepthwiseConv2D, et dans des cas limités,
Concat
. - Accélération matérielle : nos paramètres API par défaut sont compatibles avec l'accélération sur les backends EdgeTPU, NNAPI et TFLite, entre autres. Voir la mise en garde dans la feuille de route.
- Déployer avec quantification : seule la quantification par axe pour les couches convolutives, et non la quantification par tenseur, est actuellement prise en charge.
Il est sur notre feuille de route d'ajouter un support dans les domaines suivants :
- Couverture du modèle : étendue pour inclure les RNN/LSTM et la prise en charge générale de Concat.
- Accélération matérielle : assurez-vous que le convertisseur TFLite peut produire des modèles entiers. Voir ce problème pour plus de détails.
- Expérimentez avec des cas d'utilisation de quantification :
- Expérimentez avec des algorithmes de quantification qui couvrent les couches Keras ou nécessitent l'étape de formation.
- Stabilisez les API.
Résultats
Classification d'images avec des outils
Modèle | Précision Top-1 non quantifiée | Précision quantifiée sur 8 bits |
---|---|---|
MobilenetV1 224 | 71,03% | 71,06% |
Resnet v1 50 | 76,3% | 76,1% |
MobilenetV2 224 | 70,77% | 70,01% |
Les modèles ont été testés sur Imagenet et évalués dans TensorFlow et TFLite.
Classification des images pour la technique
Modèle | Précision Top-1 non quantifiée | Précision quantifiée sur 8 bits |
---|---|---|
Nasnet-Mobile | 74% | 73% |
Resnet-v2 50 | 75,6% | 75% |
Les modèles ont été testés sur Imagenet et évalués dans TensorFlow et TFLite.
Exemples
En plus de l' exemple de formation prenant en compte la quantification , consultez les exemples suivants :
- Modèle CNN sur la tâche de classification de chiffres manuscrits MNIST avec quantification : code
Pour obtenir des informations sur quelque chose de similaire, consultez l' article Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference . Cet article présente certains concepts utilisés par cet outil. La mise en œuvre n'est pas exactement la même et des concepts supplémentaires sont utilisés dans cet outil (par exemple, quantification par axe).