PPQ est un outil de quantification de réseau neuronal évolutif, à haute performance pour les applications industrielles.
La quantification du réseau neuronal, en tant que solution d'accélération de réseau neuronale couramment utilisée, est largement utilisée depuis 2016. Par rapport à l'élagage du réseau neuronal et à la recherche d'architecture, la quantification du réseau est plus polyvalente et a une valeur pratique industrielle élevée. Surtout pour la puce finale, dans les scénarios où la zone sur puce et la consommation d'énergie sont limitées, nous voulons toujours convertir toutes les opérations à virgule flottante en opérations à virgule fixe. La valeur de la technologie quantitative réside dans le fait que l'arithmétique et la récupération de la mémoire à virgule flottante sont très coûteuses, et il s'appuie sur une bande passante complexe à virgule flottante et à la bande passante de mémoire élevée. Si nous pouvons approximer les résultats des points flottants en utilisant une opération à point fixe avec des largeurs de bit inférieures dans une plage acceptable, cela nous donnera des avantages importants dans la conception du circuit de puce, la consommation d'énergie du système, la latence du système et le débit.
Nous sommes dans la vague de l'époque, et l'intelligence artificielle basée sur les réseaux de neurones se développe rapidement, et des technologies telles que la reconnaissance d'image, la super résolution de l'image, la génération de contenu, la reconstruction du modèle changent nos vies. Ce qui l'accompagne est la structure du modèle en constante évolution, qui est devenue la première difficulté avant la quantification et le déploiement du modèle. Pour faire face à des structures complexes, nous avons conçu une structure de logique de graphe de calcul complète et une logique de planification des graphiques. Ces efforts permettent à PPQ de analyser et de modifier les structures du modèle complexes, de déterminer automatiquement les zones de quantification et de non-quantification du réseau et de permettre aux utilisateurs de contrôler manuellement la logique de planification.
La quantification et l'optimisation des performances du réseau sont de graves problèmes d'ingénierie. Nous espérons que les utilisateurs pourront participer à la quantification et au déploiement du réseau et participer à l'optimisation des performances du réseau neuronal. À cette fin, nous fournissons du matériel d'apprentissage lié au déploiement correspondant dans GitHub et soulignons délibérément la flexibilité de l'interface dans la conception de logiciels. Grâce à nos tentatives et explorations continues, nous avons résumé le type de quantification logique, responsable de l'initialisation des stratégies de quantification sur différentes plates-formes matérielles, et permis aux utilisateurs de personnaliser la largeur du bit de quantification, la granularité de quantification et les algorithmes d'étalonnage de chaque opérateur et de chaque tenseur du réseau. Nous réorganisons la logique quantitative en 27 processus d'optimisation quantitative indépendants. Les utilisateurs de PPQ peuvent combiner arbitrairement le processus d'optimisation en fonction de leurs besoins pour effectuer des tâches quantitatives très flexibles. En tant qu'utilisateur de PPQ, vous pouvez ajouter et modifier tous les processus d'optimisation en fonction de vos besoins et explorer de nouvelles limites de la technologie quantitative.
Il s'agit d'un cadre créé pour gérer les tâches de quantification complexes - le moteur d'exécution de PPQ est spécialement conçu pour la quantification. En ce qui concerne la version 0.6.6 de PPQ, le logiciel a une logique d'exécution de l'opérateur ONNX commun intégré et prend en charge nativement les opérations de simulation quantitative pendant l'exécution. PPQ peut compléter l'inférence et la quantification du modèle ONNX sans onnxruntime. Dans le cadre de la conception architecturale, nous permettons aux utilisateurs d'enregistrer de nouvelles implémentations de l'opérateur pour PPQ à l'aide de Python + Pytorch ou C ++ / CUDA, et la nouvelle logique peut également remplacer la logique d'implémentation de l'opérateur existant. PPQ permet au même opérateur d'avoir une logique d'exécution différente sur différentes plates-formes, prenant ainsi en charge la simulation opérationnelle de différentes plates-formes matérielles. Avec l'aide de moteurs d'exécution personnalisés et de la mise en œuvre haute performance du noyau PPQ CUDA, PPQ présente des avantages de performance extrêmement significatifs et peut souvent effectuer des tâches quantitatives avec une efficacité incroyable.
Le développement de PPQ est étroitement lié au cadre d'inférence, ce qui nous permet de comprendre de nombreux détails de l'inférence matérielle et donc de contrôler strictement les erreurs de simulation matérielle. Avec les efforts conjoints de nombreux travailleurs open source au pays et à l'étranger, PPQ prend actuellement en charge les travaux de collaboration avec plusieurs cadres d'inférence tels que Tensorrt, OpenPPL, OpenVino, NCNN, MNN, ONNXRUNTIME, TENNINE, SNPE, Graphcore, Metax, etc., et préfabrication de quant à la logique correspondante. PPQ est un cadre de quantification de modèle hautement évolutif. Avec la fonctionnalité de fonction dans ppq.lib, vous pouvez étendre les capacités de quantification de PPQ à d'autres bibliothèques matérielles et raisonnement possibles. Nous sommes impatients de travailler avec vous pour apporter l'intelligence artificielle à des milliers de ménages.
Installer Cuda à partir de la boîte à outils CUDA
Installer un complice
apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos userPour l'utilisateur de Windows:
(1) Télécharger ninja.exe à partir de https://github.com/ninja-build/ninja/releases, ajoutez-le à Windows Path.
(2) Installez Visual Studio 2019 à partir de https://visualstudio.microsoft.com.
(3) Ajoutez votre compilateur C ++ à Windows Path Environment, si vous utilisez Visual Studio, cela devrait être comme "C: Program Files Microsoft Visual Studio 2019 Community VC Tools MSVC 14.16.27023 bin hostx86 x86"
(4) Mettez à jour la version Pytorch à 1.10+.
git clone https://github.com/openppl-public/ppq.git
cd ppq
pip install -r requirements.txt
python setup.py installdocker pull stephen222/ppq:ubuntu18.04_cuda11.4_cudnn8.4_trt8.4.1.5
docker run -it --rm --ipc=host --gpus all --mount type=bind,source=your custom path,target=/workspace stephen222/ppq:ubuntu18.04_cuda11.4_cudnn8.4_trt8.4.1.5 /bin/bash
git clone https://github.com/openppl-public/ppq.git
cd ppq
export PYTHONPATH= ${PWD} : ${PYTHONPATH}python3 -m pip install ppq| Description | Lien lien | |
|---|---|---|
| 01 | Quantification du modèle | onnx, caffe, pytorch |
| 02 | Actuateur | exécuteur |
| 03 | Analyse des erreurs | analyseur |
| 04 | Calibrateur | Étalonnage |
| 05 | Réduction du réseau | affiner |
| 06 | Planification du réseau | expédition |
| 07 | Meilleures pratiques | Meilleure pratique |
| 08 | Plate-forme cible | plate-forme |
| 09 | Processus d'optimisation | Optimisation |
| 10 | Fusion d'images | Fusion |
| Description | Lien lien | |
|---|---|---|
| 01 | Quantimplifypass (processus de rationalisation quantitatif général) | doc |
| 02 | Quantfusionpass (processus de fusion de graphe quantitatif général) | doc |
| 03 | QuantalignmentPass (processus d'alignement de quantification général) | doc |
| 04 | RuntimeCalibrationPass (processus d'étalonnage des paramètres) | doc |
| 05 | BiascorrectionPass (processus de correction du biais) | doc |
| 06 | Quantimplifypass (processus de rationalisation quantitatif général) | doc |
| 07 | Couchewiseequalizationpass (processus d'égalisation de poids inter-couches) | doc |
| 08 | Couchespilitpass (processus de fractionnement de l'opérateur) | doc |
| 09 | ApprochetStepSizepass (processus de réglage fin du réseau) | doc |
| 10 | Autre (autre) | Se référer à |
| Introduction de DESC | Lien lien | |
|---|---|---|
| 01 | Bases de l'architecture informatique | lien |
| 02 | Analyse des performances du réseau | lien |
| 03 | Principe de calcul quantitatif | partie1, partie2 |
| 04 | Optimisation des graphiques et simulation quantitative | lien |
| 05 | Planification des graphiques et correspondance de motifs | lien |
| 06 | Déploiement du réseau neuronal | lien |
| 07 | Sélection quantitative des paramètres | lien |
| 08 | Analyse de propagation d'erreur quantitative | lien |
| Exemples | Plateforme de déploiement réseau (plate-forme) | Format du modèle d'entrée (format) | Lien (lien) | Vidéos connexes (vidéo) |
|---|---|---|---|---|
TensorRT | ||||
| Utilisez Torch2trt pour accélérer votre réseau | pytorch | pytorch | lien | lien |
| Formation quantitative Tensorrt | Tensorrt | pytorch | lien | lien |
| Quantification post-formation Tensorrt (PPQ) | Tensorrt | onnx | 1. Quant avec Tensorrt Onnxparser 2. Quant avec API Tensorrt | |
| Déploiement Tensorrt FP32 | Tensorrt | onnx | lien | lien |
| Comparaison des performances Tensorrt | Tensorrt | pytorch | lien | lien |
| Profileur de Tensorrt | Tensorrt | pytorch | lien | lien |
onnxruntime | ||||
| Utilisez onnxruntime pour accélérer votre réseau | onnxruntime | onnx | lien | lien |
| quantification post-entraînement de l'ONNX (PPQ) | onnxruntime | onnx | lien | lien |
| comparaison des performances onnxruntime | onnxruntime | pytorch | lien | lien |
openvino | ||||
| Utilisez OpenVino pour accélérer votre réseau | openvino | onnx | lien | |
| Formation quantitative OpenVino | openvino | pytorch | lien | |
| Quantification post-entraînement OpenVino (PPQ) | openvino | onnx | lien | |
| Comparaison des performances OpenVino | openvino | pytorch | lien | |
snpe | ||||
| Quantification de formation post-SNPE (PPQ) | snpe | caffe | lien | |
ncnn | ||||
| NCNN POST-TRAPING Quantification (PPQ) | ncnn | onnx | lien | |
OpenPPL | ||||
| PPL CUDA POST-TRAPRESSION UTILISATION (PPQ) | ppl Cuda | onnx | lien |
| Introduction de DESC | Lien lien | |
|---|---|---|
| 01 | Processus d'exécution quantitatif PPQ | lien |
| 02 | Analyse du réseau PPQ | lien |
| 03 | PPQ PLAGE DE GRAPS QUANTITATIF | lien |
| 04 | PPQ Target Platform et TQC | lien |
| 05 | PPQ quantificateur | lien |
| 06 | PPQ Processus d'optimisation quantitative | lien |
| 07 | Fonction quantitative PPQ | lien |
| Compte officiel de WeChat | Groupe QQ |
|---|---|
| Openppl | 627853444 |
![]() | ![]() |
Courriel: [email protected]
Nous apprécions toutes les contributions. Si vous prévoyez de contribuer des corrections de bogues, veuillez le faire sans aucune discussion.
Si vous prévoyez de contribuer de nouvelles fonctionnalités, fonctions utilitaires ou extensions au cœur, veuillez d'abord ouvrir un problème et discuter de la fonctionnalité avec nous. L'envoi d'un PR sans discussion pourrait finir par résulter d'un RP rejeté, car nous pourrions prendre le cœur dans une direction différente de celle que vous pourriez être conscient.
PPQ est testé avec des modèles de la classification MMLAB, de la détection MMLAB, de la ségadation MMLAB, de l'édition MMLAB, nous avons ici énuméré une partie du résultat du test.
| Modèle | Taper | Étalonnage | Répartiteur | Métrique | PPQ (SIM) | Pplcuda | Fp32 |
|---|---|---|---|---|---|---|---|
| RESNET-18 | Classification | 512 IMGS | Conservateur | ACC-TOP-1 | 69,50% | 69,42% | 69,88% |
| RESNEXT-101 | Classification | 512 IMGS | Conservateur | ACC-TOP-1 | 78,46% | 78,37% | 78,66% |
| SE-RESNET-50 | Classification | 512 IMGS | Conservateur | ACC-TOP-1 | 77,24% | 77,26% | 77,76% |
| Shufflenetv2 | Classification | 512 IMGS | Conservateur | ACC-TOP-1 | 69,13% | 68,85% | 69,55% |
| Mobilenetv2 | Classification | 512 IMGS | Conservateur | ACC-TOP-1 | 70,99% | 71,1% | 71,88% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| rétinanet | Détection | 32 IMGS | pplnn | bbox_map | 36,1% | 36,1% | 36,4% |
| plus rapide_rcnn | Détection | 32 IMGS | pplnn | bbox_map | 36,6% | 36,7% | 37,0% |
| FSAF | Détection | 32 IMGS | pplnn | bbox_map | 36,5% | 36,6% | 37,4% |
| mask_rcnn | Détection | 32 IMGS | pplnn | bbox_map | 37,7% | 37,6% | 37,9% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| deepabv3 | Segmentation | 32 IMGS | Conservateur | aacc / miou | 96,13% / 78,81% | 96,14% / 78,89% | 96,17% / 79,12% |
| Deepabv3Plus | Segmentation | 32 IMGS | Conservateur | aacc / miou | 96,27% / 79,39% | 96,26% / 79,29% | 96,29% / 79,60% |
| FCN | Segmentation | 32 IMGS | Conservateur | aacc / miou | 95,75% / 74,56% | 95,62% / 73,96% | 95,68% / 72,35% |
| pspnet | Segmentation | 32 IMGS | Conservateur | aacc / miou | 95,79% / 77,40% | 95,79% / 77,41% | 95,83% / 77,74% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| srcnn | Montage | 32 IMGS | Conservateur | PSNR / SSIM | 27,88% / 79,70% | 27,88% / 79,07% | 28,41% / 81,06% |
| esrgan | Montage | 32 IMGS | Conservateur | PSNR / SSIM | 27,84% / 75,20% | 27,49% / 72,90% | 27,51% / 72,84% |

Ce projet est distribué sous la licence Apache, version 2.0.