سازگاری اپراتور TensorFlow Lite و TensorFlow

اپراتورهای یادگیری ماشینی (ML) که در مدل خود استفاده می‌کنید می‌توانند بر روند تبدیل مدل TensorFlow به قالب TensorFlow Lite تأثیر بگذارند. مبدل TensorFlow Lite از تعداد محدودی از عملیات TensorFlow استفاده شده در مدل‌های استنتاج رایج پشتیبانی می‌کند، به این معنی که هر مدلی مستقیماً قابل تبدیل نیست. ابزار مبدل به شما امکان می دهد اپراتورهای اضافی را اضافه کنید، اما برای تبدیل یک مدل به این روش نیز باید محیط اجرای TensorFlow Lite را که برای اجرای مدل خود استفاده می کنید، تغییر دهید، که می تواند توانایی شما را در استفاده از گزینه های استقرار زمان اجرا استاندارد، مانند خدمات Google Play محدود کند.

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

حتی برای عملیات پشتیبانی شده، گاهی اوقات الگوهای استفاده خاصی به دلایل عملکرد انتظار می رود. بهترین راه برای درک نحوه ساخت یک مدل TensorFlow که می تواند با TensorFlow Lite استفاده شود، بررسی دقیق نحوه تبدیل و بهینه سازی عملیات، همراه با محدودیت های اعمال شده توسط این فرآیند است.

اپراتورهای پشتیبانی شده

عملگرهای داخلی TensorFlow Lite زیرمجموعه ای از عملگرهایی هستند که بخشی از کتابخانه هسته TensorFlow هستند. مدل TensorFlow شما همچنین ممکن است شامل اپراتورهای سفارشی به شکل عملگرهای ترکیبی یا اپراتورهای جدید تعریف شده توسط شما باشد. نمودار زیر روابط بین این عملگرها را نشان می دهد.

عملگرهای TensorFlow

از این طیف از اپراتورهای مدل ML، 3 نوع مدل وجود دارد که توسط فرآیند تبدیل پشتیبانی می شوند:

  1. مدل هایی که تنها دارای اپراتور داخلی TensorFlow Lite هستند. ( توصیه شده )
  2. با عملگرهای داخلی مدل کنید و اپراتورهای هسته TensorFlow را انتخاب کنید.
  3. مدل هایی با عملگرهای داخلی، اپراتورهای هسته TensorFlow و/یا عملگرهای سفارشی.

اگر مدل شما فقط شامل عملیاتی است که به طور بومی توسط TensorFlow Lite پشتیبانی می شود، برای تبدیل آن به هیچ پرچم اضافی نیاز ندارید. این مسیر پیشنهادی است زیرا این نوع مدل به راحتی تبدیل می‌شود و بهینه‌سازی و اجرا با استفاده از زمان اجرا پیش‌فرض TensorFlow Lite ساده‌تر است. همچنین گزینه‌های استقرار بیشتری برای مدل خود مانند خدمات Google Play دارید. می توانید با راهنمای مبدل TensorFlow Lite شروع کنید. برای مشاهده لیستی از اپراتورهای داخلی به صفحه TensorFlow Lite Ops مراجعه کنید.

اگر نیاز دارید که عملیات انتخابی TensorFlow را از کتابخانه هسته اضافه کنید، باید آن را در هنگام تبدیل مشخص کنید و مطمئن شوید که زمان اجرا شما شامل این عملیات است. برای جزئیات بیشتر به مبحث انتخاب عملگرهای TensorFlow مراجعه کنید.

در صورت امکان، از آخرین گزینه گنجاندن اپراتورهای سفارشی در مدل تبدیل شده خود اجتناب کنید. عملگرهای سفارشی یا عملگرهایی هستند که با ترکیب چند عملگر اصلی اولیه TensorFlow یا تعریف یک عملگر کاملا جدید ایجاد می شوند. هنگامی که اپراتورهای سفارشی تبدیل می شوند، می توانند اندازه مدل کلی را با ایجاد وابستگی در خارج از کتابخانه داخلی TensorFlow Lite افزایش دهند. عملیات سفارشی، اگر به طور خاص برای استقرار تلفن همراه یا دستگاه ایجاد نشده باشد، می تواند در هنگام استقرار در دستگاه های دارای منابع محدود در مقایسه با محیط سرور، عملکرد بدتری داشته باشد. در نهایت، درست مانند انتخاب اپراتورهای اصلی TensorFlow، اپراتورهای سفارشی از شما می‌خواهند که محیط زمان اجرا مدل را تغییر دهید که شما را از استفاده از خدمات استاندارد زمان اجرا مانند سرویس‌های Google Play محدود می‌کند.

انواع پشتیبانی شده

اکثر عملیات TensorFlow Lite هم استنتاج نقطه شناور ( float32 ) و هم استنتاج کوانتیزه ( uint8 ، int8 ) را هدف قرار می دهند، اما بسیاری از عملیات ها هنوز برای انواع دیگری مانند tf.float16 و رشته ها این کار را انجام نمی دهند.

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

تبدیل مستقیم به جلو، تا شدن و ادغام ثابت

تعدادی از عملیات TensorFlow را می توان توسط TensorFlow Lite پردازش کرد، حتی اگر هیچ معادل مستقیمی نداشته باشند. این مورد برای عملیات‌هایی است که می‌توانند به سادگی از نمودار حذف شوند ( tf.identity )، با تانسورها ( tf.placeholder ) جایگزین شوند یا در عملیات پیچیده‌تر ترکیب شوند ( tf.nn.bias_add ). حتی برخی از عملیات پشتیبانی شده ممکن است گاهی اوقات از طریق یکی از این فرآیندها حذف شوند.

در اینجا یک لیست غیر جامع از عملیات TensorFlow است که معمولاً از نمودار حذف می شوند:

عملیات تجربی

عملیات TensorFlow Lite زیر وجود دارد، اما برای مدل‌های سفارشی آماده نیست:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF