دستگاه های لبه اغلب حافظه یا قدرت محاسباتی محدودی دارند. بهینهسازیهای مختلفی را میتوان برای مدلها اعمال کرد تا بتوان آنها را در این محدودیتها اجرا کرد. علاوه بر این، برخی بهینهسازیها امکان استفاده از سختافزار تخصصی برای استنتاج سریع را فراهم میکنند.
TensorFlow Lite و TensorFlow Model Optimization Toolkit ابزارهایی را برای به حداقل رساندن پیچیدگی بهینه سازی استنتاج ارائه می کنند.
توصیه می شود در طول فرآیند توسعه اپلیکیشن خود، بهینه سازی مدل را در نظر بگیرید. این سند برخی از بهترین شیوهها را برای بهینهسازی مدلهای TensorFlow برای استقرار سختافزار لبه نشان میدهد.
چرا مدل ها باید بهینه شوند
چندین راه اصلی وجود دارد که بهینه سازی مدل می تواند به توسعه برنامه کمک کند.
کاهش سایز
برخی از اشکال بهینه سازی را می توان برای کاهش اندازه یک مدل استفاده کرد. مدل های کوچکتر دارای مزایای زیر هستند:
- اندازه ذخیره سازی کوچکتر: مدل های کوچکتر فضای ذخیره سازی کمتری را در دستگاه های کاربران شما اشغال می کنند. به عنوان مثال، یک برنامه اندرویدی با استفاده از مدل کوچکتر، فضای ذخیره سازی کمتری را در دستگاه تلفن همراه کاربر اشغال می کند.
- حجم دانلود کوچکتر: مدل های کوچکتر به زمان و پهنای باند کمتری برای دانلود در دستگاه های کاربران نیاز دارند.
- استفاده کمتر از حافظه: مدلهای کوچکتر هنگام اجرا از رم کمتری استفاده میکنند، که حافظه را برای استفاده از سایر قسمتهای برنامه شما آزاد میکند و میتواند به عملکرد و پایداری بهتر منجر شود.
کوانتیزه کردن می تواند اندازه یک مدل را در همه این موارد کاهش دهد، به طور بالقوه به قیمت کمی دقت. هرس و خوشهبندی میتواند اندازه یک مدل را برای دانلود با آسانتر کردن آن کاهش دهد.
کاهش تاخیر
تأخیر مقدار زمانی است که برای اجرای یک استنتاج با یک مدل معین لازم است. برخی از اشکال بهینه سازی می توانند میزان محاسبات مورد نیاز برای اجرای استنتاج با استفاده از یک مدل را کاهش دهند و در نتیجه تاخیر کمتری ایجاد کنند. تأخیر همچنین می تواند بر مصرف برق تأثیر بگذارد.
در حال حاضر، کوانتیزهسازی میتواند برای کاهش تأخیر با سادهسازی محاسباتی که در طول استنتاج اتفاق میافتد، بهطور بالقوه به قیمت کمی دقت استفاده شود.
سازگاری با شتاب دهنده
برخی از شتابدهندههای سختافزاری، مانند Edge TPU ، با مدلهایی که بهدرستی بهینهسازی شدهاند، میتوانند استنتاج را بسیار سریع اجرا کنند.
به طور کلی، این نوع دستگاه ها نیاز به مدل هایی دارند که به روشی خاص کوانتیزه شوند. برای کسب اطلاعات بیشتر در مورد نیازهای هر یک از شتاب دهنده های سخت افزاری، به مستندات شتاب دهنده های سخت افزاری مراجعه کنید.
مبادلات
بهینه سازی ها به طور بالقوه می تواند منجر به تغییراتی در دقت مدل شود که باید در طول فرآیند توسعه برنامه در نظر گرفته شود.
تغییرات دقت بستگی به مدل فردی دارد که بهینه شده است و پیشبینی از قبل دشوار است. به طور کلی، مدل هایی که برای اندازه یا تأخیر بهینه شده اند، دقت کمی را از دست می دهند. بسته به برنامه شما، این ممکن است بر تجربه کاربران شما تأثیر بگذارد یا نداشته باشد. در موارد نادر، برخی از مدلها ممکن است در نتیجه فرآیند بهینهسازی دقت خاصی به دست آورند.
انواع بهینه سازی
TensorFlow Lite در حال حاضر از بهینه سازی از طریق کوانتیزاسیون، هرس و خوشه بندی پشتیبانی می کند.
اینها بخشی از جعبه ابزار بهینه سازی مدل TensorFlow هستند که منابعی را برای تکنیک های بهینه سازی مدل ارائه می دهد که با TensorFlow Lite سازگار است.
کوانتیزاسیون
کوانتیزاسیون با کاهش دقت اعداد مورد استفاده برای نمایش پارامترهای یک مدل، که به طور پیش فرض اعداد ممیز شناور 32 بیتی هستند، کار می کند. این منجر به اندازه مدل کوچکتر و محاسبات سریعتر می شود.
انواع کوانتیزاسیون زیر در TensorFlow Lite موجود است:
تکنیک | الزامات داده | کاهش سایز | دقت | سخت افزار پشتیبانی شده |
---|---|---|---|---|
کوانتیزاسیون float16 پس از تمرین | اطلاعاتی وجود ندارد | حداکثر تا 50٪ | از دست دادن دقت ناچیز | CPU، GPU |
کوانتیزاسیون محدوده دینامیکی پس از آموزش | اطلاعاتی وجود ندارد | تا 75% | کوچکترین افت دقت | CPU، GPU (اندروید) |
کوانتیزاسیون اعداد صحیح پس از آموزش | نمونه نماینده بدون برچسب | تا 75% | از دست دادن دقت کوچک | CPU، GPU (اندروید)، EdgeTPU، شش گوش DSP |
آموزش آگاهی از کوانتیزاسیون | داده های آموزشی برچسب گذاری شده | تا 75% | کوچکترین افت دقت | CPU، GPU (اندروید)، EdgeTPU، شش گوش DSP |
درخت تصمیم زیر به شما کمک میکند تا طرحهای کمیسازی را که ممکن است بخواهید برای مدل خود استفاده کنید، به سادگی بر اساس اندازه و دقت مدل مورد انتظار انتخاب کنید.
در زیر نتایج تأخیر و دقت برای آموزش کوانتیزاسیون پس از آموزش و آگاهی از کمیت در چند مدل آمده است. همه اعداد تأخیر در دستگاههای Pixel 2 با استفاده از یک CPU هسته بزرگ اندازهگیری میشوند. همانطور که جعبه ابزار بهبود می یابد، اعداد در اینجا نیز بهبود می یابند:
مدل | دقت برتر 1 (اصلی) | دقت برتر 1 (کوانتیزه شده پس از آموزش) | دقت برتر 1 (آموزش کمی سازی آگاهانه) | تأخیر (اصلی) (ms) | تأخیر (کوانتیزه شده پس از آموزش) (ms) | تأخیر (آموزش کمی سازی آگاهانه) (ms) | اندازه (اصلی) (MB) | اندازه (بهینه شده) (MB) |
---|---|---|---|---|---|---|---|---|
Mobilenet-v1-1-224 | 0.709 | 0.657 | 0.70 | 124 | 112 | 64 | 16.9 | 4.3 |
Mobilenet-v2-1-224 | 0.719 | 0.637 | 0.709 | 89 | 98 | 54 | 14 | 3.6 |
Inception_v3 | 0.78 | 0.772 | 0.775 | 1130 | 845 | 543 | 95.7 | 23.9 |
Resnet_v2_101 | 0.770 | 0.768 | N/A | 3973 | 2868 | N/A | 178.3 | 44.9 |
کوانتیزاسیون کامل اعداد صحیح با فعال سازی int16 و وزن int8
کوانتیزاسیون با فعالسازیهای int16 یک طرح کوانتیزهسازی کامل اعداد صحیح با فعالسازی در int16 و وزنها در int8 است. این حالت میتواند دقت مدل کوانتیزهشده را در مقایسه با طرح کوانتیزهسازی کامل اعداد صحیح با هر دو فعالسازی و وزن در int8 با حفظ اندازه مدل مشابه بهبود بخشد. زمانی توصیه میشود که فعالسازیها به کوانتیزاسیون حساس باشند.
توجه: در حال حاضر تنها پیادهسازیهای هسته مرجع غیربهینهشده در TFLite برای این طرح کوانتیزهسازی در دسترس هستند، بنابراین به طور پیشفرض عملکرد در مقایسه با هستههای int8 کند خواهد بود. مزایای کامل این حالت در حال حاضر از طریق سخت افزار تخصصی یا نرم افزار سفارشی قابل دسترسی است.
در زیر نتایج دقت برخی از مدل هایی که از این حالت بهره می برند، آورده شده است. مدل نوع متریک دقت دقت (فعالسازیهای float32) دقت (فعالسازیهای int8) دقت (فعالسازیهای int16) Wav2 letter WER 6.7٪ 7.7٪ 7.2٪ DeepSpeech 0.5.1 (بازشده) CER 6.13٪ 43.67٪ 6.52٪ YoloV3 mAP(IOU=0.5) 0.577 0.563 0.574 MobileNetV1 بالا-1 دقت 0.7062 0.694 0.6936 MobileNetV2 بالا-1 دقت 0.718 0.7126 0.7137 موبایل برت F1 (تطابق دقیق) 88.81 (81.23) 2.08 (0) 88.73 (81.15)
هرس
هرس با حذف پارامترهایی در یک مدل کار می کند که تنها تأثیر جزئی بر پیش بینی های آن دارند. مدلهای هرس شده روی دیسک اندازه یکسانی دارند و تأخیر زمان اجرا یکسانی دارند، اما میتوان آنها را بهطور مؤثرتری فشرده کرد. این باعث می شود هرس یک تکنیک مفید برای کاهش حجم دانلود مدل باشد.
در آینده، TensorFlow Lite کاهش تأخیر را برای مدلهای هرس شده فراهم میکند.
خوشه بندی
خوشهبندی با گروهبندی وزنهای هر لایه در یک مدل به تعداد خوشههای از پیش تعریفشده، و سپس به اشتراک گذاشتن مقادیر مرکز برای وزنهای متعلق به هر خوشه انجام میشود. این باعث کاهش تعداد مقادیر وزن منحصر به فرد در یک مدل می شود و در نتیجه پیچیدگی آن را کاهش می دهد.
در نتیجه، مدلهای خوشهای را میتوان به طور مؤثرتری فشرده کرد و مزایای استقرار مشابه هرس را ارائه داد.
گردش کار توسعه
به عنوان نقطه شروع، بررسی کنید که آیا مدل های موجود در مدل های میزبانی شده می توانند برای برنامه شما کار کنند یا خیر. در غیر این صورت، توصیه می کنیم که کاربران با ابزار کوانتیزاسیون پس از آموزش شروع کنند، زیرا این ابزار به طور گسترده قابل اجرا است و به داده های آموزشی نیاز ندارد.
برای مواردی که اهداف دقت و تأخیر برآورده نمیشوند، یا پشتیبانی از شتابدهنده سختافزار مهم است، آموزش آگاهی از کوانتیزاسیون گزینه بهتری است. تکنیک های بهینه سازی اضافی را در جعبه ابزار بهینه سازی مدل TensorFlow مشاهده کنید.
اگر میخواهید اندازه مدل خود را بیشتر کاهش دهید، میتوانید قبل از کمی کردن مدلهایتان، هرس و/یا خوشهبندی را امتحان کنید.