حدد مشغلي TensorFlow

نظرًا لأن مكتبة مشغل TensorFlow Lite المضمنة تدعم فقط عددًا محدودًا من مشغلي TensorFlow، فليس كل طراز قابل للتحويل. للحصول على التفاصيل، راجع توافق المشغل .

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

يوضح هذا المستند كيفية تحويل وتشغيل نموذج 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.

أندرويد آر

لتقليل الحجم الثنائي، يرجى إنشاء ملفات AAR المخصصة الخاصة بك كما هو موضح في القسم التالي . إذا لم يكن الحجم الثنائي مصدر قلق كبير، فنوصي باستخدام AAR المُنشأ مسبقًا مع TensorFlow ops المستضاف في 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 الخاصة بالرسم البياني تلقائيًا للرسوم البيانية التي تتطلبها.

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

بناء Android AAR

لتقليل الحجم الثنائي أو الحالات المتقدمة الأخرى، يمكنك أيضًا إنشاء المكتبة يدويًا. بافتراض وجود بيئة بناء TensorFlow Lite عاملة ، قم ببناء Android AAR باستخدام عمليات 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 ops. إذا لم تكن لديك بيئة بناء صالحة للعمل، فيمكنك أيضًا إنشاء الملفات أعلاه باستخدام 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'
}

دائرة الرقابة الداخلية

باستخدام CocoaPods

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

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

بعد تشغيل pod install ، تحتاج إلى توفير علامة رابط إضافية لفرض تحميل إطار عمل TF ops المحدد في مشروعك. في مشروع 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 الخاص بك. على سبيل المثال، يمكنك تعديل تطبيق Image Classification iOS لاختبار ميزة TF ops المحددة.

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

باستخدام بازل + Xcode

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

بمجرد قيامك بتكوين مساحة العمل مع تمكين دعم iOS، يمكنك استخدام الأمر التالي لإنشاء إطار عمل إضافي محدد لـ TF ops، والذي يمكن إضافته أعلى TensorFlowLiteC.framework العادي. لاحظ أنه لا يمكن إنشاء إطار عمل TF ops المحدد لبنية 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 ops المحدد. في مشروع Xcode الخاص بك، انتقل إلى Build Settings -> Other Linker Flags ، وأضف:

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

ج/ج++

إذا كنت تستخدم 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 .

منصة اسم المكتبة
لينكس libtensorflowlite_flex.so
ماك libtensorflowlite_flex.dylib
شبابيك tensorflowlite_flex.dll

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

بايثون

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

المقاييس

أداء

عند استخدام مزيج من كل من العمليات المدمجة وعمليات 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 للأندرويد
العمليات المضمنة فقط 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
    • لقد تحسن التوافق مع مندوبي الأجهزة المسرّعين