احفظ التاريخ! يعود مؤتمر Google I / O من 18 إلى 20 مايو. سجل الآن
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

حدد عوامل تشغيل 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 الضرورية.

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 'http://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

نحن نقدم مجموعة مختارة من TF ops CocoaPods معدة مسبقًا ليلاً لـ armv7 و 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 ، وأضف:

-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 لتهيئة مساحة عمل .bazelrc وملف .bazelrc بشكل صحيح.

بمجرد تكوين مساحة العمل مع تمكين دعم iOS ، يمكنك استخدام الأمر التالي لإنشاء إطار عمل إضافي محدد TF ops ، والذي يمكن إضافته أعلى إطار TensorFlowLiteC.framework العادي. علما بأن حدد إطار التقاط TF لا يمكن أن يبنى ل i386 الهندسة المعمارية، لذلك تحتاج إلى توفير صراحة قائمة أبنية الهدف باستثناء i386 .

bazel build -c opt --config=ios --ios_multi_cpus=armv7,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 ++

عند إنشاء مكتبات TensorFlow Lite باستخدام خط أنابيب bazel ، يمكن تضمين مكتبة عمليات TensorFlow الإضافية وتمكينها على النحو التالي:

  • قم بتمكين الإنشاءات المتجانسة إذا لزم الأمر عن طريق إضافة --config=monolithic علامة بناء --config=monolithic .
  • أضف تبعية مكتبة مفوض TensorFlow ops إلى تبعيات tensorflow/lite/delegates/flex:delegate : tensorflow/lite/delegates/flex:delegate .

لاحظ أنه سيتم تثبيت TfLiteDelegate اللازم تلقائيًا عند إنشاء المترجم 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.
  • العمليات غير المدعومة: عمليات التحكم في التدفق وعمليات التشغيل التي تتطلب تهيئة صريحة من الموارد ، مثل HashTableV2 ، غير مدعومة حتى الآن.

التحديثات

  • الإصدار 2.5 (لم يتم إصداره رسميًا بعد)
  • الإصدار 2.4
    • تم تحسين التوافق مع تفويضات تسريع الأجهزة