DeepFreeze هي الأداة المستخدمة لنمذجة PPA وتوليد RTL لمشروع Fixynn . يتم تضمين البرامج النصية لإنشاء RTL من رسم بياني Tensorflow ، وتوليف/محاكاة هذا التصميم. للعمل مع رسم بياني غير tensorflow ، يجب عليك كتابة بنية بيانات الطبقة الخاصة بك لتتغذى على كائن Veriloggenerator (انظر نهاية gen_verliog.py
على سبيل المثال الاستخدام).
لمزيد من المعلومات حول Fixynn ، بما في ذلك وصف Deepfreeze في السياق ، راجع الورقة التالية: Fixynn: أجهزة فعالة لرؤية الكمبيوتر المحمول عبر التعلم النقل.
تم بناء هذه الأداة واختبارها باستخدام Python 2.7.15 و TensorFlow 1.10.1.
حزم بيثون المطلوبة هي numpy و tensorflow. للتثبيت:
pip install numpy tensorflow
cd deep_freeze/
bash run.sh
لإضافة نموذج لتوليد RTL أو النمذجة ، تحتاج إلى توفير:
mobilenet_base
في https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet.py)يتم تعريف كل طبقة في شبكة ثابتة إما عن طريق وحدة Verilog التي تم إنشاؤها أو إنشاء مثيل للوحدة المكتوبة بخط اليد. يتم إنشاء أي طبقة ذات متغيرات قابلة للتدريب ، ويتم إنشاء إنشاء جميع الآخرين. يتم ترميز المتغيرات القابلة للتدريب في RTL بدقة متغيرة ، ويتم تنفيذها في تصميم تم توليفها كقاعدين ثابتين. ما يمكن تنفيذه تقليديًا في وحدة MAC في تسريع قابل للبرمجة يتكون بدلاً من ذلك من قيود ثابتة تليها شجرة أفعى الحمل في تصميم الوزن الثابت. هذا فعال للغاية في الطاقة ، ولكنه يتطلب منطقة سيليكون كبيرة. تنمو منطقة السيليكون خطيًا تقريبًا مع وجود متغيرات ثابتة.
لتحقيق الاستخدام العالي لقواعد البيانات الثابتة ، نحن نطبق تمامًا طبقات خطوط الأنابيب معًا. هذا يتطلب التخزين المؤقت بين الطبقات. يمكننا تجنب تخزين تنشيط طبقة كاملة عن طريق استخدام مخزن مؤقت خط. توفر هذه المقالة شرحًا أساسيًا ما هي المخازن المؤقتة وكيفية استخدامها.
يتكون تنفيذنا لخط المخزن المؤقت من جزأين: مخزن المؤقت SRAM ، ومؤسسة تسجيل. يقوم SRAM بتخزين تنشيط أكبر عدد من الصفوف التي تحتاج إلى إرضاء في وقت واحد (يساوي ارتفاع النواة التالية). يتبع المخزن المؤقت للتسجيل المخزن المؤقت لـ SRAM ويخزن تنشيط MXN لزجاء MXN التالية. هذا يلغي القراءات غير الضرورية من المخزن المؤقت SRAM.
حجم SRAM المطلوب للطبقة هو IM_HEIGHT * IM_WIDTH * NCHANNELS * NBITS
. يتم تقسيم هذا إلى IM_HEIGHT * IM_WIDTH
من حجم NCHANNELS * NBITS
. حجم المخزن المؤقت للتسجيل هو K_HEIGHT * K_WIDTH * NCHANNELS * NBITS
.
يوفر إصلاح الطبقات في الأجهزة فرصة لمجموعة متنوعة من التحسينات العدوانية (كل من تحسينات الأجهزة والتحسينات في تصميم النماذج).
قد تؤدي التحسينات في بنية الشبكة إلى تحسينات في أجهزة PPA. على سبيل المثال ، تكون الطبقات القابلة للفصل عمقًا قادرة على تحقيق دقة مماثلة كطبقات تلغيرات تقليدية مع 8-9 × أوزان أقل. تعمل هذه الطبقات بشكل جيد للغاية في Fixynn بسبب انخفاض تكاليف المساحة. أي تقنيات أخرى تقلل من حجم النموذج أو تحسين الدقة يمكن أن تفيد Fixynn.
يمكّننا تثبيت الأوزان في السيليكون من الاستفادة من تعقيد قيم معينة. أوزان القيمة الصفر هي مثال على ذلك: يمكن إزالتها بشكل صريح من الأجهزة دون أي عام. هذا يجعل التقليم قويا وجذابا بشكل خاص.
أيضًا ، القيم ذات الأوزان المنخفضة ، أي عدد البتات غير الصفر في تمثيلها الثنائي ، رخيصة للتنفيذ في الأجهزة الثابتة. وذلك لأنه يتم تنفيذ العدادات الثابتة كسلسلة من التحولات ويضيف. أقل بتات غير صفرية من multiplicand الثابتة ، والتحولات أقل ويضيف المطلوبة. أداة التوليف قادرة أيضًا على الاستفادة من القيم ذات الوزن المرتفع بالنسبة إلى إجمالي عدد البتات المطلوبة لتمثيل الرقم. على سبيل المثال ، يمكن تنفيذ قياسي x * 239
(وزن هامينغ = 7 ، nbits = 8) كـ x << 8 - x << 5
في الأجهزة.
بالنسبة للصور عالية الدقة ، يتطلب كل صف من المخزن المؤقت لخط مساحة كبيرة من SRAM. يمكننا القضاء على بعض من هذا SRAM عن طريق تخزين الكسور فقط من الخط في وقت واحد ، وجعل عدة تمريرات أسفل الصورة. يأتي ذلك على حساب زيادة أجهزة التحكم وبعض الحساب المتكرر للتنشيط على حدود نطاق المخزن المؤقت للخط. هذا الحساب المتكرر يتحمل الحد الأدنى من تكلفة الطاقة والكمون لأن الأجهزة ذات الوزن الثابت فعالة للغاية.
لا يتطلب أي kernel 1x1 المخزن المؤقت الذي يسبقه لأنه يمكن أن يستهلك مباشرة التنشيطات التي تم إنشاؤها بواسطة الطبقة السابقة. ينتج عن هذا في طبقات قابلة للفصل بعدوى لا تتطلب أي تخزين مؤقت بين الالتصاق بعدوى وعلى اتجاهين. لذلك قد ندمج هذين العمليتين في كتلة واحدة من القبور.
تعد طبقات Conv2D فعالة في هذا التصميم لأنها تظهر إعادة استخدام عالية الوزن ، مما يؤدي إلى انخفاض تكلفة المساحة نسبيًا. طبقات كثيفة لا تظهر أي إعادة استخدام للوزن. لذلك ، تؤدي الطبقات الكثيفة إلى استخدام غير فعال للمنطقة. بالإضافة إلى ذلك ، لا تسمح الطبقات الكثيفة بالتخزين المؤقت للخط ، مما يؤدي إلى مناطق تسجيل كبيرة جدًا.
يستكشف عملنا لـ SYSML 2019 (انظر sysml_2019/
) مستخلصات ميزة CNN التي تم تثبيتها بالكامل. PPA لهذا الاستخراج الميزة رائع لأنه يحتوي فقط على طبقات Conv2D. يجب أن تدفع الشبكات الكاملة التي تم تنفيذها في الأجهزة الثابتة تكلفة المنطقة التي تتطلبها الطبقات الكثيفة. قد يكون هذا مقبولًا لنماذج إنترنت الأشياء الصغيرة.
عادةً ما تظهر CNNs السلوك حيث تحتوي الطبقات الأمامية على العديد من وحدات البكسل الإدخال وعدد صغير من النواة ، في حين أن الطبقات الخلفية تحتوي على عدد أقل من وحدات البكسل وعدد كبير من النواة. ينتج عن هذا أن منطقة SRAM تتركز نحو مقدمة خط أنابيب الشبكة ، بينما تتركز المساحة التوافقية نحو الجزء الخلفي من خط أنابيب الشبكة.
أي طبقة ذات خطوة أكبر من 1 × 1 تنتج أقل من بكسل تنشيط مما تستهلكها لكل صورة. على سبيل المثال ، تنتج طبقة pool2d التي تخطو 2 × 2 على صورة 100 × 100 صورة 50 × 50 ، وهي انخفاض 4x في وحدات البكسل. ينتج عن هذا الطبقات التالية التي تحتوي على 1/4x عدد الدورات النشطة (يتطلب كل بكسل مخرج لكل طبقة دورة واحدة). هذا يعني أن خطوط أنابيب الشبكات العميقة للغاية مع الكثير من أخذ العينات السفلية ستكون مختلطة إلى حد كبير من قبل الطبقات الأمامية ، مما يؤدي إلى انخفاض استخدام طبقات الواجهة الخلفية.
تساعدنا هذه البصيرة على تحديد النماذج التي ستترجم جيدًا إلى الأجهزة. تؤدي بعض البنى المبكر إلى الانخفاض المبكر من التنشيطات لتقليل الكمون على وحدة المعالجة المركزية عن طريق تقليل إجمالي عدد أجهزة Macs (بتكلفة حجم النموذج) (انظر FD-Mobilenet). تريد النماذج التي تم تنفيذها في Fixynn جعل المقايضة المعاكسة: لتقليل عدد المعلمات بتكلفة الحساب (لأن المنطقة هي القيد الرئيسي للأداء في نظام العالم الحقيقي).
إن إصلاح جزء من CNN في الأجهزة يجعل من الصعب إعادة استخدام هذه الأجهزة لغرض آخر. يستكشف عملنا لـ SYSML 2019 هذه المفاضلة ويوضح أن بعض الأجهزة الثابتة قادرة على التعميم على العديد من النماذج المختلفة. سيركز العمل المستقبلي على زيادة تعميم الأجهزة الثابتة عن طريق إضافة بعض القابلية للبرمجة (مع الاستمرار في استفادة من كفاءة الأجهزة ذات الوزن الثابت).
SAME
عن طريق تعديل sram_controller.sv
flatten.sv
لتمكين شبكات تصنيف الصور التي تم تثبيتها بالكامل عن طريق تسطيح صورة من طبقات ثنائية الأبعاد إلى طبقات كثيفة.ker_size
للبيانات إلى SRAM.تم تقديم الأعمال المنشورة التي استخدمت هذه الأداة في SYSML 2019 وفي ورشة عمل Neurips 2018 على الجهاز. يمكن العثور على الورقة الكاملة على Arxiv في Fixynn: أجهزة فعالة لرؤية الكمبيوتر المحمول عبر التعلم النقل.
إذا وجدت هذا Deepfreeze مفيدًا لبحثك ، فيرجى استخدام bibtex التالي للاستشهاد بنا ،
@article{fixynn,
title={FixyNN: Efficient Hardware for Mobile Computer Vision via Transfer Learning},
author={Whatmough, Paul and Zhou, Chuteng and Hansen, Patrick and Venkataramanaiah, Shreyas Kolala and Seo, Jae-Sun and Mattina, Matthew},
journal={SysML},
year={2019}
}
باتريك هانسن ، مختبر أبحاث ARM ML ، بوسطن ، ماساتشوستس
شرياس كولالا فينكاتارامانا ، جامعة ولاية أريزونا
Paul Whatmough ، Arm ML Research Lab ، Boston ، MA
تم ترخيص هذا المشروع بموجب ترخيص معهد ماساتشوستس للتكنولوجيا - راجع ملف الترخيص للحصول على التفاصيل.