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

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

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

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

تحويل نموذج

يوضح المثال التالي كيفية إنشاء نموذج LiteRT باستخدام أزرار عمليات 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 LiteRT ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

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

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

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

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

يمكنك تحديد هذا الخيار في الموارد التابعة لـ build.gradle من خلال إضافته إلى جانب مقياس LiteRT 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) غير الضرورية x86 في ملف .gradle عن طريق إعداد abiFilters.

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

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

لتقليل حجم النظام الثنائي أو الحالات المتقدمة الأخرى، يمكنك أيضًا إنشاء المكتبة يدويًا. لنفترض أن إصدار LiteRT صالح بيئة تشغيل جديدة، يمكنك إنشاء تقنية 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 للنطاق عمليات مضمّنة ومخصصة في LiteRT وإنشاء ملف 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(). واستبدال تبعية LiteRT القياسية بالتبعية التي يدعم العديد من عمليات 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

يوفّر LiteRT ميزات مُختارة مسبقًا 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

يمكن إنشاء LiteRT مع عمليات محدَّدة من 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 لإنشاء LiteRT يمكنك تفعيل تفويض Flex من خلال ربط LiteRT Flex. تفويض المكتبة المشتركة. يمكنك إنشاؤه باستخدام Bazel كالأمر التالي.

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

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

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

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

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

Python

سيتم تثبيت LiteRT مع عمليات TensorFlow محدّدة تلقائيًا مع حزمة pip TensorFlow. يمكنك عليك أيضًا اختيار تثبيت نافذة الترجمة والشرح في LiteRT طرد.

المقاييس

الأداء

عند استخدام مزيج من عمليات TensorFlow المدمجة أو المحددة، ستتوفر تحسينات LiteRT والعمليات المضمنة المحسَّنة للاستخدام مع النموذج المحوَّل.

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

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

حجم ثنائي

يصف الجدول التالي الحجم الثنائي لـ LiteRT لكل إصدار. تم إنشاء هذه الأهداف لنظام التشغيل 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. لمزيد من التفاصيل، يُرجى مراجعة قسم تقليل الحجم الثنائي لـ LiteRT

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

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

التحديثات

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