ونظرًا لأن مكتبة مشغّلات 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
- لقد حسَّن التوافق مع المستخدمين المفوَّضين الذين يسرّعوا سرعة استخدام الأجهزة.