PPQ ist ein skalierbares, leistungsstarkes Quantisierungstool für neuronale Netzwerke für industrielle Anwendungen.
Die Quantisierung des neuronalen Netzwerks als häufig verwendete Lösung für die Beschleunigung der neuronalen Netzwerke ist seit 2016 weit verbreitet. Im Vergleich zum neuronalen Netzwerk und zur Suche nach Architektur ist die Netzwerkquantisierung vielseitiger und hat einen hohen industriellen praktischen Wert. Insbesondere für den End-Seite-Chip möchten wir in Szenarien, in denen sowohl On-Chip-Flächen als auch Stromverbrauch begrenzt sind, immer alle Gleitkommaoperationen in Festpunktvorgänge umwandeln. Der Wert der quantitativen Technologie liegt in der Tatsache, dass das Abnehmen von Gleitkomma-Arithmetik und Gedächtnis sehr teuer ist und auf komplexen Gleitkomma-Arithmetik- und Hochgedächtnis-Abholbandbreiten beruht. Wenn wir die schwimmenden Punktergebnisse mit einem Festpunktbetrieb mit niedrigeren Bitbreiten innerhalb eines akzeptablen Bereichs annähern können, bieten wir erhebliche Vorteile für den Chip-Schaltungsdesign, den Systemstromverbrauch, die Systemlatenz und den Durchsatz.
Wir sind in der Flut der Zeit, und künstliche Intelligenz, die auf neuronalen Netzwerken basiert, entwickelt sich rasant, und Technologien wie Bilderkennung, Bild -Superauflösung, Inhaltsgenerierung und Modellrekonstruktion verändern unser Leben. Was damit einhergeht, ist die sich ständig verändernde Modellstruktur, die die erste Schwierigkeit vor der Modellquantifizierung und -einstellung geworden ist. Um mit komplexen Strukturen umzugehen, haben wir eine vollständige Rechengrafik -Logikstruktur und die Diagrammplanungslogik entwickelt. Diese Bemühungen ermöglichen es PPQ, komplexe Modellstrukturen zu analysieren und zu modifizieren, die Quantisierungs- und Nichtquantisierungsbereiche im Netzwerk automatisch zu bestimmen und die Benutzer die Planungslogik manuell zu steuern.
Die Quantisierung und Leistungsoptimierung des Netzwerks sind schwerwiegende technische Probleme. Wir hoffen, dass Benutzer an der Quantisierung und Bereitstellung des Netzwerks teilnehmen und an der Leistungsoptimierung des neuronalen Netzwerks teilnehmen können. Zu diesem Zweck bieten wir in GitHub entsprechende Lernmaterialien im Zusammenhang mit Bereitstellungen und betonen absichtlich die Flexibilität der Schnittstelle im Softwaredesign. Durch unsere kontinuierlichen Versuche und Erkundungen haben wir den Logik -Quantizer -Typ abstrahiert, der für die Initialisierung von Quantisierungsstrategien auf verschiedenen Hardwareplattformen verantwortlich ist, und es den Benutzern ermöglicht, die Quantisierungsbitbreite, die Quantisierungsgranularität und die Kalibrierungsalgorithmen jedes Bedieners und jeden Tensor im Netzwerk anzupassen. Wir organisieren die quantitative Logik in 27 unabhängige quantitative Optimierungsprozesse. PPQ -Benutzer können den Optimierungsprozess willkürlich entsprechend ihren Anforderungen, um hochflexible quantitative Aufgaben zu erledigen, kombinieren. Als Benutzer von PPQ können Sie alle Optimierungsprozesse entsprechend Ihren Anforderungen hinzufügen und ändern und neue Grenzen der quantitativen Technologie untersuchen.
Dies ist ein Framework, das für komplexe Quantisierungsaufgaben erstellt wurde. Die Ausführungsmaschine von PPQ ist speziell für die Quantisierung ausgelegt. Ab der PPQ-Version 0.6.6 verfügt die Software über eine integrierte 99 gemeinsame Ausführungslogik von ONNX-Operator und unterstützt nativ quantitative Simulationsvorgänge während der Ausführung. PPQ kann die Inferenz und Quantifizierung des ONNX -Modells ohne Onnxruntime vervollständigen. Im Rahmen des architektonischen Designs können Benutzer neue Bedienerimplementierungen für PPQ mithilfe von Python+ Pytorch oder C ++ / CUDA registrieren, und die neue Logik kann auch die vorhandene Logik für die Implementierung der Bediener ersetzen. PPQ ermöglicht es demselben Bediener, auf verschiedenen Plattformen unterschiedliche Ausführungslogik zu haben, wodurch die operative Simulation verschiedener Hardwareplattformen unterstützt wird. Mit Hilfe von maßgeschneiderten Ausführungsmotoren und Hochleistungs-Implementierung von PPQ CUDA-Kernel hat PPQ äußerst bedeutende Leistungsvorteile und kann häufig quantitative Aufgaben mit erstaunlicher Effizienz erledigen.
Die PPQ -Entwicklung hängt eng mit dem Inferenz -Framework zusammen, wodurch wir viele Details der Hardware -Inferenz verstehen und damit streng strenge Hardware -Simulationsfehler kontrollieren. Mit den gemeinsamen Bemühungen vieler Open -Source -Mitarbeiter im In- und Ausland unterstützt PPQ derzeit die kollaborative Arbeit mit mehreren Inferenz -Frameworks wie Tensorrt, OpenPPL, OpenVino, NCNN, MNN, Onnxruntime, Tengine, SNPE, Graphcore, Metax usw. sowie vorbereiteten korrespondierenden Quantisierern und Export -Logik. PPQ ist ein hochskalierbares Modellquantisierungsgerüst. Mit der Funktionsfunktionalität in ppq.lib können Sie die Quantisierungsfunktionen von PPQ auf andere mögliche Hardware- und Argumentationsbibliotheken erweitern. Wir freuen uns darauf, mit Ihnen zusammenzuarbeiten, um künstliche Intelligenz Tausenden von Haushalten zu bringen.
Installieren Sie CUDA vom CUDA -Toolkit
Komplizierter installieren
apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos userFür Windows User:
.
(2) Installieren Sie Visual Studio 2019 von https://visualstudio.microsoft.com.
(3) Fügen Sie Ihren C ++ - Compiler in die Windows -Path -Umgebung hinzu. Wenn Sie Visual Studio verwenden, sollte er wie "C: Programme Microsoft Visual Studio 2019 Community VC Tools Msvc 14.16.27023 bin hostX86 x86" aussehen.
(4) Aktualisieren Sie die Pytorch -Version auf 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| Beschreibung | Link Link | |
|---|---|---|
| 01 | Modellquantisierung | Onnx, Caffe, Pytorch |
| 02 | Aktuator | Testamentsvollstrecker |
| 03 | Fehleranalyse | Analysator |
| 04 | Kalibrator | Kalibrierung |
| 05 | Netzwerkfeinabstimmung | Finetune |
| 06 | Netzwerkplanung | versenden |
| 07 | Best Practices | Beste Practice |
| 08 | Zielplattform | Plattform |
| 09 | Optimierungsprozess | Optim |
| 10 | Bildfusion | Fusion |
| Beschreibung | Link Link | |
|---|---|---|
| 01 | QuantsImplifypass (allgemeiner quantitativer Straffungsprozess) | Dokument |
| 02 | Quantfusionspass (allgemeiner quantitativer Graphenfusionsprozess) | Dokument |
| 03 | QuantalignmentPass (allgemeine Quantisierungsausrichtungsprozess) | Dokument |
| 04 | RunTimecalibrationspass (Parameterkalibrierungsprozess) | Dokument |
| 05 | Vorspannungspass (Bias Korrekturprozess) | Dokument |
| 06 | QuantsImplifypass (allgemeiner quantitativer Straffungsprozess) | Dokument |
| 07 | LayerWiseequalisierungspass (Ausgleichsprozess zwischen den Schichten) | Dokument |
| 08 | LayerSpilitpass (Operator -Spaltungsprozess) | Dokument |
| 09 | LearnedStepsizepass (Netzwerk-Feinabstimmungsprozess) | Dokument |
| 10 | Andere (andere) | Beziehen sich auf |
| Desc Einführung | Link Link | |
|---|---|---|
| 01 | Grundlagen der Computerarchitektur | Link |
| 02 | Netzwerkleistunganalyse | Link |
| 03 | Quantitativer Berechnungsprinzip | Teil1, Teil2 |
| 04 | Diagrammoptimierung und quantitative Simulation | Link |
| 05 | Diagrammplanung und Musterübereinstimmung | Link |
| 06 | Bereitstellung neuronaler Netzwerk | Link |
| 07 | Quantitative Parameterauswahl | Link |
| 08 | Quantitative Fehlerausbreitungsanalyse | Link |
| Beispiele | Netzwerkbereitstellungsplattform (Plattform) | Eingabemodellformat (Format) | Link (Link) | Verwandte Videos (Video) |
|---|---|---|---|---|
TensorRT | ||||
| Verwenden Sie Torch2TRT, um Ihr Netzwerk zu beschleunigen | Pytorch | Pytorch | Link | Link |
| Tensorrt Quantitatives Training | Tensorrt | Pytorch | Link | Link |
| Tensorrt nach der Trainingsquantisierung (PPQ) | Tensorrt | Onnx | 1. Quant mit Tensorrt OnnxParserser 2. Quant mit Tensorrt API | |
| Tensorrt FP32 -Bereitstellung | Tensorrt | Onnx | Link | Link |
| Tensorrt -Leistungsvergleich | Tensorrt | Pytorch | Link | Link |
| Tensorrt Profiler | Tensorrt | Pytorch | Link | Link |
onnxruntime | ||||
| Verwenden Sie Onnxruntime, um Ihr Netzwerk zu beschleunigen | Onnxruntime | Onnx | Link | Link |
| ONNX nach der Trainingsquantisierung (PPQ) | Onnxruntime | Onnx | Link | Link |
| Onnxruntime -Leistungsvergleich | Onnxruntime | Pytorch | Link | Link |
openvino | ||||
| Verwenden Sie OpenVino, um Ihr Netzwerk zu beschleunigen | OpenVino | Onnx | Link | |
| OpenVino Quantitative Training | OpenVino | Pytorch | Link | |
| OpenVino-Quantifizierung nach Training (PPQ) | OpenVino | Onnx | Link | |
| OpenVino -Leistungsvergleich | OpenVino | Pytorch | Link | |
snpe | ||||
| Post-SNPE-Trainingsquantisierung (PPQ) | SNPE | Kaffe | Link | |
ncnn | ||||
| NCNN nach der Trainingsquantisierung (PPQ) | ncnn | Onnx | Link | |
OpenPPL | ||||
| PPL CUDA nach dem Training (PPQ) | PPL CUDA | Onnx | Link |
| Desc Einführung | Link Link | |
|---|---|---|
| 01 | PPQ quantitativer Ausführungsprozess | Link |
| 02 | PPQ -Netzwerkanalyse | Link |
| 03 | PPQ Quantitative Diagrammplanung | Link |
| 04 | PPQ -Zielplattform und TQC | Link |
| 05 | PPQ Quantizer | Link |
| 06 | PPQ quantitativer Optimierungsprozess | Link |
| 07 | PPQ Quantitative Funktion | Link |
| WeChat Official Account | QQ -Gruppe |
|---|---|
| Openppl | 627853444 |
![]() | ![]() |
E -Mail: [email protected]
Wir schätzen alle Beiträge. Wenn Sie planen, Back -Fehler -Korrekturen beizutragen, tun Sie dies bitte ohne weitere Diskussion.
Wenn Sie vorhaben, neue Funktionen, Versorgungsfunktionen oder Erweiterungen in den Kern beizutragen, eröffnen Sie bitte zunächst ein Problem und besprechen Sie die Funktion mit uns. Wenn Sie eine PR ohne Diskussion senden, kann dies zu einer abgelehnten PR führen, da wir den Kern möglicherweise in eine andere Richtung nehmen, als Sie sich vielleicht bewusst sind.
PPQ wird mit Modellen aus MMLAB-Klassifizierung, MMLAB-Detektion, MMLAB-Segamentation, MMLAB-Bearbeitung getestet. Hier haben wir einen Teil des Testergebnisses aufgelistet.
| Modell | Typ | Kalibrierung | Dispatcher | Metrisch | PPQ (SIM) | Pplcuda | FP32 |
|---|---|---|---|---|---|---|---|
| Resnet-18 | Einstufung | 512 IMGs | Konservativ | ACC-Top-1 | 69,50% | 69,42% | 69,88% |
| Resnext-101 | Einstufung | 512 IMGs | Konservativ | ACC-Top-1 | 78,46% | 78,37% | 78,66% |
| SE-RESNET-50 | Einstufung | 512 IMGs | Konservativ | ACC-Top-1 | 77,24% | 77,26% | 77,76% |
| SHUFFLENETV2 | Einstufung | 512 IMGs | Konservativ | ACC-Top-1 | 69,13% | 68,85% | 69,55% |
| Mobilenetv2 | Einstufung | 512 IMGs | Konservativ | ACC-Top-1 | 70,99% | 71,1% | 71,88% |
| ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| Retinanet | Erkennung | 32 IMGS | pplnn | bbox_map | 36,1% | 36,1% | 36,4% |
| FASTER_RCNN | Erkennung | 32 IMGS | pplnn | bbox_map | 36,6% | 36,7% | 37,0% |
| fsaf | Erkennung | 32 IMGS | pplnn | bbox_map | 36,5% | 36,6% | 37,4% |
| mask_rcnn | Erkennung | 32 IMGS | pplnn | bbox_map | 37,7% | 37,6% | 37,9% |
| ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| Deepabv3 | Segmentierung | 32 IMGS | Konservativ | AACC / Miou | 96,13% / 78,81% | 96,14% / 78,89% | 96,17% / 79,12% |
| TEEPABV3PLUS | Segmentierung | 32 IMGS | Konservativ | AACC / Miou | 96,27% / 79,39% | 96,26% / 79,29% | 96,29% / 79,60% |
| fcn | Segmentierung | 32 IMGS | Konservativ | AACC / Miou | 95,75% / 74,56% | 95,62% / 73,96% | 95,68% / 72,35% |
| PSPNET | Segmentierung | 32 IMGS | Konservativ | AACC / Miou | 95,79% / 77,40% | 95,79% / 77,41% | 95,83% / 77,74% |
| ------ | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| srcnn | Bearbeitung | 32 IMGS | Konservativ | PSNR / SSIM | 27,88% / 79,70% | 27,88% / 79,07% | 28,41% / 81,06% |
| Esrgan | Bearbeitung | 32 IMGS | Konservativ | PSNR / SSIM | 27,84% / 75,20% | 27,49% / 72,90% | 27,51% / 72,84% |

Dieses Projekt wird unter der Apache -Lizenz, Version 2.0, verteilt.