بهینه سازی مدل

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

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
جدول 1 مزایای کوانتیزه کردن مدل برای مدل های انتخابی CNN

کوانتیزاسیون کامل اعداد صحیح با فعال سازی 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)
جدول 2 مزایای کوانتیزه کردن مدل با فعال سازی int16

هرس

هرس با حذف پارامترهایی در یک مدل کار می کند که تنها تأثیر جزئی بر پیش بینی های آن دارند. مدل‌های هرس‌شده روی دیسک اندازه یکسانی دارند و تأخیر زمان اجرا یکسانی دارند، اما می‌توانند به طور مؤثرتری فشرده شوند. این باعث می شود هرس یک تکنیک مفید برای کاهش حجم دانلود مدل باشد.

در آینده، TensorFlow Lite کاهش تأخیر را برای مدل‌های هرس شده فراهم می‌کند.

خوشه بندی

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

در نتیجه، مدل‌های خوشه‌ای را می‌توان به طور مؤثرتری فشرده کرد و مزایای استقرار مشابه هرس را ارائه داد.

گردش کار توسعه

به عنوان نقطه شروع، بررسی کنید که آیا مدل های موجود در مدل های میزبانی شده می توانند برای برنامه شما کار کنند یا خیر. در غیر این صورت، توصیه می کنیم که کاربران با ابزار کوانتیزاسیون پس از آموزش شروع کنند، زیرا این ابزار به طور گسترده قابل اجرا است و به داده های آموزشی نیاز ندارد.

برای مواردی که اهداف دقت و تأخیر برآورده نمی‌شوند، یا پشتیبانی از شتاب‌دهنده سخت‌افزاری مهم است، آموزش آگاهی از کوانتیزاسیون گزینه بهتری است. تکنیک های بهینه سازی اضافی را در جعبه ابزار بهینه سازی مدل TensorFlow مشاهده کنید.

اگر می‌خواهید اندازه مدل خود را بیشتر کاهش دهید، می‌توانید قبل از کمی کردن مدل‌های خود ، هرس و/یا خوشه‌بندی را امتحان کنید.