PPQ เป็นเครื่องมือ Quantization เครือข่ายประสาทที่ปรับขนาดได้และสมรรถนะสูงสำหรับแอพพลิเคชั่นอุตสาหกรรม
การหาปริมาณเครือข่ายประสาทซึ่งเป็นโซลูชันการเร่งความเร็วของเครือข่ายประสาทที่ใช้กันทั่วไปได้ถูกนำมาใช้อย่างกว้างขวางตั้งแต่ปี 2559 เมื่อเทียบกับการตัดแต่งกิ่งโครงข่ายประสาทและการค้นหาสถาปัตยกรรมการหาปริมาณเครือข่ายมีความหลากหลายมากขึ้นและมีคุณค่าทางอุตสาหกรรมสูง โดยเฉพาะอย่างยิ่งสำหรับชิปด้านปลายในสถานการณ์ที่ทั้งพื้นที่บนชิปและการใช้พลังงานมี จำกัด เรามักจะต้องการแปลงการดำเนินการจุดลอยตัวทั้งหมดเป็นการดำเนินการจุดคงที่ ค่าของเทคโนโลยีเชิงปริมาณอยู่ในความจริงที่ว่าการคำนวณทางคณิตศาสตร์แบบลอยและการดึงหน่วยความจำมีราคาแพงมากและขึ้นอยู่กับเลขคณิตจุดลอยตัวที่ซับซ้อนและแบนด์วิดท์การดึงหน่วยความจำสูง หากเราสามารถประมาณจุดลอยตัวโดยใช้การดำเนินการจุดคงที่ที่มีความกว้างบิตต่ำกว่าในช่วงที่ยอมรับได้สิ่งนี้จะทำให้เราได้เปรียบอย่างมีนัยสำคัญในการออกแบบวงจรชิปการใช้พลังงานของระบบเวลาแฝงของระบบและปริมาณงาน
เราอยู่ในช่วงเวลาและปัญญาประดิษฐ์บนพื้นฐานของเครือข่ายประสาทกำลังพัฒนาอย่างรวดเร็วและเทคโนโลยีเช่นการจดจำภาพการแก้ไขภาพการสร้างเนื้อหาการสร้างแบบจำลองกำลังเปลี่ยนแปลงชีวิตของเรา สิ่งที่มาพร้อมกับโครงสร้างแบบจำลองที่เปลี่ยนแปลงตลอดเวลาซึ่งได้กลายเป็นปัญหาแรกก่อนที่จะหาปริมาณแบบจำลองและการปรับใช้ ในการจัดการกับโครงสร้างที่ซับซ้อนเราได้ออกแบบโครงสร้างตรรกะกราฟการคำนวณที่สมบูรณ์และตรรกะการจัดตารางเวลากราฟ ความพยายามเหล่านี้ช่วยให้ PPQ สามารถแยกวิเคราะห์และปรับเปลี่ยนโครงสร้างโมเดลที่ซับซ้อนกำหนดพื้นที่เชิงปริมาณและการไม่ใช้ปริมาณในเครือข่ายโดยอัตโนมัติและอนุญาตให้ผู้ใช้ควบคุมตรรกะการจัดตารางเวลาด้วยตนเอง
การเพิ่มปริมาณและประสิทธิภาพของเครือข่ายเป็นปัญหาทางวิศวกรรมที่ร้ายแรง เราหวังว่าผู้ใช้สามารถมีส่วนร่วมในการหาปริมาณและการปรับใช้เครือข่ายและมีส่วนร่วมในการเพิ่มประสิทธิภาพประสิทธิภาพของเครือข่ายประสาท ด้วยเหตุนี้เราจึงให้บริการสื่อการเรียนรู้ที่เกี่ยวข้องกับการปรับใช้ที่เกี่ยวข้องใน GitHub และเน้นความยืดหยุ่นของอินเทอร์เฟซในการออกแบบซอฟต์แวร์อย่างจงใจ ผ่านความพยายามอย่างต่อเนื่องและการสำรวจเราได้จัดประเภทตรรกะของปริมาณเชิงตรรกะซึ่งรับผิดชอบในการเริ่มต้นกลยุทธ์การหาปริมาณในแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกันและอนุญาตให้ผู้ใช้สามารถปรับแต่งความกว้างของบิตปริมาณการวัดปริมาณและอัลกอริทึมการสอบเทียบของผู้ประกอบการแต่ละรายและแต่ละเทนเซอร์ในเครือข่าย เราจัดระเบียบตรรกะเชิงปริมาณใหม่เป็น 27 กระบวนการเพิ่มประสิทธิภาพเชิงปริมาณอิสระ ผู้ใช้ PPQ สามารถรวมกระบวนการปรับให้เหมาะสมตามความต้องการของพวกเขาเพื่อให้งานเชิงปริมาณที่ยืดหยุ่นสูง ในฐานะผู้ใช้ PPQ คุณสามารถเพิ่มและแก้ไขกระบวนการเพิ่มประสิทธิภาพทั้งหมดตามความต้องการของคุณและสำรวจขอบเขตใหม่ของเทคโนโลยีเชิงปริมาณ
นี่คือเฟรมเวิร์กที่สร้างขึ้นเพื่อจัดการงานเชิงปริมาณที่ซับซ้อน - เอ็นจิ้นการดำเนินการของ PPQ ได้รับการออกแบบมาเป็นพิเศษสำหรับการหาปริมาณ ในฐานะที่เป็น PPQ เวอร์ชัน 0.6.6 ซอฟต์แวร์ได้สร้างตรรกะการดำเนินการของผู้ให้บริการ ONNX ทั่วไป 99 ตัวและสนับสนุนการดำเนินการจำลองเชิงปริมาณในระหว่างการดำเนินการ PPQ สามารถเสร็จสิ้นการอนุมานและการหาปริมาณของโมเดล ONNX โดยไม่ต้องมี onnxRuntime ในฐานะส่วนหนึ่งของการออกแบบสถาปัตยกรรมเราอนุญาตให้ผู้ใช้ลงทะเบียนการใช้งานผู้ให้บริการใหม่สำหรับ PPQ โดยใช้ Python+ Pytorch หรือ C ++ / CUDA และตรรกะใหม่ยังสามารถแทนที่ตรรกะการใช้งานของผู้ประกอบการที่มีอยู่ PPQ ช่วยให้ผู้ให้บริการเดียวกันมีตรรกะการดำเนินการที่แตกต่างกันบนแพลตฟอร์มที่แตกต่างกันซึ่งสนับสนุนการจำลองการดำเนินงานของแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกัน ด้วยความช่วยเหลือของเอ็นจิ้นการดำเนินการที่กำหนดเองและการใช้งานเคอร์เนล PPQ CUDA PPQ มีประสิทธิภาพสูงอย่างมาก PPQ มีข้อได้เปรียบด้านประสิทธิภาพที่สำคัญอย่างยิ่งและมักจะสามารถทำงานเชิงปริมาณให้เสร็จสมบูรณ์ด้วยประสิทธิภาพที่น่าทึ่ง
การพัฒนา PPQ นั้นเกี่ยวข้องอย่างใกล้ชิดกับกรอบการอนุมานซึ่งช่วยให้เราเข้าใจรายละเอียดจำนวนมากของการอนุมานฮาร์ดแวร์และควบคุมข้อผิดพลาดการจำลองฮาร์ดแวร์อย่างเคร่งครัด ด้วยความพยายามร่วมกันของคนงานโอเพนซอร์สจำนวนมากทั้งในและต่างประเทศปัจจุบัน PPQ สนับสนุนการทำงานร่วมกันกับกรอบการอนุมานหลายครั้งเช่น Tensorrt, OpenPPL, OpenVino, NCNN, MNN, Onnxruntime, Tengine, SNPE, Graphcore, Metax ฯลฯ PPQ เป็นกรอบการหาปริมาณแบบจำลองที่ปรับขนาดได้สูง ด้วยฟังก์ชั่นฟังก์ชั่นใน ppq.lib คุณสามารถขยายความสามารถเชิงปริมาณของ PPQ ไปยังฮาร์ดแวร์และไลบรารีที่เป็นไปได้อื่น ๆ เราหวังว่าจะได้ร่วมงานกับคุณเพื่อนำปัญญาประดิษฐ์มาสู่หลายพันครัวเรือน
ติดตั้ง CUDA จาก CUDA Toolkit
ติดตั้งผู้ปฏิบัติงาน
apt-get install ninja-build # for debian/ubuntu user
yum install ninja-build # for redhat/centos userสำหรับผู้ใช้ Windows:
(1) ดาวน์โหลด ninja.exe จาก https://github.com/ninja-build/ninja/releases เพิ่มลงในเส้นทาง Windows
(2) ติดตั้ง Visual Studio 2019 จาก https://visualstudio.microsoft.com
(3) เพิ่มคอมไพเลอร์ C ++ ของคุณไปยังสภาพแวดล้อม Windows Path หากคุณใช้ Visual Studio ควรเป็นเหมือน "C: Program Files Microsoft Visual Studio 2019 Community VC Tools MSVC 14.16.27023 bin hostx86 x86"
(4) อัปเดตเวอร์ชัน 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| คำอธิบาย | ลิงค์ลิงค์ | |
|---|---|---|
| 01 | การหาปริมาณแบบจำลอง | onnx, caffe, pytorch |
| 02 | ตัวกระตุ้น | ผู้บริหาร |
| 03 | การวิเคราะห์ข้อผิดพลาด | เครื่องวิเคราะห์ |
| 04 | เครื่องสอบเทียบ | การสอบเทียบ |
| 05 | การปรับแต่งเครือข่าย | finetune |
| 06 | การตั้งเวลาเครือข่าย | การส่ง |
| 07 | แนวทางปฏิบัติที่ดีที่สุด | แนวปฏิบัติที่ดีที่สุด |
| 08 | แพลตฟอร์มเป้าหมาย | แพลตฟอร์ม |
| 09 | กระบวนการปรับให้เหมาะสม | ดีที่สุด |
| 10 | ภาพฟิวชั่น | การผสมผสาน |
| คำอธิบาย | ลิงค์ลิงค์ | |
|---|---|---|
| 01 | quantsimplifypass (กระบวนการเพรียวลมเชิงปริมาณทั่วไป) | เอกสาร |
| 02 | QuantfusionPass (กระบวนการฟิวชั่นกราฟเชิงปริมาณทั่วไป) | เอกสาร |
| 03 | QuantalignmentPass (กระบวนการจัดตำแหน่งเชิงปริมาณทั่วไป) | เอกสาร |
| 04 | RuntimecalibrationPass (กระบวนการปรับเทียบพารามิเตอร์) | เอกสาร |
| 05 | BiascorrectionPass (กระบวนการแก้ไขอคติ) | เอกสาร |
| 06 | quantsimplifypass (กระบวนการเพรียวลมเชิงปริมาณทั่วไป) | เอกสาร |
| 07 | LayerWiseeQualizationPass (กระบวนการทำให้เท่าเทียมกันของน้ำหนักระหว่างเลเยอร์) | เอกสาร |
| 08 | LayerspilitPass (กระบวนการแยกผู้ปฏิบัติงาน) | เอกสาร |
| 09 | เรียนรู้ stepsizepass (กระบวนการปรับแต่งเครือข่าย) | เอกสาร |
| 10 | อื่น ๆ (อื่น ๆ ) | อ้างถึง |
| บทนำ DESC | ลิงค์ลิงค์ | |
|---|---|---|
| 01 | พื้นฐานของสถาปัตยกรรมคอมพิวเตอร์ | การเชื่อมโยง |
| 02 | การวิเคราะห์ประสิทธิภาพเครือข่าย | การเชื่อมโยง |
| 03 | หลักการคำนวณเชิงปริมาณ | ตอนที่ 1, ตอนที่ 2 |
| 04 | การเพิ่มประสิทธิภาพกราฟและการจำลองเชิงปริมาณ | การเชื่อมโยง |
| 05 | การกำหนดเวลากราฟและการจับคู่รูปแบบ | การเชื่อมโยง |
| 06 | การปรับใช้เครือข่ายประสาท | การเชื่อมโยง |
| 07 | การเลือกพารามิเตอร์เชิงปริมาณ | การเชื่อมโยง |
| 08 | การวิเคราะห์การแพร่กระจายข้อผิดพลาดเชิงปริมาณ | การเชื่อมโยง |
| ตัวอย่าง | แพลตฟอร์มการปรับใช้เครือข่าย (แพลตฟอร์ม) | รูปแบบโมเดลอินพุต (รูปแบบ) | ลิงค์ (ลิงค์) | วิดีโอที่เกี่ยวข้อง (วิดีโอ) |
|---|---|---|---|---|
TensorRT | ||||
| ใช้ Torch2trt เพื่อเพิ่มความเร็วเครือข่ายของคุณ | pytorch | pytorch | การเชื่อมโยง | การเชื่อมโยง |
| การฝึกอบรมเชิงปริมาณ Tensorrt | Tensorrt | pytorch | การเชื่อมโยง | การเชื่อมโยง |
| Tensorrt โพสต์การฝึกอบรมเชิงปริมาณ (PPQ) | Tensorrt | onnx | 1. QUANT กับ Tensorrt OnnxParser 2. QUANT กับ TENSORRT API | |
| การปรับใช้ tensorrt fp32 | Tensorrt | onnx | การเชื่อมโยง | การเชื่อมโยง |
| การเปรียบเทียบประสิทธิภาพของ Tensorrt | Tensorrt | pytorch | การเชื่อมโยง | การเชื่อมโยง |
| tensorrt profiler | Tensorrt | pytorch | การเชื่อมโยง | การเชื่อมโยง |
onnxruntime | ||||
| ใช้ onnxruntime เพื่อเร่งเครือข่ายของคุณ | onnxruntime | onnx | การเชื่อมโยง | การเชื่อมโยง |
| onnx post-training quantization (PPQ) | onnxruntime | onnx | การเชื่อมโยง | การเชื่อมโยง |
| การเปรียบเทียบประสิทธิภาพของ OnnxRuntime | onnxruntime | pytorch | การเชื่อมโยง | การเชื่อมโยง |
openvino | ||||
| ใช้ openvino เพื่อเร่งเครือข่ายของคุณ | Openvino | onnx | การเชื่อมโยง | |
| การฝึกอบรมเชิงปริมาณ OpenVino | Openvino | pytorch | การเชื่อมโยง | |
| Openvino โพสต์การฝึกอบรมเชิงปริมาณ (PPQ) | Openvino | onnx | การเชื่อมโยง | |
| การเปรียบเทียบประสิทธิภาพ OpenVino | Openvino | pytorch | การเชื่อมโยง | |
snpe | ||||
| การฝึกอบรมโพสต์ SNPE (PPQ) | snpe | คาเฟอีน | การเชื่อมโยง | |
ncnn | ||||
| NCNN โพสต์การฝึกอบรมเชิงปริมาณ (PPQ) | ncnn | onnx | การเชื่อมโยง | |
OpenPPL | ||||
| ppl cuda โพสต์การฝึกอบรมเชิงปริมาณ (PPQ) | ppl cuda | onnx | การเชื่อมโยง |
| บทนำ DESC | ลิงค์ลิงค์ | |
|---|---|---|
| 01 | กระบวนการดำเนินการเชิงปริมาณ PPQ | การเชื่อมโยง |
| 02 | การวิเคราะห์เครือข่าย PPQ | การเชื่อมโยง |
| 03 | การจัดตารางกราฟเชิงปริมาณ PPQ | การเชื่อมโยง |
| 04 | แพลตฟอร์มเป้าหมาย PPQ และ TQC | การเชื่อมโยง |
| 05 | PPQ Quantizer | การเชื่อมโยง |
| 06 | กระบวนการเพิ่มประสิทธิภาพเชิงปริมาณ PPQ | การเชื่อมโยง |
| 07 | ฟังก์ชันเชิงปริมาณ PPQ | การเชื่อมโยง |
| บัญชีอย่างเป็นทางการของ WeChat | กลุ่ม QQ |
|---|---|
| openppl | 627853444 |
![]() | ![]() |
อีเมล: [email protected]
เราขอขอบคุณการมีส่วนร่วมทั้งหมด หากคุณวางแผนที่จะมีส่วนร่วมในการแก้ไขข้อผิดพลาดโปรดทำเช่นนั้นโดยไม่ต้องมีการสนทนาเพิ่มเติม
หากคุณวางแผนที่จะมีส่วนร่วมคุณสมบัติใหม่ฟังก์ชั่นยูทิลิตี้หรือส่วนขยายไปยังแกนกลางโปรดเปิดปัญหาก่อนและหารือเกี่ยวกับคุณลักษณะกับเรา การส่งประชาสัมพันธ์โดยไม่ต้องสนทนาอาจจบลงด้วยการส่งต่อ PR เพราะเราอาจใช้แกนกลางในทิศทางที่แตกต่างจากที่คุณอาจทราบ
PPQ ได้รับการทดสอบด้วยแบบจำลองจาก MMLAB-classification, MMLAB-DETECTECT, MMLAB-Segamentation, MMLAB-Editing, ที่นี่เราแสดงรายการผลการทดสอบส่วนหนึ่ง
| แบบอย่าง | พิมพ์ | การสอบเทียบ | ผู้ส่ง | ตัวชี้วัด | PPQ (ซิม) | pplcuda | fp32 |
|---|---|---|---|---|---|---|---|
| resnet-18 | การจำแนกประเภท | 512 IMGS | ซึ่งอนุรักษ์นิยม | acc-top-1 | 69.50% | 69.42% | 69.88% |
| resnext-101 | การจำแนกประเภท | 512 IMGS | ซึ่งอนุรักษ์นิยม | acc-top-1 | 78.46% | 78.37% | 78.66% |
| SE-RESNET-50 | การจำแนกประเภท | 512 IMGS | ซึ่งอนุรักษ์นิยม | acc-top-1 | 77.24% | 77.26% | 77.76% |
| Shufflenetv2 | การจำแนกประเภท | 512 IMGS | ซึ่งอนุรักษ์นิยม | acc-top-1 | 69.13% | 68.85% | 69.55% |
| mobilenetv2 | การจำแนกประเภท | 512 IMGS | ซึ่งอนุรักษ์นิยม | acc-top-1 | 70.99% | 71.1% | 71.88% |
| - | - | - | - | - | - | - | - |
| เรตินัน | การตรวจจับ | 32 IMGS | pplnn | bbox_map | 36.1% | 36.1% | 36.4% |
| Faster_rcnn | การตรวจจับ | 32 IMGS | pplnn | bbox_map | 36.6% | 36.7% | 37.0% |
| FSAF | การตรวจจับ | 32 IMGS | pplnn | bbox_map | 36.5% | 36.6% | 37.4% |
| mask_rcnn | การตรวจจับ | 32 IMGS | pplnn | bbox_map | 37.7% | 37.6% | 37.9% |
| - | - | - | - | - | - | - | - |
| DeepAbv3 | การแบ่งส่วน | 32 IMGS | ซึ่งอนุรักษ์นิยม | aacc / miou | 96.13% / 78.81% | 96.14% / 78.89% | 96.17% / 79.12% |
| DeepAbv3plus | การแบ่งส่วน | 32 IMGS | ซึ่งอนุรักษ์นิยม | aacc / miou | 96.27% / 79.39% | 96.26% / 79.29% | 96.29% / 79.60% |
| FCN | การแบ่งส่วน | 32 IMGS | ซึ่งอนุรักษ์นิยม | aacc / miou | 95.75% / 74.56% | 95.62% / 73.96% | 95.68% / 72.35% |
| PSPNET | การแบ่งส่วน | 32 IMGS | ซึ่งอนุรักษ์นิยม | aacc / miou | 95.79% / 77.40% | 95.79% / 77.41% | 95.83% / 77.74% |
| - | - | - | - | - | - | - | - |
| srcnn | การแก้ไข | 32 IMGS | ซึ่งอนุรักษ์นิยม | PSNR / SSIM | 27.88% / 79.70% | 27.88% / 79.07% | 28.41% / 81.06% |
| Esrgan | การแก้ไข | 32 IMGS | ซึ่งอนุรักษ์นิยม | PSNR / SSIM | 27.84% / 75.20% | 27.49% / 72.90% | 27.51% / 72.84% |

โครงการนี้มีการแจกจ่ายภายใต้ใบอนุญาต Apache เวอร์ชัน 2.0