إنشاء LiteRT لأجهزة iOS

يصف هذا المستند كيفية إنشاء مكتبة LiteRT iOS بنفسك. لا تحتاج عادةً إلى إنشاء مكتبة LiteRT iOS على الجهاز. إذا كنت أردت استخدامه فقط، فإن أسهل طريقة هي استخدام الإصدار الثابت مسبقًا أو الليلي إصدارات LiteRT CocoaPods. راجع iOS Quickstart (التشغيل السريع) لمزيد من التفاصيل حول كيفية استخدامها على جهاز iOS مماثلة.

البناء محليًا

في بعض الحالات، قد ترغب في استخدام إصدار محلي من LiteRT، على سبيل المثال، عندما تريد إجراء تغييرات محلية على LiteRT واختبار تلك التغييرات في تطبيق iOS أو إذا كنت تفضل استخدام إطار العمل الثابت ديناميكي واحد. لإنشاء إطار عمل iOS عام لـ LiteRT محليًا، فإنك بحاجة إلى إنشائه باستخدام Bazel على جهاز macOS.

تثبيت Xcode

إذا لم تكن قد قمت بذلك بالفعل، فستحتاج إلى تثبيت Xcode 8 أو إصدار أحدث والأدوات باستخدام xcode-select:

xcode-select --install

إذا كانت هذه عملية تثبيت جديدة، عليك قبول اتفاقية الترخيص للجميع للمستخدمين باستخدام الأمر التالي:

sudo xcodebuild -license accept

تثبيت Bazel

Bazel هو نظام التصميم الأساسي لمنصة TensorFlow. تثبيت تطبيق Bazel وفقًا التعليمات على موقع Bazel الإلكتروني. تأكد من اختيار الإصدار بين _TF_MIN_BAZEL_VERSION و_TF_MAX_BAZEL_VERSION بوصة ملف configure.py في جذر مستودع tensorflow.

إعداد WORKSPACE و .bazelrc

شغِّل النص البرمجي ./configure في دليل الدفع TensorFlow الجذر. الإجابة بـ "نعم" عندما يسألك النص البرمجي عما إذا كنت تريد إنشاء TensorFlow باستخدام iOS والدعم.

بعد ضبط Bazel بشكل صحيح مع دعم iOS، يمكنك إنشاء TensorFlowLiteC باستخدام الأمر التالي.

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_framework

سيُنشئ هذا الأمر ملف TensorFlowLiteC_framework.zip ضمن دليل bazel-bin/tensorflow/lite/ios/ ضمن الدليل الجذري على TensorFlow. بشكل تلقائي، يحتوي إطار العمل الذي تم إنشاؤه على "سمينة" ثنائي يحتوي على Armv7 Arm64 وx86_64 (ولكن ليس i386). للاطّلاع على القائمة الكاملة لعلامات الإصدار التي يتم استخدامها عند الذي تحدّده --config=ios_fat، يُرجى الرجوع إلى قسم إعدادات iOS في ملف واحد (.bazelrc)

إنشاء إطار عمل ثابت من TensorFlowLiteC

لا نوزِّع إطار العمل الديناميكي تلقائيًا إلا من خلال Cocoapods. إذا أردت من استخدام إطار العمل الثابت، يمكنك إنشاء بنية TensorFlowLiteC ثابتة. باستخدام الأمر التالي:

bazel build --config=ios_fat -c opt --cxxopt=--std=c++17 \
  //tensorflow/lite/ios:TensorFlowLiteC_static_framework

سينشئ الأمر ملفًا باسم "TensorFlowLiteC_static_framework.zip" ضمن الدليل bazel-bin/tensorflow/lite/ios/ ضمن جذر TensorFlow الدليل. يمكن استخدام هذا الإطار الثابت بنفس طريقة استخدام ديناميكي واحد.

إنشاء أُطر عمل TFLite بشكل انتقائي

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

bash tensorflow/lite/ios/build_frameworks.sh \
  --input_models=model1.tflite,model2.tflite \
  --target_archs=x86_64,armv7,arm64

سينشئ الأمر أعلاه إطار العمل الثابت bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteC_framework.zip في TensorFlow عمليات مُخصّصة ومُدمَجة وبسيطة وإنشاء إطار عمل ثابت bazel-bin/tensorflow/lite/ios/tmp/TensorFlowLiteSelectTfOps_framework.zip إذا تحتوي نماذجك على عمليات محددة TensorFlow. تجدر الإشارة إلى أنّ العلامة --target_archs يمكن استخدامها لتحديد بُنى النشر.

الاستخدام في تطبيقك

مطوّرو CocoaPods

هناك ثلاثة أنواع من CocoaPods في LiteRT:

  • TensorFlowLiteSwift: توفّر واجهات برمجة تطبيقات Swift لـ LiteRT.
  • TensorFlowLiteObjC: توفير واجهات برمجة التطبيقات Objective-C لنظام LiteRT
  • TensorFlowLiteC: المجموعة الأساسية المشتركة التي تتضمّن نواة LiteRT وتكشف عن واجهات برمجة تطبيقات C الأساسية التي تستخدمها الصفحتان أعلاه. ليس الغرض منه يمكن استخدامها بشكل مباشر من قبل المستخدمين.

بصفتك مطوّر برامج، يجب أن تختار إما TensorFlowLiteSwift أو TensorFlowLiteObjC مجموعة استنادًا إلى اللغة التي تمت كتابة تطبيقك بها، ولكن وليس كليهما. تختلف الخطوات الدقيقة لاستخدام الإصدارات المحلية من LiteRT، اعتمادًا على الجزء المحدد الذي ترغب في إنشائه.

استخدام واجهات برمجة تطبيقات Swift أو Objective-C المحلية

إذا كنت تستخدم CocoaPods، وتريد فقط اختبار بعض التغييرات المحلية على واجهات برمجة تطبيقات Swift أو Objective-C APIs في LiteRT اتبع الخطوات الواردة هنا.

  1. عليك إجراء تغييرات على واجهات برمجة تطبيقات Swift أو Objective-C عند الدفع على "tensorflow".

  2. افتح ملف TensorFlowLite(Swift|ObjC).podspec وعدِّل هذا السطر:
    . s.dependency 'TensorFlowLiteC', "#{s.version}"
    لتكون:
    s.dependency 'TensorFlowLiteC', "~> 0.0.1-nightly"
    يضمن هذا الإجراء إنشاء واجهات برمجة تطبيقات Swift أو Objective-C. مقارنةً بأحدث إصدار متاح ليلاً من واجهات برمجة تطبيقات TensorFlowLiteC (يتم بناؤه كل ليلة بين الساعة 1 و4 صباحًا بتوقيت المحيط الهادئ) بدلاً من المحطة الثابتة قد يكون قديمًا مقارنةً بعملية الدفع المحلية في tensorflow. وبدلاً من ذلك، يمكنك اختيار نشر نسختك الخاصة من TensorFlowLiteC واستخدِم هذا الإصدار (راجِع استخدام LiteRT محلي). الأساسية أدناه).

  3. في Podfile من مشروع iOS، غيِّر التبعية على النحو التالي: يشير إلى المسار المحلي إلى الدليل الجذري tensorflow.
    بالنسبة إلى Swift:
    pod 'TensorFlowLiteSwift', :path => '<your_tensorflow_root_dir>'
    بالنسبة إلى Objective-C:
    pod 'TensorFlowLiteObjC', :path => '<your_tensorflow_root_dir>'

  4. عليك تعديل تثبيت المجموعة من الدليل الجذري لمشروع iOS.
    $ pod update

  5. إعادة فتح مساحة العمل التي تم إنشاؤها (<project>.xcworkspace) وإعادة إنشاء داخل Xcode.

استخدام حزمة LiteRT الأساسية المحلية

يمكنك إعداد مستودع خاص لمواصفات CocoaPods ونشر مستودعك المخصّص. TensorFlowLiteC إطار العمل إلى مستودعك الخاص. يمكنك نسخ هذا البودكاست ملف وتعديل بعض القيم:

  ...
  s.version      = <your_desired_version_tag>
  ...
  # Note the `///`, two from the `file://` and one from the `/path`.
  s.source       = { :http => "file:///path/to/TensorFlowLiteC_framework.zip" }
  ...
  s.vendored_frameworks = 'TensorFlowLiteC.framework'
  ...

بعد إنشاء ملف TensorFlowLiteC.podspec، يمكنك اتّباع الخطوات التالية: تعليمات حول استخدام CocoaPods الخاصة في حسابك لمشروعك الخاص. يمكنك أيضًا تعديل TensorFlowLite(Swift|ObjC).podspec إلى الإشارة إلى مجموعة TensorFlowLiteC المخصصة واستخدام إما Swift أو Objective-C لوحة الإعلانات في مشروع تطبيقك.

مطوّرو Bazel

إذا كنت تستخدم Bazel كأداة إنشاء رئيسية، يمكنك إضافة تعتمد TensorFlowLite على هدفك في ملف BUILD.

بالنسبة إلى Swift:

swift_library(
  deps = [
      "//tensorflow/lite/swift:TensorFlowLite",
  ],
)

بالنسبة إلى Objective-C:

objc_library(
  deps = [
      "//tensorflow/lite/objc:TensorFlowLite",
  ],
)

عند إنشاء مشروع تطبيقك، ستتم إضافة أي تغييرات إلى مكتبة LiteRT ودمجها في تطبيقك.

تعديل إعدادات مشروع Xcode مباشرةً

يُنصح بشدة باستخدام CocoaPods أو Bazel لإضافة LiteRT. والتبعية في مشروعك. إذا كنت لا تزال تريد إضافة TensorFlowLiteC يدويًا، ستحتاج إلى إضافة إطار عمل TensorFlowLiteC إطار عمل مضمن لمشروع تطبيقك. فك ضغط TensorFlowLiteC_framework.zip التي تم إنشاؤها من الإصدار أعلاه للحصول على دليل TensorFlowLiteC.framework. هذا الدليل هو إطار العمل الفعلي والذي يستطيع Xcode فهمه.

بعد الانتهاء من تحضير TensorFlowLiteC.framework، عليك أولاً إضافته. كبرنامج ثنائي مضمّن في استهداف تطبيقك. إن قسم إعدادات المشروع الدقيق قد يختلف ذلك باختلاف إصدار Xcode.

  • Xcode 11: الانتقال إلى "الإعدادات العامة" في محرر المشروعات لهدف تطبيقك، وإضافة TensorFlowLiteC.framework ضمن "أطر العمل والمكتبات" المحتوى المضمَّن" .
  • Xcode 10 والإصدارات الأقدم: الانتقال إلى "الإعدادات العامة" في محرر المشروعات التطبيق المستهدف، وإضافة TensorFlowLiteC.framework ضمن "مضمّنة". Binaries'. يجب إضافة إطار العمل تلقائيًا ضمن قسم "مرتبط" أُطر العمل والمكتبات .

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

بمجرد الانتهاء من هذين الإعدادين، يُفترض أن تكون قادرًا على استيراد واجهة برمجة تطبيقات C API لـ LiteRT، المحددة من خلال ملفات العنوان ضمن دليل TensorFlowLiteC.framework/Headers.