Tec Nikan
English
تماس با ما
All posts

جا دادن یک شبکه عصبی در میکروکنترلر؛ کوانتیزه‌سازی، هرس و تقطیر

سه راه برای کوچک کردن مدل تا جایی که در چند کیلوبایت حافظه اجرا شود، هزینه هر کدام از نظر دقت، و اینکه چطور بفهمیم واقعاً با کدام محدودیت روبه‌رو هستیم.

یادگیری ماشین کوچککوانتیزه سازیهرستقطیرهوش مصنوعی نهفته

مدلی که روی یک ایستگاه کاری راحت اجرا می‌شود و مدلی که روی میکروکنترلر اجرا می‌شود تقریباً سه مرتبه بزرگی با هم فاصله دارند. مقصد چند کیلوبایت حافظه دارد نه چند گیگابایت، سیستم‌عاملی ندارد و بودجه توانش با میلی‌وات سنجیده می‌شود. رسیدن از یکی به دیگری یک تکنیک واحد نیست بلکه انتخابی میان سه راه است، و انتخاب نادرست هفته‌ها را هدر می‌دهد.

کوانتیزه‌سازی نخستین و معمولاً بزرگ‌ترین برد است. وزن‌هایی که با ممیز شناور ۳۲ بیتی آموزش دیده‌اند به‌جای آن در قالب صحیح ۸ بیتی ذخیره و محاسبه می‌شوند؛ این کار حافظه را یک‌چهارم می‌کند و اغلب سرعت استنتاج را بیش از آن بالا می‌برد، چون محاسبات صحیح همان چیزی است که این هسته‌ها در آن خوب‌اند. کوانتیزه‌سازی پس از آموزش یک بعدازظهر وقت می‌برد و معمولاً مقدار کمی دقت هزینه دارد. آنجا که این هزینه زیاد باشد، آموزش آگاه به کوانتیزه‌سازی — که مدل با گرد کردن اعمال‌شده یاد می‌گیرد — بیشتر افت را جبران می‌کند به قیمت آموزش دوباره.

هرس به محور دیگری حمله می‌کند: وزن‌ها یا کانال‌هایی را که سهم اندکی دارند حذف می‌کند. هرس بی‌ساختار وزن‌های منفرد را صفر می‌کند و ارقام چشمگیری از تنکی می‌سازد که روی میکروکنترلر هیچ سودی ندارد، چون ضرب ماتریسی متراکمی که در آن صفر هست دقیقاً همان‌قدر طول می‌کشد. هرس ساختاریافته فیلترها یا کانال‌های کامل را برمی‌دارد، که مدل را واقعاً کوچک‌تر و واقعاً سریع‌تر می‌کند، و تنها گونه‌ای است که ارزش دنبال کردن دارد مگر آنکه زمان اجرای شما به‌طور خاص از هسته‌های تنک بهره ببرد.

تقطیر کم‌مکانیکی‌ترین این سه و اغلب مؤثرترین است. به‌جای کوچک کردن مدل آموزش‌دیده، مدلی کوچک را آموزش می‌دهید تا از مدلی بزرگ تقلید کند و از توزیع خروجی آن بیاموزد نه فقط از برچسب‌های قطعی. مدل کوچک اغلب بهتر از همان معماری می‌شود که مستقیماً روی داده آموزش دیده باشد، چون خروجی‌های نرم مدل بزرگ اطلاعاتی درباره میزان اشتباه‌گرفتنی بودن کلاس‌ها حمل می‌کنند که برچسب‌ها ندارند. هزینه‌اش این است که به مدل بزرگ و یک خط لوله آموزش نیاز دارید، پس یک پروژه است نه یک گام.

اینکه سراغ کدام بروید به این بستگی دارد که به کدام مرز خورده‌اید، و این مرزها متفاوت‌اند. اگر مدل در حافظه فلش جا نمی‌شود، کوانتیزه‌سازی مستقیماً به ذخیره‌سازی می‌پردازد. اگر جا می‌شود اما استنتاج کند است، هرس ساختاریافته کار را کم می‌کند. اگر جا می‌شود و سریع اجرا می‌شود اما در آن اندازه به‌قدر کافی دقیق نیست، هیچ تکنیک فشرده‌سازی کمکی نمی‌کند؛ آنجا جای تقطیر یا معماری متفاوت است. تیم‌ها معمولاً هر سه را پشت سر هم اعمال می‌کنند بی‌آنکه بررسی کنند مسئله‌شان به کدام نیاز دارد، و بعد نمی‌توانند توضیح دهند کدام تغییر دقت از دست رفته را باعث شده.

یک اندازه‌گیری معمولاً کل برنامه را بازچینی می‌کند: حافظه‌ای را که مدل هنگام اجرا نیاز دارد پروفایل کنید، نه فقط اندازه روی دیسک را. بافرهای فعال‌سازی میانی اغلب غالب می‌شوند و مدلی که وزن‌هایش راحت جا می‌شود ممکن است اجرا نشود چون دو لایه باید هم‌زمان در حافظه بمانند.

Want to work with us?

Tell us what you're building and we'll help you scope the first deployment.