نظرًا لأن مكتبة المشغل المدمجة في 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 الضرورية.
Android AAR
لتقليل الحجم الثنائي ، يرجى إنشاء ملفات 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 الخاصة بالرسم البياني تلقائيًا للرسوم البيانية التي تتطلبها.
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. إذا لم يكن لديك بيئة بناء عاملة ، فيمكنك أيضًا إنشاء الملفات أعلاه باستخدام عامل الإرساء .
من هناك ، يمكنك إما استيراد ملفات 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 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
وفقًا للتعليمات. - أضف علامة الرابط الإضافية على النحو الوارد أعلاه.
- قم بتشغيل تطبيق المثال ومعرفة ما إذا كان النموذج يعمل بشكل صحيح.
باستخدام Bazel + 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>
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
.
منصة | اسم المكتبة |
---|---|
لينكس | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
شبابيك | tensorflowlite_flex.dll |
لاحظ أنه سيتم تثبيت TfLiteDelegate
اللازم تلقائيًا عند إنشاء المترجم في وقت التشغيل طالما أن المكتبة المشتركة مرتبطة. ليس من الضروري تثبيت طبعة المفوض بشكل صريح كما هو مطلوب عادةً مع أنواع المفوضين الأخرى.
بايثون
سيتم تثبيت TensorFlow Lite مع عمليات TensorFlow المحددة تلقائيًا مع حزمة نقاط TensorFlow . يمكنك أيضًا اختيار تثبيت حزمة أنابيب TensorFlow Lite Interpreter فقط.
المقاييس
أداء
عند استخدام مزيج من عمليات TensorFlow المدمجة والمحددة ، ستتوفر جميع تحسينات TensorFlow Lite والعمليات المضمنة المحسّنة وقابلة للاستخدام مع النموذج المحول.
يصف الجدول التالي متوسط الوقت المستغرق لتشغيل الاستدلال على MobileNet على Pixel 2. الأوقات المذكورة هي في المتوسط 100 مرة. تم تصميم هذه الأهداف لنظام Android باستخدام العلامات: --config=android_arm64 -c opt
.
يبني | الوقت (مللي ثانية) |
---|---|
العمليات المدمجة فقط ( TFLITE_BUILTIN ) | 260.7 |
باستخدام TF ops فقط ( 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
- تم تحسين التوافق مع تفويضات تسريع الأجهزة