بما أنّ مكتبة عوامل التشغيل المضمّنة في 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
لتقليل حجم الملف الثنائي، يُرجى إنشاء ملفات AAR مخصّصة باتّباع الإرشادات الواردة في القسم التالي. إذا لم يكن حجم الرمز الثنائي مصدر قلق كبير، ننصحك باستخدام ملف AAR المُنشأ مسبقًا مع عمليات TensorFlow المستضافة على MavenCentral.
يمكنك تحديد ذلك في تبعيات build.gradle من خلال إضافتها إلى جانب ملف AAR العادي الخاص بـ LiteRT على النحو التالي:
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 snapshot.
بعد إضافة التبعية، سيتم تلقائيًا تثبيت المفوّض اللازم لمعالجة عمليات TensorFlow للرسم البياني، وذلك للرسومات البيانية التي تتطلّب ذلك.
ملاحظة: إنّ تبعية عمليات TensorFlow كبيرة نسبيًا، لذا من المحتمل أن تحتاج إلى استبعاد واجهات التطبيق الثنائية غير الضرورية x86 في ملف .gradle من خلال إعداد abiFilters.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
إنشاء ملف AAR لنظام التشغيل Android
لتقليل حجم الرمز الثنائي أو في الحالات المتقدّمة الأخرى، يمكنك أيضًا إنشاء المكتبة يدويًا. بافتراض توفّر بيئة إنشاء LiteRT تعمل، أنشئ ملف 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 لعمليات 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 إصدارات CocoaPods مسبقة الإنشاء من عمليات TF المحدّدة لـ arm64 كل ليلة، ويمكنك الاعتماد عليها إلى جانب إصدارات CocoaPods الخاصة بـ TensorFlowLiteSwift أو TensorFlowLiteObjC.
ملاحظة: إذا كنت بحاجة إلى استخدام عمليات TF محدّدة في محاكي x86_64، يمكنك إنشاء إطار العمل الخاص بالعمليات المحدّدة بنفسك. راجِع قسم استخدام Bazel وXcode
للحصول على مزيد من التفاصيل.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
بعد تشغيل pod install، عليك تقديم علامة ربط إضافية
لفرض تحميل إطار عمل عمليات TensorFlow المحدّدة في مشروعك. في مشروع 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 لتصنيف الصور لاختبار ميزة عمليات TensorFlow المحدّدة.
- استبدِل ملف التصميم بالملف الذي تم تحويله مع تفعيل
SELECT_TF_OPS. - أضِف تبعية
TensorFlowLiteSelectTfOpsإلىPodfileوفقًا للتعليمات. - أضِف علامة الربط الإضافية كما هو موضّح أعلاه.
- شغِّل تطبيق المثال واطّلِع على ما إذا كان النموذج يعمل بشكل صحيح.
استخدام Bazel وXcode
يمكن إنشاء LiteRT مع عمليات TensorFlow المحدّدة لنظام التشغيل iOS باستخدام Bazel. أولاً، اتّبِع تعليمات إنشاء إصدار iOS لإعداد مساحة عمل Bazel وملف .bazelrc بشكل صحيح.
بعد ضبط مساحة العمل مع تفعيل إمكانية استخدام نظام التشغيل iOS، يمكنك استخدام الأمر التالي لإنشاء إطار عمل إضافي لعمليات TensorFlow المحدّدة، والذي يمكن إضافته إلى TensorFlowLiteC.framework العادي. يُرجى العِلم أنّه لا يمكن إنشاء إطار عمل عمليات TensorFlow المحدّدة لمنصة 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.
بعد إضافة إطار العمل إلى مشروع تطبيقك، يجب تحديد علامة ربط إضافية في مشروع تطبيقك لفرض تحميل إطار عمل عمليات TensorFlow المحدّدة. في مشروع Xcode، انتقِل إلى Build Settings -> Other Linker
Flags، وأضِف ما يلي:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
شفرة لغة البرمجة ++C/C
إذا كنت تستخدم Bazel أو CMake لإنشاء مترجم LiteRT، يمكنك تفعيل مفوّض Flex من خلال ربط مكتبة مشتركة لمفوّض Flex في LiteRT. يمكنك إنشاء هذا التطبيق باستخدام 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
سيتم تثبيت LiteRT مع عمليات TensorFlow المحدّدة تلقائيًا باستخدام حزمة TensorFlow pip. يمكنك أيضًا اختيار تثبيت حزمة LiteRT Interpreter pip فقط.
المقاييس
الأداء
عند استخدام مزيج من عمليات TensorFlow المضمّنة والمحدّدة، ستتوفّر جميع عمليات التحسين نفسها في LiteRT والعمليات المضمّنة المحسّنة ويمكن استخدامها مع النموذج المحوّل.
يوضّح الجدول التالي متوسط الوقت المستغرَق لتشغيل الاستدلال على MobileNet على هاتف Pixel 2. الأوقات المُدرَجة هي متوسط 100 عملية تشغيل. تم إنشاء هذه الاستهدافات لنظام التشغيل Android باستخدام العلامات: --config=android_arm64 -c opt.
| إنشاء | الوقت (بالملّي ثانية) |
|---|---|
العمليات المضمّنة فقط (TFLITE_BUILTIN) |
260.7 |
استخدام عمليات TensorFlow فقط (SELECT_TF_OPS) |
264.5 |
حجم الملف الثنائي
يوضّح الجدول التالي حجم الرمز الثنائي لـ LiteRT لكل إصدار. تم إنشاء هذه الاستهدافات لنظام التشغيل Android باستخدام --config=android_arm -c opt.
| إنشاء | حجم الملف الثنائي للغة C++ | حجم حزمة APK على Android |
|---|---|---|
| العمليات المضمّنة فقط | 796 كيلوبايت | 561 كيلوبايت |
| عمليات مدمجة + عمليات TensorFlow | 23.0 ميغابايت | 8.0 ميغابايت |
| عمليات مدمجة + عمليات TensorFlow (1) | 4.1 ميغابايت | 1.8 ميغابايت |
(1) تم إنشاء هذه المكتبات بشكل انتقائي لنموذج i3d-kinetics-400 باستخدام 8 عمليات مدمجة في TFLite و3 عمليات في TensorFlow. لمزيد من التفاصيل، يُرجى الاطّلاع على القسم تقليل حجم ملف LiteRT الثنائي.
القيود المعروفة
- الأنواع غير المتوافقة: قد لا تتوافق بعض عمليات TensorFlow مع المجموعة الكاملة من أنواع الإدخال/الإخراج المتوفّرة عادةً في TensorFlow.
التحديثات
- الإصدار 2.6
- تم تحسين إمكانية استخدام عوامل التشغيل المستندة إلى سمات GraphDef وعمليات تهيئة موارد HashTable.
- الإصدار 2.5
- يمكنك تطبيق عملية تحسين تُعرف باسم التكميم بعد التدريب.
- الإصدار 2.4
- تم تحسين التوافق مع المفوّضين الذين يستخدمون تسريع الأجهزة