اختيار عوامل التشغيل TensorFlow

بما أنّ مكتبة المشغّلات المدمجة TensorFlow Lite لا تتوافق إلا مع عدد محدود من عوامل التشغيل TensorFlow، لا يمكن تحويل كل النماذج. لمعرفة التفاصيل، يُرجى الرجوع إلى مقالة التوافق مع المشغِّل.

للسماح بالإحالات الناجحة، يمكن للمستخدمين تفعيل استخدام عمليات معيّنة من TensorFlow في نموذج TensorFlow Lite. مع ذلك، يتطلب تشغيل نماذج TensorFlow Lite باستخدام عمليات TensorFlow تنفيذ عمليات تحويل البيانات في بيئة تشغيل TensorFlow الأساسية، ما يزيد من الحجم الثنائي لأداة الترجمة من TensorFlow Lite. على Android، يمكنك تجنُّب حدوث ذلك من خلال إنشاء عمليات Tensorflow فقط المطلوبة. لمعرفة التفاصيل، يمكنك الرجوع إلى مقالة تقليل الحجم الثنائي.

يوضّح هذا المستند كيفية تحويل وrun نموذج TensorFlow Lite الذي يحتوي على عمليات TensorFlow على منصة من اختيارك. وتناقش أيضًا مقاييس الأداء والحجم والقيود المعروفة.

تحويل نموذج

يوضح المثال التالي كيفية إنشاء نموذج TensorFlow Lite باستخدام عمليات TensorFlow المحددة.

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

تنفيذ الاستنتاج

عند استخدام نموذج TensorFlow Lite الذي تم تحويله مع دعم عمليات محدَّدة من TensorFlow، على العميل أيضًا استخدام بيئة تشغيل TensorFlow Lite تتضمّن المكتبة اللازمة من عمليات TensorFlow.

الاقتراحات المطبّقة تلقائيًا على أجهزة Android

لتقليل حجم البرنامج الثنائي، يُرجى إنشاء ملفات AAR مخصّصة وفقًا للإرشادات الواردة في القسم التالي. إذا لم يكن حجم البرنامج الثنائي مصدر قلق كبير، ننصحك باستخدام الخوارزمية القابلة للتوسّع (AAR) التي تم إنشاؤها مسبقًا مع عمليات TensorFlow والتي تستضيفها MavenCentral.

يمكنك تحديد ذلك في تبعيات build.gradle من خلال إضافته إلى جانب TensorFlow Lite AAR العادية على النحو التالي:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}

لاستخدام اللقطات الليلية، تأكَّد من إضافة مستودع لقطات Sonatype.

بعد إضافة التبعية، من المفترض أن يتم تثبيت التفويض اللازم للتعامل مع عمليات TensorFlow للرسم البياني تلقائيًا في الرسوم البيانية التي تتطلب ذلك.

ملاحظة: تبعية عمليات TensorFlow كبيرة نسبيًا، لذلك قد تحتاج على الأرجح إلى فلترة واجهات ABI غير الضرورية في ملف .gradle من خلال إعداد abiFilters.

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

إنشاء ميزة "الاقتراحات المطبّقة تلقائيًا" على Android

لتقليل الحجم الثنائي أو الحالات المتقدمة الأخرى، يمكنك أيضًا إنشاء المكتبة يدويًا. بافتراض أنّ بيئة إصدار TensorFlow Lite صالحة، يمكنك إنشاء Android AAR على أجهزة Android باستخدام عمليات TensorFlow محدّدة على النحو التالي:

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

سيؤدي هذا الإجراء إلى إنشاء ملف AAR bazel-bin/tmp/tensorflow-lite.aar للعمليات المضمَّنة والمخصّصة في TensorFlow Lite، وإنشاء ملف AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar لعمليات TensorFlow. إذا لم تكن لديك بيئة تصميم عمل، يمكنك أيضًا إنشاء الملفات أعلاه باستخدام Docker.

يمكنك بعد ذلك استيراد ملفات AAR مباشرةً إلى مشروعك، أو نشر ملفات AAR المخصّصة في مستودع Maven المحلي:

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar

أخيرًا، في build.gradle لتطبيقك، تأكَّد من أنّ التبعية mavenLocal() واستبدِل الاعتمادية العادية TensorFlow Lite بالاعتمادية التي تتوافق مع عمليات TensorFlow محدّدة:

allprojects {
    repositories {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'https://oss.sonatype.org/content/repositories/snapshots'
        }
        mavenLocal()
    }
}

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.1.100'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

iOS

استخدام CocoaPods

يوفّر TensorFlow Lite إعدادًا مسبقًا لمهام TF في CocoaPods لـ arm64، والتي يمكنك الاعتماد عليها إلى جانب TensorFlowLiteSwift أو TensorFlowLiteObjC CocoaPods.

ملاحظة: إذا كنت بحاجة إلى استخدام عمليات TF محددة في مُحاكي x86_64، يمكنك إنشاء إطار عمل العمليات المحدّد بنفسك. راجع قسم استخدام Bazel + Xcode للحصول على مزيد من التفاصيل.

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

بعد تشغيل pod install، يجب توفير علامة ربط إضافية لفرض تحميل إطار عمل عمليات TF المحدد في مشروعك. في مشروع Xcode، انتقِل إلى Build Settings -> Other Linker Flags، وأضِف ما يلي:

بالنسبة إلى الإصدارات >= 2.9.0:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

بالنسبة إلى الإصدارات < 2.9.0:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

من المفترض أن يصبح بإمكانك بعد ذلك تشغيل أي نماذج تم تحويلها باستخدام SELECT_TF_OPS في تطبيق iOS. على سبيل المثال، يمكنك تعديل تطبيق "تصنيف الصور" على نظام التشغيل iOS لاختبار ميزة عمليات تنسيق TF.

  • استبدِل ملف النموذج بالملف المحوَّل مع تفعيل SELECT_TF_OPS.
  • أضِف تبعية TensorFlowLiteSelectTfOps إلى Podfile حسب التعليمات.
  • أضِف علامة الربط الإضافية كما هو موضّح أعلاه.
  • يمكنك تشغيل التطبيق كمثال ومعرفة ما إذا كان النموذج يعمل بشكل صحيح.

استخدام Bazel + Xcode

يمكن إنشاء TensorFlow Lite مع عمليات TensorFlow المحددة لنظام التشغيل iOS باستخدام Bazel. أولاً، اتّبِع تعليمات إصدار iOS لضبط مساحة العمل في Bazel وملف .bazelrc بشكل صحيح.

بعد ضبط مساحة العمل مع تفعيل دعم iOS، يمكنك استخدام الأمر التالي لإنشاء إطار عمل إضافي لعمليات TF، والذي يمكن إضافته إلى جانب TensorFlowLiteC.framework العادي. يُرجى العِلم أنّه لا يمكن إنشاء إطار عمل عمليات TF المحدد لبنية i386، وبالتالي يجب توفير قائمة بالبُنى الأساسية المستهدَفة باستثناء i386.

bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

سيؤدي ذلك إلى إنشاء إطار العمل ضمن دليل bazel-bin/tensorflow/lite/ios/. يمكنك إضافة إطار العمل الجديد هذا إلى مشروع Xcode باتّباع الخطوات المشابهة الموضّحة ضمن قسم إعدادات مشروع Xcode في دليل إصدار iOS.

بعد إضافة إطار العمل إلى مشروع تطبيقك، يجب تحديد علامة ربط إضافية في مشروع تطبيقك لفرض تحميل إطار عمل عمليات TF. في مشروع Xcode، انتقِل إلى Build Settings -> Other Linker Flags، ثم أضِف:

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

شفرة لغة البرمجة ‏++C/‏C

إذا كنت تستخدم Bazel أو CMake لإنشاء مترجم فوري لمنصة TensorFlow Lite، يمكنك تفعيل تفويض Flex من خلال ربط المكتبة المشتركة المفوضة في TensorFlow Lite Flex. يمكنك إنشاؤه باستخدام Bazel كالأمر التالي.

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

ينشئ هذا الأمر المكتبة المشتركة التالية في bazel-bin/tensorflow/lite/delegates/flex.

النظام الأساسي اسم المكتبة
Linux libtensorflowlite_flex.so
macOS libtensorflowlite_flex.dylib
Windows tensorflowlite_flex.dll

يُرجى العِلم أنّه سيتم تثبيت TfLiteDelegate الضروري تلقائيًا عند إنشاء أداة الترجمة الفورية في وقت التشغيل ما دامت المكتبة المشتركة مرتبطة ببعضها. ليس من الضروري تثبيت مثيل التفويض كما هو مطلوب عادةً مع أنواع التفويض الأخرى.

ملاحظة: تتوفّر هذه الميزة في الإصدار 2.7.

Python

سيتم تثبيت TensorFlow Lite مع عمليات TensorFlow المحددة تلقائيًا باستخدام حزمة TensorFlow pip. يمكنك أيضًا اختيار تثبيت حزمة TensorFlow Lite ISP pip فقط.

المقاييس

عروض أداء

عند استخدام مزيج من عمليات TensorFlow المدمَجة واختيار TensorFlow، ستتوفر جميع التحسينات نفسها على TensorFlow Lite، بالإضافة إلى العمليات المدمجة المحسَّنة، وستكون قابلة للاستخدام مع النموذج الذي تم تحويله.

يصف الجدول التالي متوسط الوقت المستغرق لتنفيذ الاستنتاج على MobileNet على Pixel 2. الأوقات المدرجة هي متوسط 100 نقطة. تم إنشاء هذه الأهداف لنظام التشغيل Android باستخدام العلامات: --config=android_arm64 -c opt.

زيادة التشويق الوقت (بالمللي ثانية)
العمليات المدمجة فقط (TFLITE_BUILTIN) 260.7
استخدام عمليات TF فقط (SELECT_TF_OPS) 264.5

حجم ثنائي

يوضِّح الجدول التالي الحجم الثنائي لبرنامج TensorFlow Lite لكلّ إصدار. تم إنشاء هذه الأهداف لنظام التشغيل Android باستخدام --config=android_arm -c opt.

زيادة التشويق حجم البرنامج الثنائي C++ حجم حزمة APK لنظام التشغيل Android
العمليات المضمنة فقط 796 كيلوبايت 561 كيلوبايت
العمليات المضمَّنة + عمليات TF 23.0 ميغابايت 8.0 ميغابايت
العمليات المضمَّنة + عمليات TF (1) 4.1 ميغابايت 1.8 ميغابايت

(1) تم تصميم هذه المكتبات بشكل انتقائي لـ نموذج i3d-kinetics-400 مع 8 عمليات مدمجة من TFLite و3 عمليات Tensorflow. لمزيد من التفاصيل، يُرجى الاطّلاع على قسم تقليل حجم البرنامج الثنائي TensorFlow Lite.

القيود المعروفة

  • الأنواع غير المتوافقة: قد لا تتوافق بعض عمليات TensorFlow مع المجموعة الكاملة من أنواع الإدخال/الإخراج التي تتوفّر عادةً في TensorFlow.

التحديثات

  • الإصدار 2.6
    • تم تحسين عوامل التشغيل المستندة إلى سمات GraphDef وعمليات إعداد موارد HashTable.
  • الإصدار 2.5
  • الإصدار 2.4
    • لقد حسَّن التوافق مع المستخدمين المفوَّضين الذين يسرّعوا سرعة استخدام الأجهزة.