PPQ هي أداة لتحديد كمية الشبكة العصبية قابلة للتطوير وعالية الأداء للتطبيقات الصناعية.
تم استخدام كمية الشبكة العصبية ، كحل لتسريع الشبكة العصبية شائعة الاستخدام ، على نطاق واسع منذ عام 2016. مقارنةً بتقليم الشبكات العصبية والبحث عن الهندسة المعمارية ، فإن قياس الشبكة أكثر تنوعًا وله قيمة عملية صناعية عالية. خاصة بالنسبة للرقاقة على الجانب النهائي ، في السيناريوهات التي تكون فيها كل من المساحة على الرقاقة واستهلاك الطاقة محدودة ، نريد دائمًا تحويل جميع عمليات الفاصلة العائمة إلى عمليات نقاط ثابتة. تكمن قيمة التكنولوجيا الكمية في حقيقة أن حساب النقطة العائمة والذاكرة مكلفة للغاية ، وتعتمد على النطاق الترددي المعقد في النطاق العائم وعلى نطاق النطاق الترددي للذاكرة. إذا تمكنا من تقريب نتائج النقطة العائمة باستخدام عملية نقطة ثابتة مع عروض بت أقل ضمن نطاق مقبول ، فإن هذا سيمنحنا مزايا كبيرة في تصميم دائرة الرقائق ، واستهلاك طاقة النظام ، ومزمن النظام والإنتاجية.
نحن في موجة العصر ، والذكاء الاصطناعي القائم على الشبكات العصبية تتطور بسرعة ، وتقنيات مثل التعرف على الصور ، دقة الصورة الفائقة ، توليد المحتوى ، إعادة بناء النماذج تغير حياتنا. ما يأتي معه هو بنية النموذج المتغيرة باستمرار ، والتي أصبحت الصعوبة الأولى قبل التقدير الكمي للنموذج والنشر. للتعامل مع الهياكل المعقدة ، قمنا بتصميم بنية منطق حسابي كاملة ومنطق جدولة الرسم البياني. تتيح هذه الجهود PPQ من تحليل وتعديل هياكل النماذج المعقدة ، وتحديد مناطق القياس الكمي وعدم الاستيلاء تلقائيًا في الشبكة ، وتسمح للمستخدمين بالتحكم يدويًا في منطق الجدولة.
تعد القياس الكمي وتحسين الأداء للشبكة مشاكل هندسية خطيرة. نأمل أن يتمكن المستخدمون من المشاركة في تقدير الشبكة ونشرها والمشاركة في تحسين أداء الشبكة العصبية. تحقيقًا لهذه الغاية ، نقدم مواد تعليمية متعلقة بالنشر المقابلة في GitHub ، ونؤكد عمداً على مرونة الواجهة في تصميم البرامج. من خلال محاولاتنا واستكشافاتنا المستمرة ، قمنا بتجريد نوع المنطق من الكميات ، المسؤولة عن تهيئة استراتيجيات تحديد الكمي على منصات الأجهزة المختلفة ، وسمحت للمستخدمين بتخصيص عرض بت الكميات ، والتحسينات الكمية والخوارزميات المعايرة لكل مشغل وكل موتر في الشبكة. نعيد تنظيم المنطق الكمي إلى 27 عملية تحسين كمية مستقلة. يمكن لمستخدمي PPQ الجمع بشكل تعسفي لعملية التحسين وفقًا لاحتياجاتهم لإكمال المهام الكمية المرنة للغاية. كمستخدم لـ PPQ ، يمكنك إضافة وتعديل جميع عمليات التحسين وفقًا لاحتياجاتك واستكشاف حدود جديدة للتكنولوجيا الكمية.
هذا هو إطار عمل تم إنشاؤه للتعامل مع مهام القياس المعقدة - تم تصميم محرك تنفيذ PPQ خصيصًا للتحجيم. اعتبارًا من إصدار PPQ 0.6.6 ، يحتوي البرنامج على 99 منطق تنفيذ مشغل ONNX المشترك ويدعم أصلاً عمليات المحاكاة الكمية أثناء التنفيذ. يمكن لـ PPQ إكمال استنتاج وتقدير نموذج ONNX دون onnxruntime. كجزء من التصميم المعماري ، نسمح للمستخدمين بتسجيل تطبيقات المشغل الجديدة لـ PPQ باستخدام Python+ Pytorch أو C ++ / CUDA ، ويمكن للمنطق الجديد أيضًا استبدال منطق تنفيذ المشغل الحالي. يتيح PPQ للمشغل نفسه أن يكون له منطق تنفيذ مختلف على منصات مختلفة ، وبالتالي دعم المحاكاة التشغيلية لمنصات الأجهزة المختلفة. بمساعدة محركات التنفيذ المخصصة والتنفيذ عالي الأداء لـ PPQ CUDA kernel ، تتمتع PPQ بمزايا أداء كبيرة للغاية ويمكنها في كثير من الأحيان إكمال المهام الكمية بكفاءة مذهلة.
يرتبط تطوير PPQ ارتباطًا وثيقًا بإطار الاستدلال ، والذي يسمح لنا بفهم العديد من تفاصيل استدلال الأجهزة وبالتالي تحكم بشكل صارم على أخطاء محاكاة الأجهزة. من خلال الجهود المشتركة للعديد من العمال مفتوح المصادر في الداخل والخارج ، تدعم PPQ حاليًا العمل التعاوني مع أطر عمل متعددة مثل Tensorrt و OpenPPL و Openvino و NCNN و MNN و OnnxRuntime و Tengine و SNPE و GraphCore و Metax ، وما إلى ذلك ، ومبادلة منطو المساحات المسبقة. PPQ هو إطار كمية النموذج القابل للتطوير للغاية. مع وظيفة الوظيفة في ppq.lib ، يمكنك تمديد قدرات القياس الكمي لـ PPQ إلى مكتبات أخرى محتملة ومكتبات التفكير. نتطلع إلى العمل معك لجلب الذكاء الاصطناعي لآلاف الأسر.
تثبيت CUDA من مجموعة أدوات CUDA
تثبيت complier
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/release ، أضفه إلى Windows Path.
(2) تثبيت Visual Studio 2019 من https://visualstudio.microsoft.com.
(3) أضف برنامج التحويل البرمجي C ++ الخاص بك إلى بيئة مسار Windows ، إذا كنت تستخدم 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 ، الكافيين ، Pytorch |
| 02 | المحرك | المنفذ |
| 03 | تحليل الخطأ | محلل |
| 04 | المعايرة | معايرة |
| 05 | شبكة صقل الشبكة | ضبط دقيق |
| 06 | جدولة الشبكة | إرسال |
| 07 | أفضل الممارسات | أفضل الممارسات |
| 08 | منصة الهدف | منصة |
| 09 | عملية التحسين | الأمثل |
| 10 | اندماج الصورة | الانصهار |
| وصف | رابط الرابط | |
|---|---|---|
| 01 | QuantsImplifypass (عملية تبسيط الكمية العامة) | مستند |
| 02 | QuantFusionPass (عملية الانصهار الكمي العام) | مستند |
| 03 | commonignmentpass (عملية محاذاة الكمية العامة) | مستند |
| 04 | RunTimeCalibrationPass (عملية معايرة المعلمة) | مستند |
| 05 | BiasCorrectionPass (عملية تصحيح التحيز) | مستند |
| 06 | QuantsImplifypass (عملية تبسيط الكمية العامة) | مستند |
| 07 | layerwiseequalizationpass (عملية معادلة الوزن بين الطبقة) | مستند |
| 08 | layerspilitpass (عملية تقسيم المشغل) | مستند |
| 09 | QualistStePsizePass (عملية صقل الشبكة) | مستند |
| 10 | آخر (آخر) | الرجوع إلى |
| مقدمة DESC | رابط الرابط | |
|---|---|---|
| 01 | أساسيات بنية الكمبيوتر | وصلة |
| 02 | تحليل أداء الشبكة | وصلة |
| 03 | مبدأ الحساب الكمي | part1 ، part2 |
| 04 | تحسين الرسم البياني والمحاكاة الكمية | وصلة |
| 05 | جدولة الرسم البياني ومطابقة الأنماط | وصلة |
| 06 | نشر الشبكة العصبية | وصلة |
| 07 | اختيار المعلمة الكمية | وصلة |
| 08 | تحليل انتشار الخطأ الكمي | وصلة |
| أمثلة | منصة نشر الشبكة (منصة) | تنسيق نموذج الإدخال (تنسيق) | رابط (رابط) | مقاطع الفيديو ذات الصلة (فيديو) |
|---|---|---|---|---|
TensorRT | ||||
| استخدم Torch2Trt لتسريع شبكتك | Pytorch | Pytorch | وصلة | وصلة |
| التدريب الكمي tensorrt | Tensorrt | Pytorch | وصلة | وصلة |
| تشينورت كمية ما بعد التدريب (PPQ) | Tensorrt | onnx | 1. كمية مع Tensorrt onnxparser 2. كمية مع API Tensorrt | |
| Tensorrt FP32 النشر | Tensorrt | onnx | وصلة | وصلة |
| مقارنة الأداء Tensorrt | Tensorrt | Pytorch | وصلة | وصلة |
| Tensorrt profiler | Tensorrt | Pytorch | وصلة | وصلة |
onnxruntime | ||||
| استخدم onnxruntime لتسريع شبكتك | onnxruntime | onnx | وصلة | وصلة |
| كمية ما بعد التدريب ONNX (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 Target Platform و TQC | وصلة |
| 05 | PPQ كمية | وصلة |
| 06 | عملية التحسين الكمي PPQ | وصلة |
| 07 | PPQ الوظيفة الكمية | وصلة |
| حساب WeChat الرسمي | QQ مجموعة |
|---|---|
| Openppl | 627853444 |
![]() | ![]() |
البريد الإلكتروني: [email protected]
نحن نقدر جميع المساهمات. إذا كنت تخطط للمساهمة في إصلاحات الأخطاء ، فيرجى القيام بذلك دون أي مناقشة أخرى.
إذا كنت تخطط للمساهمة بميزات جديدة أو وظائف الأداة المساعدة أو الامتدادات في القلب ، فيرجى أولاً فتح مشكلة ومناقشة الميزة معنا. قد ينتهي إرسال العلاقات العامة دون مناقشة إلى حد ما إلى العلاقات العامة المرفوضة لأننا قد نأخذ النواة في اتجاه مختلف عما قد تكون على دراية به.
يتم اختبار PPQ باستخدام نماذج من تصنيف MMLAB ، وكشف MMLAB ، وعملية MMLAB ، وتحرير MMLAB ، هنا قمنا بإدراج جزء من نتيجة الاختبار الخارج.
| نموذج | يكتب | معايرة | المرسل | متري | PPQ (SIM) | 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.