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

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

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

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

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

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

عملگرهای TensorFlow

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

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

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

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

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

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

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

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

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

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

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

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

عملیات تجربی

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

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