PPQ adalah alat kuantisasi jaringan saraf yang dapat diskalakan, berkinerja tinggi, untuk aplikasi industri.
Kuantisasi jaringan saraf, sebagai solusi akselerasi jaringan saraf yang umum digunakan, telah banyak digunakan sejak 2016. Dibandingkan dengan pemangkasan jaringan saraf dan pencarian arsitektur, kuantisasi jaringan lebih fleksibel dan memiliki nilai praktis industri yang tinggi. Khusus untuk chip sisi akhir, dalam skenario di mana area on-chip dan konsumsi daya terbatas, kami selalu ingin mengubah semua operasi titik mengambang menjadi operasi titik tetap. Nilai teknologi kuantitatif terletak pada kenyataan bahwa aritmatika titik mengambang dan pengambilan memori sangat mahal, dan bergantung pada bandwidth pengambilan poin-floating-point yang kompleks. Jika kita dapat memperkirakan hasil titik mengambang menggunakan operasi titik tetap dengan lebar bit yang lebih rendah dalam kisaran yang dapat diterima, ini akan memberi kita keunggulan yang signifikan dalam desain sirkuit chip, konsumsi daya sistem, latensi sistem dan throughput.
Kita berada dalam gelombang zaman, dan kecerdasan buatan berdasarkan jaringan saraf berkembang dengan cepat, dan teknologi seperti pengenalan gambar, resolusi super gambar, pembuatan konten, rekonstruksi model mengubah hidup kita. Apa yang menyertainya adalah struktur model yang selalu berubah, yang telah menjadi kesulitan pertama sebelum kuantifikasi model dan penyebaran. Untuk menangani struktur yang kompleks, kami merancang struktur logika grafik komputasi lengkap dan logika penjadwalan grafik. Upaya-upaya ini memungkinkan PPQ untuk menguraikan dan memodifikasi struktur model yang kompleks, secara otomatis menentukan area kuantisasi dan non-kuantisasi dalam jaringan, dan memungkinkan pengguna untuk mengontrol logika penjadwalan secara manual.
Kuantisasi dan optimalisasi kinerja jaringan adalah masalah teknik yang serius. Kami berharap bahwa pengguna dapat berpartisipasi dalam kuantisasi dan penyebaran jaringan dan berpartisipasi dalam optimalisasi kinerja jaringan saraf. Untuk tujuan ini, kami menyediakan materi pembelajaran terkait penyebaran yang sesuai di GitHub, dan dengan sengaja menekankan fleksibilitas antarmuka dalam desain perangkat lunak. Melalui upaya dan eksplorasi kami yang berkelanjutan, kami mengabstraksi jenis logika kuantizer, yang bertanggung jawab untuk menginisialisasi strategi kuantisasi pada platform perangkat keras yang berbeda, dan memungkinkan pengguna untuk menyesuaikan lebar bit kuantisasi, granularitas kuantisasi dan algoritma kalibrasi dari masing -masing operator dan setiap tensor dalam jaringan. Kami mengatur ulang logika kuantitatif menjadi 27 proses optimasi kuantitatif independen. Pengguna PPQ dapat secara sewenang -wenang menggabungkan proses optimasi sesuai dengan kebutuhan mereka untuk menyelesaikan tugas kuantitatif yang sangat fleksibel. Sebagai pengguna PPQ, Anda dapat menambah dan memodifikasi semua proses optimasi sesuai dengan kebutuhan Anda dan mengeksplorasi batas -batas baru teknologi kuantitatif.
Ini adalah kerangka kerja yang dibuat untuk menangani tugas kuantisasi yang kompleks - mesin eksekusi PPQ dirancang khusus untuk kuantisasi. Pada PPQ versi 0.6.6, perangkat lunak ini memiliki logika eksekusi operator ONNX bawaan dan secara asli mendukung operasi simulasi kuantitatif selama eksekusi. PPQ dapat menyelesaikan inferensi dan kuantifikasi model ONNX tanpa onnxruntime. Sebagai bagian dari desain arsitektur, kami memungkinkan pengguna untuk mendaftarkan implementasi operator baru untuk PPQ menggunakan Python+ Pytorch atau C ++ / CUDA, dan logika baru juga dapat menggantikan logika implementasi operator yang ada. PPQ memungkinkan operator yang sama memiliki logika eksekusi yang berbeda pada platform yang berbeda, sehingga mendukung simulasi operasional platform perangkat keras yang berbeda. Dengan bantuan mesin eksekusi yang disesuaikan dan implementasi berkinerja tinggi dari kernel CUDA PPQ, PPQ memiliki keunggulan kinerja yang sangat signifikan dan seringkali dapat menyelesaikan tugas kuantitatif dengan efisiensi yang luar biasa.
Pengembangan PPQ terkait erat dengan kerangka kerja inferensi, yang memungkinkan kita untuk memahami banyak detail inferensi perangkat keras dan dengan demikian secara ketat mengontrol kesalahan simulasi perangkat keras. Dengan upaya bersama dari banyak pekerja open source di rumah dan di luar negeri, PPQ saat ini mendukung pekerjaan kolaboratif dengan beberapa kerangka kerja inferensi seperti TensorRT, OpenPPL, Openvino, NCNN, MNN, Onnxruntime, Tengine, SNPE, Graphcore, Metax, dll., Dan kuantisasi yang sesuai dengan kuantisasi yang sesuai. PPQ adalah kerangka kuantisasi model yang sangat terukur. Dengan fungsi fungsionalitas dalam ppq.lib, Anda dapat memperluas kemampuan kuantisasi PPQ ke perangkat keras lain yang mungkin dan perpustakaan penalaran. Kami berharap dapat bekerja sama dengan Anda untuk membawa kecerdasan buatan ke ribuan rumah tangga.
Instal Cuda dari Cuda Toolkit
Instal Complier
apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos userUntuk pengguna Windows:
(1) Unduh ninja.exe dari https://github.com/ninja-build/ninja/releases, tambahkan ke jalur windows.
(2) Instal Visual Studio 2019 dari https://visualstudio.microsoft.com.
(3) Tambahkan kompiler C ++ Anda ke lingkungan jalur Windows, jika Anda menggunakan Visual Studio, itu harus seperti "C: Program Files Microsoft Visual Studio 2019 Community VC Tools MSVC 14.16.27023 Bin hostx86 x86" "" "" "" "" "" "" "" "
(4) Perbarui Versi Pytorch ke 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| Keterangan | Tautan tautan | |
|---|---|---|
| 01 | Kuantisasi model | Onnx, Caffe, Pytorch |
| 02 | Aktuator | pelaksana |
| 03 | Analisis Kesalahan | penganalisa |
| 04 | Kalibrator | Kalibrasi |
| 05 | Fine-tuning jaringan | finetune |
| 06 | Penjadwalan Jaringan | menugaskan |
| 07 | Praktik terbaik | Praktik terbaik |
| 08 | Platform target | platform |
| 09 | Proses optimasi | Optimal |
| 10 | Fusi gambar | Fusi |
| Keterangan | Tautan tautan | |
|---|---|---|
| 01 | QuantSimplifyPass (proses perampingan kuantitatif umum) | dokter |
| 02 | QuantFusionPass (proses fusi grafik kuantitatif umum) | dokter |
| 03 | QuantalignmentPass (proses penyelarasan kuantisasi umum) | dokter |
| 04 | RuntimecalibrationPass (proses kalibrasi parameter) | dokter |
| 05 | Biascorrectionpass (proses koreksi bias) | dokter |
| 06 | QuantSimplifyPass (proses perampingan kuantitatif umum) | dokter |
| 07 | LayerWiseeQualizationPass (proses pemerataan berat antar-lapis) | dokter |
| 08 | LayerspilitPass (proses pemisahan operator) | dokter |
| 09 | DefearingStepSizePass (proses penyempurnaan jaringan) | dokter |
| 10 | Lainnya (Lainnya) | Merujuk ke |
| PENDAHULUAN DESC | Tautan tautan | |
|---|---|---|
| 01 | Dasar -dasar arsitektur komputer | link |
| 02 | Analisis Kinerja Jaringan | link |
| 03 | Prinsip Perhitungan Kuantitatif | Part1, Part2 |
| 04 | Optimasi grafik dan simulasi kuantitatif | link |
| 05 | Penjadwalan grafik dan pencocokan pola | link |
| 06 | Penyebaran Jaringan Saraf | link |
| 07 | Pemilihan parameter kuantitatif | link |
| 08 | Analisis Propagasi Kesalahan Kuantitatif | link |
| Contoh | Platform Penyebaran Jaringan (Platform) | Format Model Input (Format) | Tautan (tautan) | Video terkait (video) |
|---|---|---|---|---|
TensorRT | ||||
| Gunakan Torch2trt untuk mempercepat jaringan Anda | Pytorch | Pytorch | link | link |
| Pelatihan kuantitatif Tensorrt | Tensorrt | Pytorch | link | link |
| Tensorrt pasca-pelatihan kuantisasi (PPQ) | Tensorrt | onnx | 1. Quant dengan tensorrt onnxparser 2. Quant with Tensorrt API | |
| Penyebaran Tensorrt FP32 | Tensorrt | onnx | link | link |
| Perbandingan kinerja Tensorrt | Tensorrt | Pytorch | link | link |
| Tensorrt Profiler | Tensorrt | Pytorch | link | link |
onnxruntime | ||||
| Gunakan onnxruntime untuk mempercepat jaringan Anda | onnxruntime | onnx | link | link |
| ONNX Post-Training Quantization (PPQ) | onnxruntime | onnx | link | link |
| Perbandingan kinerja onnxruntime | onnxruntime | Pytorch | link | link |
openvino | ||||
| Gunakan OpenVino untuk mempercepat jaringan Anda | Openvino | onnx | link | |
| Pelatihan Kuantitatif Openvino | Openvino | Pytorch | link | |
| Openvino pasca-pelatihan kuantifikasi (PPQ) | Openvino | onnx | link | |
| Perbandingan Kinerja Openvino | Openvino | Pytorch | link | |
snpe | ||||
| Kuantisasi Pelatihan Pasca-SNPE (PPQ) | snpe | Caffe | link | |
ncnn | ||||
| NCNN pasca-pelatihan kuantisasi (PPQ) | ncnn | onnx | link | |
OpenPPL | ||||
| PPL CUDA Kuantisasi pasca-pelatihan (PPQ) | ppl cuda | onnx | link |
| PENDAHULUAN DESC | Tautan tautan | |
|---|---|---|
| 01 | Proses eksekusi kuantitatif PPQ | link |
| 02 | Analisis Jaringan PPQ | link |
| 03 | Penjadwalan Grafik Kuantitatif PPQ | link |
| 04 | Platform target PPQ dan TQC | link |
| 05 | PPQ Quantizer | link |
| 06 | Proses Optimasi Kuantitatif PPQ | link |
| 07 | Fungsi kuantitatif PPQ | link |
| Akun Resmi WeChat | Grup QQ |
|---|---|
| Openppl | 627853444 |
![]() | ![]() |
Email: [email protected]
Kami menghargai semua kontribusi. Jika Anda berencana untuk berkontribusi kembali perbaikan bug, silakan lakukan tanpa diskusi lebih lanjut.
Jika Anda berencana untuk menyumbangkan fitur baru, fungsi utilitas, atau ekstensi ke inti, silakan buka masalah pertama dan diskusikan fitur dengan kami. Mengirim PR tanpa diskusi mungkin berakhir menghasilkan PR yang ditolak karena kami mungkin mengambil inti ke arah yang berbeda dari yang mungkin Anda ketahui.
PPQ diuji dengan model dari MMLAB-Classification, MMLAB-deteksi, MMLAB-Segamentation, MMLab-Editing, di sini kami mendaftarkan bagian dari hasil pengujian keluar.
| Model | Jenis | Kalibrasi | Operator | Metrik | PPQ (SIM) | Pplcuda | FP32 |
|---|---|---|---|---|---|---|---|
| Resnet-18 | Klasifikasi | 512 IMGS | Konservatif | ACC-TOP-1 | 69,50% | 69,42% | 69,88% |
| Resnext-101 | Klasifikasi | 512 IMGS | Konservatif | ACC-TOP-1 | 78,46% | 78,37% | 78,66% |
| SE-RESNET-50 | Klasifikasi | 512 IMGS | Konservatif | ACC-TOP-1 | 77,24% | 77,26% | 77,76% |
| Shufflenetv2 | Klasifikasi | 512 IMGS | Konservatif | ACC-TOP-1 | 69,13% | 68,85% | 69,55% |
| MobileNetv2 | Klasifikasi | 512 IMGS | Konservatif | ACC-TOP-1 | 70,99% | 71,1% | 71,88% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| retinanet | Deteksi | 32 imgs | pplnn | bbox_map | 36,1% | 36,1% | 36,4% |
| FASTER_RCNN | Deteksi | 32 imgs | pplnn | bbox_map | 36,6% | 36,7% | 37,0% |
| FSAF | Deteksi | 32 imgs | pplnn | bbox_map | 36,5% | 36,6% | 37,4% |
| mask_rcnn | Deteksi | 32 imgs | pplnn | bbox_map | 37,7% | 37,6% | 37,9% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| Deepabv3 | Segmentasi | 32 imgs | Konservatif | AACC / MIOU | 96,13% / 78,81% | 96,14% / 78,89% | 96,17% / 79,12% |
| Deepabv3Plus | Segmentasi | 32 imgs | Konservatif | AACC / MIOU | 96,27% / 79,39% | 96,26% / 79,29% | 96,29% / 79,60% |
| fcn | Segmentasi | 32 imgs | Konservatif | AACC / MIOU | 95,75% / 74,56% | 95,62% / 73,96% | 95,68% / 72,35% |
| pspnet | Segmentasi | 32 imgs | Konservatif | AACC / MIOU | 95,79% / 77,40% | 95,79% / 77,41% | 95,83% / 77,74% |
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| srcnn | Pengeditan | 32 imgs | Konservatif | PSNR / SSIM | 27,88% / 79,70% | 27,88% / 79,07% | 28,41% / 81,06% |
| Esrgan | Pengeditan | 32 imgs | Konservatif | PSNR / SSIM | 27,84% / 75,20% | 27,49% / 72,90% | 27,51% / 72,84% |

Proyek ini didistribusikan di bawah lisensi Apache, versi 2.0.