️ وقف المشروع - لن يتم الحفاظ على هذا المشروع من قبل Intel. تم تحديد هذا المشروع على أنه يهرب من الأمن المعروف. توقفت Intel إلى التطوير والمساهمات بما في ذلك ، على سبيل المثال لا الحصر ، الصيانة ، إصلاحات الأخطاء ، الإصدارات الجديدة ، أو التحديثات ، لهذا المشروع. لم تعد Intel تقبل تصحيحات هذا المشروع.

Distiller هي حزمة بيثون مفتوحة المصدر لأبحاث ضغط الشبكة العصبية.
يمكن أن يقلل ضغط الشبكة من بصمة الذاكرة للشبكة العصبية ، وزيادة سرعة الاستنتاج وتوفير الطاقة. يوفر Distiller بيئة Pytorch للنماذج الأولية وتحليل خوارزميات الضغط ، مثل طرق تحفز التباين والحساب المنخفض الدقة.
ستساعد هذه الإرشادات في رفع وتشغيل الجهاز المحلي.
استنساخ مستودع رمز التقطير من جيثب:
$ git clone https://github.com/IntelLabs/distiller.git
يفترض بقية الوثائق التالية ، أنك قد استنسخت مستودعك إلى دليل يسمى distiller .
نوصي باستخدام بيئة افتراضية Python ، ولكن هذا بالطبع ، متروك لك. لا يوجد شيء خاص حول استخدام Distiller في بيئة افتراضية ، لكننا نقدم بعض التعليمات ، من أجل الاكتمال.
قبل إنشاء البيئة الافتراضية ، تأكد من وجودك في Directory distiller . بعد إنشاء البيئة ، يجب أن ترى دليلًا يسمى distiller/env .
إذا لم يكن لديك تثبيت VirtualEnv ، فيمكنك العثور على تعليمات التثبيت هنا.
لإنشاء البيئة ، تنفيذ:
$ python3 -m virtualenv env
هذا ينشئ دليلًا فرعيًا يسمى env حيث يتم تخزين البيئة الافتراضية Python ، وتكوين القشرة الحالية لاستخدامها كبيئة Python الافتراضية.
إذا كنت تفضل استخدام venv ، فابدأ بتثبيته:
$ sudo apt-get install python3-venv
ثم قم بإنشاء البيئة:
$ python3 -m venv env
كما هو الحال مع VirtualEnv ، هذا ينشئ دليلًا يسمى distiller/env .
أوامر تنشيط البيئة وإلغاء تنشيط venv و virtualenv هي نفسها.
ملاحظة: تأكد من تنشيط البيئة ، قبل المتابعة مع تثبيت حزم التبعية:
$ source env/bin/activate
أخيرًا ، قم بتثبيت حزمة Distiller وتبعياتها باستخدام pip3 :
$ cd distiller
$ pip3 install -e .
يقوم هذا بتثبيت التقطير في "وضع التطوير" ، مما يعني أن أي تغييرات تم إجراؤها في الكود تنعكس في البيئة دون إعادة تشغيل أمر التثبيت (لذلك لا داعي لإعادة التثبيت بعد سحب التغييرات من مستودع GIT).
ملحوظات:
يتم اختبار Distiller باستخدام التثبيت الافتراضي لـ Pytorch 1.3.1 ، والذي يستخدم CUDA 10.1. نحن نستخدم الإصدار Torchvision 0.4.2. يتم تضمينها في requirements.txt Distiller.
إذا لم تستخدم CUDA 10.1 في بيئتك ، فيرجى الرجوع إلى موقع Pytorch لتثبيت البناء المتوافق لـ Pytorch 1.3.1 و Torchvision 0.4.2.
يأتي Distiller مع تطبيقات عينة ودروس تعليمية تغطي مجموعة من أنواع النماذج:
| نوع النموذج | تباين | كمية بعد التدريب | تدريب على دراية كمية | ضغط السيارات (AMC) | تقطير المعرفة |
|---|---|---|---|---|---|
| تصنيف الصور | ✅ | ✅ | ✅ | ✅ | ✅ |
| نموذج اللغة على مستوى الكلمات | ✅ | ✅ | |||
| الترجمة (GNMT) | ✅ | ||||
| نظام التوصية (NCF) | ✅ | ||||
| الكشف عن الكائن | ✅ |
توجه إلى دليل الأمثلة لمزيد من التفاصيل.
موارد أخرى للإشارة إليها ، إلى جانب الأمثلة:
فيما يلي أمثلة بسيطة باستخدام عينة تصنيف صورة Distiller ، مما يدل على بعض قدرات التقطير.
سوف يستدعي ما يلي التدريب فقط (بدون ضغط) لشبكة تسمى "Simplenet" على مجموعة بيانات CIFAR10. يعتمد هذا تقريبًا على تطبيق TorchVision لتدريب ImageNet ، لذلك يجب أن يبدو مألوفًا إذا كنت قد استخدمت هذا التطبيق. في هذا المثال ، لا ندخل أي آليات ضغط: نحن فقط نتدرب لأنه من أجل التثبيت بعد التقليم ، يعد التدريب جزءًا أساسيًا.
لاحظ أنه في المرة الأولى التي تقوم فيها بتنفيذ هذا الأمر ، سيتم تنزيل رمز CIFAR10 على جهازك ، والذي قد يستغرق بعض الوقت - يرجى السماح لعملية التنزيل بالتمسك بالإنجاز.
المسار إلى مجموعة بيانات CIFAR10 تعسفية ، ولكن في أمثلةنا نضع مجموعات البيانات في نفس مستوى الدليل مثل تقطير (IE ../../../data.cifar10 ).
أولاً ، التغيير إلى دليل العينة ، ثم استدعاء التطبيق:
$ cd distiller/examples/classifier_compression
$ python3 compress_classifier.py --arch simplenet_cifar ../../../data.cifar10 -p 30 -j=1 --lr=0.01
يمكنك استخدام الواجهة الخلفية المتوسطة لعرض تقدم التدريب (في الرسم البياني أدناه ، نعرض بضع جلسات تدريبية مع قيم LR مختلفة). بالنسبة لجلسات الضغط ، أضفنا تتبعًا لمستويات التنشيط والمتنفس ، وفقدان التنظيم.

لقد أدرجنا في مستودع GIT بضع نقاط تفتيش لنموذج RESNET20 الذي قمنا بتدريبه مع عوامات 32 بت. دعنا نقوم بتحميل نقطة تفتيش نموذج قمنا بتدريبه مع تنظيم مجموعة Lasso الجماعية.
باستخدام وسيطات سطر الأوامر التالية ، يقوم تطبيق العينة بتحميل النموذج ( --resume ) ويطبع إحصائيات حول أوزان النموذج ( --summary=sparsity ). هذا مفيد إذا كنت ترغب في تحميل نموذج تم تشذيبه مسبقًا ، لدراسة إحصائيات تفاوت الأوزان ، على سبيل المثال. لاحظ أنه عند استئناف نقطة تفتيش مخزنة ، لا تزال بحاجة إلى إخبار التطبيق بالهندسة المعمارية للشبكة التي تستخدمها نقطة التفتيش ( -a=resnet20_cifar ):
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_ch_regularized_dense.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=sparsity

يجب أن ترى جدول نصي يوضح بالتفصيل المختلفة للترنز المعلمة. العمود الأول هو اسم المعلمة ، يليه شكله ، وعدد العناصر غير الصفر (NNZ) في النموذج الكثيف ، وفي النموذج المتفرق. تُظهر المجموعة التالية من الأعمدة على الأعمدة الحكيمة ، والصف ، والمواد الحكيمة ، والنواة الحكيمة ، والمرشح الحكيمة ، والعناصر.
إن لفها هي القيم القياسية والمتوسط والمتوسط للقيم المطلقة للعناصر.
في دفتر ملاحظات Compression Insights ، نستخدم matplotlib لرسم مخطط شريط لهذا الملخص ، والذي يظهر بالفعل ضغط البصمة غير المثير للإعجاب.

على الرغم من أن ضغط بصمة الذاكرة منخفضة للغاية ، فإن هذا النموذج يوفر بالفعل 26.6 ٪ من حساب Macs.
$ python3 compress_classifier.py --resume=../ssl/checkpoints/checkpoint_trained_channel_regularized_resnet20_finetuned.pth.tar -a=resnet20_cifar ../../../data.cifar10 --summary=compute

هذا المثال يؤدي كمية 8 بت من resnet20 لـ CIFAR10. لقد أدرجنا في مستودع GIT نقطة تفتيش نموذج RESNET20 الذي قمنا بتدريبه مع عوامات 32 بت ، لذلك سنأخذ هذا النموذج وتكميته:
$ python3 compress_classifier.py -a resnet20_cifar ../../../data.cifar10 --resume ../ssl/checkpoints/checkpoint_trained_dense.pth.tar --quantize-eval --evaluate
سيحفظ سطر الأوامر أعلاه نقطة تفتيش تسمى quantized_checkpoint.pth.tar التي تحتوي على معلمات النموذج الكمي. رؤية المزيد من الأمثلة هنا.
تم وصف مجموعة دفاتر الملاحظات التي تأتي مع Distiller هنا ، والتي تشرح أيضًا خطوات تثبيت خادم Notebook Jupyter.
بعد تثبيت الخادم وتشغيله ، ألقِ نظرة على دفتر الملاحظات الذي يغطي تحليل حساسية التقليم.
تحليل الحساسية هو عملية طويلة ويقوم هذا الكمبيوتر الدفتري بتحميل ملفات CSV التي هي إخراج عدة جلسات من تحليل الحساسية.

نحن حاليًا خفيفة الوزن على الاختبار وهذا مجال حيث سيكون موضع تقدير كبير.
هناك نوعان من الاختبارات: اختبارات النظام واختبارات الوحدة. لاستدعاء اختبارات الوحدة:
$ cd distiller/tests
$ pytest
نستخدم CIFAR10 لاختبارات النظام ، لأن حجمه يجعل الاختبارات الأسرع. لاستدعاء اختبارات النظام ، تحتاج إلى توفير مسار إلى مجموعة بيانات CIFAR10 التي قمت بتنزيلها بالفعل. بدلاً من ذلك ، يمكنك استدعاء full_flow_tests.py دون تحديد موقع مجموعة بيانات CIFAR10 واترك الاختبار تنزيل مجموعة البيانات (للحصول على الاحتجاج الأول فقط). لاحظ أن- --cifar1o-path الافتراضيات للدليل الحالي.
اختبارات النظام ليست قصيرة ، وحتى أطول إذا احتاج الاختبار إلى تنزيل مجموعة البيانات.
$ cd distiller/tests
$ python full_flow_tests.py --cifar10-path=<some_path>
يخرج البرنامج النصي مع الحالة 0 إذا نجحت جميع الاختبارات ، أو الحالة 1 خلاف ذلك.
تثبيت MKDOCs والحزم المطلوبة عن طريق التنفيذ:
$ pip3 install -r doc-requirements.txt
لبناء تشغيل وثائق المشروع:
$ cd distiller/docs-src
$ mkdocs build --clean
سيؤدي ذلك إلى إنشاء مجلد يسمى "موقع" يحتوي على موقع الوثائق. افتح Distiller/Docs/Site/Index.html لعرض الصفحة الرئيسية للوثائق.
نستخدم Semver للنسخة. للحصول على الإصدارات المتاحة ، راجع العلامات الموجودة على هذا المستودع.
تم ترخيص هذا المشروع بموجب ترخيص Apache 2.0 - راجع ملف الترخيص.
نماذج شبكية Degirum - مستودع يحتوي على نماذج مشقوقة ومعلومات ذات صلة.
Torchfi - Torchfi هو إطار عمل حقن الأعطال على رأس Pytorch لأغراض البحث.
HSI -Toolbox - ضغط CNN الفائق الطيف واختيار النطاق
Brunno F. Goldstein ، Sudarshan Srinivasan ، Dipankar Das ، Kunal Banerjee ، Leandro Santiago ، Victor C. Ferreira ، Alexandre S. Nery ، Sandip Kundu ، Felipe MG Franca.
تقييم موثوقية نماذج التعلم العميق المضغوط ،
في IEEE 11th American American Symposium on Circuits and Systems (LASCAS) ، San Jose ، Costa Rica ، 2020 ، pp. 1-5.
Pascal Bacchus ، روبرت ستيوارت ، Ekaterina Komendantskaya.
دقة ووقت التدريب وكفاءة الأجهزة مفاضلات للشبكات العصبية الكمية على FPGAs ،
في الحوسبة القابلة لإعادة التكوين. البنى والأدوات والتطبيقات. ARC 2020. ملاحظات المحاضرة في علوم الكمبيوتر ، المجلد 12083. Springer ، Cham
Indranil Chakraborty ، Mustafa Fayez Ali ، Dong Eun Kim ، Aayush Ankit ، Kaushik Roy.
Geniex: مقاربة معممة لمحاكاة عدم المثالية في Xbars memristive باستخدام الشبكات العصبية ،
Arxiv: 2003.06902 ، 2020.
أحمد ت. إلثاكي ، برانوي بيليجوندلا ، فاطمة ميريشغاله ، طارق إلغيندي ، تشارلز ألان ديلديل ، هادي إسماييلزاده.
القياس الكمي العميق القائم على التدرج للشبكات العصبية من خلال التنظيم الجيبي التكيفي ،
Arxiv: 2003.00146 ، 2020.
Ziqing Yang ، Yiming Cui ، Zhipeng Chen ، Wanxiang Che ، Ting Liu ، Shijin Wang ، Guoping Hu.
TextBrewer: مجموعة أدوات تقطير المعرفة مفتوحة المصدر لمعالجة اللغة الطبيعية ،
Arxiv: 2002.12620 ، 2020.
ألكساندر كوزلوف ، إيفان لازاريفيتش ، فاسيلي شامبوروف ، نيكولاي ليالايوشكين ، يوري غورباتشوف.
إطار ضغط الشبكة العصبية لاستدلال النموذج السريع ،
Arxiv: 2002.08679 ، 2020.
Moran Shkolnik ، Brian Chmiel ، Ron Banner ، Gil Shomron ، Yuri Nahshan ، Alex Bronstein ، Uri Weiser.
كمية قوية: نموذج واحد يحكمهم جميعًا ،
Arxiv: 2002.07686 ، 2020.
محمد عبد الله حنيف ، محمد شافيك.
Salvagednn: إنقاذ مسرعات الشبكات العصبية العميقة مع أخطاء دائمة من خلال رسم خرائط على دراية بالأخطاء ،
في المعاملات الفلسفية للجمعية الملكية أ: العلوم الرياضية والفيزيائية والهندسية 378 ، العدد 2164 ، 2019.
https://doi.org/10.1098/rsta.2019.0164
Meiqi Wang ، Jianqiao Mo ، Jun Lin ، Zhongfeng Wang ، Li Du.
Dynexit: استراتيجية ديناميكية في وقت مبكر للشبكات المتبقية العميقة ،
في ورشة عمل IEEE الدولية حول أنظمة معالجة الإشارات (SIPS) ، 2019.
Vinu Joseph ، Saurav Muralidharan ، Animesh Garg ، Michael Garland ، Ganesh Gopalakrishnan.
نهج قابل للبرمجة لضغط النموذج ،
Arxiv: 1911.02497 ، 2019
شفرة
Hui Guan ، Lin Ning ، Zhen Lin ، Xipeng Shen ، Huiyang Zhou ، Seung-Hwan Lim.
في مكان حماية ذاكرة الفضاء الصفر لـ CNN ،
في مؤتمر حول أنظمة معالجة المعلومات العصبية (Neups) ، 2019.
Arxiv: 1910.14479 ، 2019
شفرة
حسين باكتاش ، إيمانويل ناتالي ، لوران فينوت.
دراسة مقارنة لضغط الشبكة العصبية ،
Arxiv: 1910.11144 ، 2019.
ماكسيم زيمليانيكين ، ألكساندر سمركالوف ، تاتيانا خانوفا ، آنا بتروفيتشيفا ، جريجوري سيبيرياكوف.
512KIB RAM يكفي! التعرف على وجه الكاميرا الحية DNN على MCU ،
في مؤتمر IEEE الدولي حول رؤية الكمبيوتر (ICCV) ، 2019.
Ziheng Wang ، Jeremy Wohlwend ، Tao Lei.
تقليم منظم لنماذج اللغة الكبيرة ،
Arxiv: 1910.04732 ، 2019.
سوروش غودراتي ، هارديك شارما ، شون كينزر ، أمير يزدانباخش ، كامبيز صامادي ، نام سونغ كيم ، دوغ بورغر ، هادي عيسميلزاده.
تسريع نطاق شحن الشحن المختلط للشبكات العصبية العميقة من خلال الحساب المتداخل بتات ،
Arxiv: 1906.11915 ، 2019.
جيل شومرون ، تال هورويتز ، أوري وايزر.
SMT-SA: Multitherreading في وقت واحد في المصفوفات الانقباضي ،
في IEEE Computer Architecture Letters (CAL) ، 2019.
شانغقيان غاو ، تشنغ دنغ ، وهنغ هوانغ.
ضغط نموذج النطاق عبر مشاركة الوزن هيكلياً ،
في مؤتمر IEEE حول رؤية الكمبيوتر والتعرف على الأنماط (CVPR) ، 2019 ، الصفحات 8973-8982.
Moin Nadeem ، Wei Fang ، Brian Xu ، Mitra Mohtarami ، James Glass.
FAKTA: نظام التحقق من الحقائق الشاملة التلقائية ،
في فرع أمريكا الشمالية من جمعية اللغويات الحاسوبية (NAACL) ، 2019.
أحمد ت. Elthakeb ، Prannoy Pilligundla ، Hadi Esmaeilzadeh.
سنريك: تنظيم الجيوب الأنفية المعممة للتدريب الكمي العميق على نطاق واسع ،
Arxiv: 1905.01416 ، 2019. الكود
Goncharenko A. ، Denisov A. ، Alyamkin S. ، Terentev E.
العتبات القابلة للتدريب لتحديد كمية الشبكة العصبية ،
In: Rojas I. ، Joya G. ، Catala A. (eds) تقدم في ملاحظات محاضرة الذكاء الحسابي في علوم الكمبيوتر ، المجلد 11507. Springer ، Cham. مؤتمر العمل الدولي على الشبكات العصبية الاصطناعية (Iwann 2019).
أحمد ت. Elthakeb ، Prannoy Pilligundla ، Hadi Esmaeilzadeh.
قسّم وقهر: الاستفادة من تمثيلات الميزات الوسيطة للتدريب الكمي للشبكات العصبية ،
Arxiv: 1906.06033 ، 2019
ريتشي تشاو ، يووي هو ، الأردن دوتزل ، كريستوفر دي سا ، تشيرو تشانغ.
تحسين كمية الشبكة العصبية دون إعادة التدريب باستخدام تقسيم القناة الخارجية ،
Arxiv: 1901.09504 ، 2019
شفرة
Angad S. Rekhi ، Brian Zimmer ، Nikola Nedovic ، Ningxi Liu ، Rangharajan Venkatesan ، Miaorong Wang ، Brucek Khailany ، William J. Dally ، C. Thomas Gray.
نمذجة خطأ في أجهزة الإشارة التناظرية/المختلطة لاستدلال التعلم العميق ،
Nvidia Research ، 2019.
نوريو ناكاتا.
التطوير التقني الأخير للذكاء الاصطناعي للتصوير الطبي التشخيص ،
في المجلة اليابانية للأشعة ، فبراير 2019 ، المجلد 37 ، العدد 2 ، ص 103-108.
ألكساندر غونارينكو ، أندريه دينيسوف ، سيرجي أليامكين ، إيفغيني تيرينتف.
عتبة قابلة للتعديل سريعة لقياس كمية الشبكة العصبية الموحدة ،
Arxiv: 1812.07872 ، 2018
إذا استخدمت Distiller لعملك ، يرجى استخدام الاقتباس التالي:
@article{nzmora2019distiller,
author = {Neta Zmora and
Guy Jacob and
Lev Zlotnik and
Bar Elharar and
Gal Novik},
title = {Neural Network Distiller: A Python Package For DNN Compression Research},
month = {October},
year = {2019},
url = {https://arxiv.org/abs/1910.12232}
}
تم تصميم أي عمل منشور على رأس عمل العديد من الأشخاص الآخرين ، ويخص الائتمان الكثير من الأشخاص الذين يدرجون هنا.
يتم إصدار Distiller كرمز مرجعي لأغراض البحث. إنه ليس منتجًا رسميًا Intel ، وقد لا يكون مستوى الجودة والدعم كما هو متوقع من منتج رسمي. من المقرر إضافتها الخوارزميات والميزات الإضافية إلى المكتبة. ردود الفعل والمساهمات من المجتمعات المفتوحة والمجتمعات البحثية هي أكثر من موضع ترحيب.