دستگاه های لبه اغلب حافظه یا قدرت محاسباتی محدودی دارند. بهینهسازیهای مختلفی را میتوان برای مدلها اعمال کرد تا بتوانند در این محدودیتها اجرا شوند. علاوه بر این، برخی بهینهسازیها امکان استفاده از سختافزار تخصصی را برای استنتاج تسریع میدهند.
LiteRT و جعبه ابزار بهینه سازی مدل TensorFlow ابزارهایی را برای به حداقل رساندن پیچیدگی بهینه سازی استنتاج فراهم می کنند.
توصیه می شود در طول فرآیند توسعه اپلیکیشن خود، بهینه سازی مدل را در نظر بگیرید. این سند به تشریح برخی از بهترین شیوهها برای بهینهسازی مدلهای TensorFlow برای استقرار در سختافزار لبه میپردازد.
چرا مدل ها باید بهینه شوند
چندین راه اصلی وجود دارد که بهینه سازی مدل می تواند به توسعه برنامه کمک کند.
کاهش سایز
برخی از اشکال بهینه سازی را می توان برای کاهش اندازه یک مدل استفاده کرد. مدل های کوچکتر دارای مزایای زیر هستند:
- اندازه ذخیره سازی کوچکتر: مدل های کوچکتر فضای ذخیره سازی کمتری را در دستگاه های کاربران شما اشغال می کنند. به عنوان مثال، یک برنامه اندرویدی با استفاده از مدل کوچکتر، فضای ذخیره سازی کمتری را در دستگاه تلفن همراه کاربر اشغال می کند.
- حجم دانلود کوچکتر: مدل های کوچکتر به زمان و پهنای باند کمتری برای دانلود در دستگاه های کاربران نیاز دارند.
- استفاده کمتر از حافظه: مدلهای کوچکتر هنگام اجرا از رم کمتری استفاده میکنند، که حافظه را برای استفاده از سایر بخشهای برنامه شما آزاد میکند و میتواند عملکرد و پایداری بهتری داشته باشد.
کوانتیزه کردن می تواند اندازه یک مدل را در همه این موارد کاهش دهد، که به طور بالقوه به قیمت کمی دقت تمام می شود. هرس و خوشه بندی می تواند اندازه یک مدل را برای دانلود با ایجاد آسان تر فشرده سازی آن کاهش دهد.
کاهش تاخیر
تأخیر مقدار زمانی است که برای اجرای یک استنتاج با یک مدل معین لازم است. برخی از اشکال بهینه سازی می توانند میزان محاسبات مورد نیاز برای اجرای استنتاج با استفاده از یک مدل را کاهش دهند و در نتیجه تأخیر کمتری ایجاد کنند. تأخیر همچنین می تواند بر مصرف برق تأثیر بگذارد.
در حال حاضر، کوانتیزه کردن را می توان برای کاهش تأخیر با ساده کردن محاسباتی که در طول استنتاج رخ می دهد، به طور بالقوه به قیمت کمی دقت استفاده کرد.
سازگاری با شتاب دهنده
برخی از شتابدهندههای سختافزاری، مانند Edge TPU ، با مدلهایی که بهدرستی بهینهسازی شدهاند، میتوانند استنتاج را بسیار سریع اجرا کنند.
به طور کلی، این نوع دستگاه ها نیاز به مدل هایی دارند که به روشی خاص کوانتیزه شوند. برای کسب اطلاعات بیشتر در مورد نیازهای هر یک از شتاب دهنده های سخت افزاری، به مستندات شتاب دهنده های سخت افزاری مراجعه کنید.
مبادلات
بهینه سازی ها به طور بالقوه می تواند منجر به تغییراتی در دقت مدل شود که باید در طول فرآیند توسعه برنامه در نظر گرفته شود.
تغییرات دقت بستگی به مدل فردی دارد که بهینه شده است و پیش بینی از قبل دشوار است. به طور کلی، مدل هایی که برای اندازه یا تأخیر بهینه شده اند، دقت کمی را از دست می دهند. بسته به برنامه شما، این ممکن است بر تجربه کاربران شما تأثیر بگذارد یا نداشته باشد. در موارد نادر، برخی از مدلها ممکن است در نتیجه فرآیند بهینهسازی دقت خاصی به دست آورند.
انواع بهینه سازی
LiteRT در حال حاضر از بهینه سازی از طریق کوانتیزاسیون، هرس و خوشه بندی پشتیبانی می کند.
اینها بخشی از جعبه ابزار بهینهسازی مدل TensorFlow هستند که منابعی را برای تکنیکهای بهینهسازی مدل ارائه میدهد که با TensorFlow Lite سازگار است.
کوانتیزاسیون
کوانتیزاسیون با کاهش دقت اعداد مورد استفاده برای نمایش پارامترهای یک مدل، که به طور پیش فرض اعداد ممیز شناور 32 بیتی هستند، کار می کند. این منجر به اندازه مدل کوچکتر و محاسبات سریعتر می شود.
انواع کوانتیزاسیون زیر در LiteRT موجود است:
تکنیک | الزامات داده | کاهش سایز | دقت | سخت افزار پشتیبانی شده |
---|---|---|---|---|
کوانتیزاسیون float16 پس از تمرین | داده ای وجود ندارد | تا 50% | از دست دادن دقت ناچیز | CPU، GPU |
کوانتیزاسیون محدوده دینامیکی پس از تمرین | داده ای وجود ندارد | تا 75% | کوچکترین افت دقت | CPU، GPU (اندروید) |
کوانتیزاسیون اعداد صحیح پس از آموزش | نمونه نماینده بدون برچسب | تا 75% | از دست دادن دقت کوچک | CPU، GPU (اندروید)، EdgeTPU |
آموزش آگاهی از کوانتیزاسیون | داده های آموزشی برچسب گذاری شده | تا 75% | کوچکترین افت دقت | CPU، GPU (اندروید)، EdgeTPU |
درخت تصمیم زیر به شما کمک میکند تا طرحهای کوانتیزاسیونی را که ممکن است بخواهید برای مدل خود استفاده کنید، به سادگی بر اساس اندازه و دقت مدل مورد انتظار انتخاب کنید.
در زیر نتایج تأخیر و دقت برای آموزش کوانتیزاسیون پس از آموزش و آگاهی از کمیت در چند مدل آمده است. همه اعداد تأخیر در دستگاههای 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 MobileBert F1 (تطابق دقیق) 88.81 (81.23) 2.08 (0) 88.73 (81.15)
هرس
هرس با حذف پارامترهایی در یک مدل کار می کند که تنها تأثیر جزئی بر پیش بینی های آن دارند. مدلهای هرسشده روی دیسک اندازه یکسانی دارند و تأخیر زمان اجرا یکسانی دارند، اما میتوانند به طور مؤثرتری فشرده شوند. این باعث می شود هرس یک تکنیک مفید برای کاهش حجم دانلود مدل باشد.
در آینده، LiteRT کاهش تأخیر را برای مدل های هرس شده ارائه خواهد کرد.
خوشه بندی
خوشهبندی با گروهبندی وزنهای هر لایه در یک مدل در تعداد خوشههای از پیش تعریفشده، سپس به اشتراک گذاشتن مقادیر مرکز برای وزنهای متعلق به هر خوشه انجام میشود. این باعث کاهش تعداد مقادیر وزن منحصر به فرد در یک مدل می شود و در نتیجه پیچیدگی آن را کاهش می دهد.
در نتیجه، مدلهای خوشهای را میتوان به طور مؤثرتری فشرده کرد و مزایای استقرار مشابه هرس را ارائه داد.
گردش کار توسعه
به عنوان نقطه شروع، بررسی کنید که آیا مدل های موجود در مدل های میزبانی شده می توانند برای برنامه شما کار کنند یا خیر. در غیر این صورت، توصیه می کنیم که کاربران با ابزار کوانتیزاسیون پس از آموزش شروع کنند، زیرا این ابزار به طور گسترده قابل اجرا است و به داده های آموزشی نیاز ندارد.
برای مواردی که اهداف دقت و تأخیر برآورده نمیشوند، یا پشتیبانی از شتابدهنده سختافزاری مهم است، آموزش آگاهی از کوانتیزاسیون گزینه بهتری است. تکنیک های بهینه سازی اضافی را در جعبه ابزار بهینه سازی مدل TensorFlow مشاهده کنید.
اگر میخواهید اندازه مدل خود را بیشتر کاهش دهید، میتوانید قبل از کمی کردن مدلهای خود ، هرس و/یا خوشهبندی را امتحان کنید.