Maintenu par TensorFlow Model Optimization
Il existe deux formes de quantification : la quantification post-formation et la formation consciente de la quantification. Commencez par la quantification post-formation car elle est plus facile à utiliser, bien que la formation sensible à la quantification soit souvent meilleure pour la précision du modèle.
Cette page fournit un aperçu de la formation à la quantification pour vous aider à déterminer comment elle correspond à votre cas d'utilisation.
- Pour vous plonger directement dans un exemple de bout en bout, consultez l' exemple d'entraînement 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 sur la quantification .
Aperçu
La formation sensible à la quantification émule la quantification du temps d'inférence, créant 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 multipliée par 4 et nous constatons généralement des améliorations de 1,5 à 4 fois la latence du processeur dans les backends testés. Finalement, des améliorations de la latence peuvent être observées sur les accélérateurs d'apprentissage automatique compatibles, tels que EdgeTPU et NNAPI.
La technique est utilisée dans la production de 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 sur 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 ne font pas l'objet d'une rétrocompatibilité.
Compatibilité API
Les utilisateurs peuvent appliquer la quantification avec les API suivantes :
- Construction de modèles :
tf.keras
avec uniquement des modèles séquentiels et fonctionnels. - Versions de 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 la façon dont les modèles sous-classés ont un support limité ou inexistant
- Formation distribuée :
tf.distribute
Matrice de soutien général
L'assistance est disponible dans les domaines suivants :
- Couverture du modèle : modèles utilisant des couches autorisées , BatchNormalization lorsqu'il suit les couches Conv2D et DepthwiseConv2D, et dans des cas limités,
Concat
. - Accélération matérielle : nos 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 convolutionnelles, 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 numéro 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 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 à la fois dans TensorFlow et TFLite.
Classification des images pour la technique
Modèle | Précision Top-1 non quantifiée | Précision quantifiée 8 bits |
---|---|---|
Nasnet-Mobile | 74% | 73% |
Resnet-v2 50 | 75,6 % | 75% |
Les modèles ont été testés sur Imagenet et évalués à la fois dans TensorFlow et TFLite.
Exemples
En plus de l' exemple d'entraînement prenant en charge la quantification , consultez les exemples suivants :
- Modèle CNN sur la tâche de classification manuscrite des chiffres du MNIST avec quantification : code
Pour en savoir plus sur quelque chose de similaire, consultez l' article Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference . Cet article présente quelques concepts utilisés par cet outil. L'implémentation n'est pas exactement la même, et il existe des concepts supplémentaires utilisés dans cet outil (par exemple la quantification par axe).