نظرة عامة
عند نشر نماذج لتطبيقات تعلُّم الآلة على الجهاز (ODML)، يجب من المهم أن تكون على دراية بالذاكرة المحدودة المتاحة على الأجهزة المحمولة. ترتبط الأحجام الثنائية للنموذج ارتباطًا وثيقًا بعدد العمليات المستخدمة في الأمثل. يمكّنك LiteRT من تقليل أحجام النماذج الثنائية باستخدام البنى الانتقائية. تتخطى الإصدارات الانتقائية العمليات غير المستخدمة في مجموعة النماذج إنتاج مكتبة صغيرة تحتوي فقط على بيئة التشغيل ونواة العمليات المطلوبة الطراز لتشغيله على جهازك الجوال.
ينطبق التصميم الانتقائي على مكتبات العمليات الثلاث التالية.
يوضح الجدول أدناه تأثير الإصدارات الانتقائية لبعض الاستخدامات الشائعة الحالات:
اسم النموذج | النطاق | بنية الاستهداف | أحجام ملفات AAR |
---|---|---|---|
Mobilenet_1.0_224(float) | تصنيف الصور | armeabi-v7a | tensorflow-lite.aar (296,635 بايت) |
Arm64-v8a | tensorflow-lite.aar (382,892 بايت) | ||
التوابل | استخراج درجة الصوت | armeabi-v7a | tensorflow-lite.aar (375,813 بايت) tensorflow-lite-select-tf-ops.aar (1,676,380 بايت) |
Arm64-v8a | tensorflow-lite.aar (421,826 بايت) tensorflow-lite-select-tf-ops.aar (2,298,630 بايت) |
||
i3d-kinetics-400 | تصنيف الفيديو | armeabi-v7a | tensorflow-lite.aar (240,085 بايت) tensorflow-lite-select-tf-ops.aar (1,708,597 بايت) |
Arm64-v8a | tensorflow-lite.aar (273,713 بايت) tensorflow-lite-select-tf-ops.aar (2,339,697 بايت) |
إنشاء LiteRT بشكل انتقائي باستخدام Bazel
يفترض هذا القسم أنك نزّلت رموز المصدر TensorFlow وحددت على تطوير التنمية المحلية البيئة إلى Bazel
إنشاء ملفات AAR لمشروع Android
يمكنك إنشاء نماذج AAR المخصّصة في LiteRT من خلال توفير مسارات ملفات النماذج. على النحو التالي.
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. لاحظ أن هذا يؤدي إلى بناء "دهون" ميزة "التطبيق التلقائي للاقتراحات" بعدّة لغات
الهياكل الهندسية إذا لم تكن بحاجة إليها جميعًا، فاستخدم المجموعة الفرعية المناسبة
بيئة النشر لديك.
البناء باستخدام العمليات المخصّصة
إذا كنت قد طورت نماذج LiteRT باستخدام عمليات مخصّصة، يمكنك إنشاؤها عن طريق إضافة العلامات التالية إلى أمر إنشاء:
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 \
--tflite_custom_ops_srcs=/e/f/file1.cc,/g/h/file2.h \
--tflite_custom_ops_deps=dep1,dep2
تحتوي العلامة tflite_custom_ops_srcs
على ملفات المصدر للعمليات المخصصة
تحتوي العلامة tflite_custom_ops_deps
على تبعيات لإنشاء تلك المصدر
الملفات. يجب أن تتوفّر هذه التبعيات في مستودع TensorFlow.
الاستخدامات المتقدّمة: قواعد Bazel المخصّصة
إذا كان مشروعك يستخدم Bazel وكنت تريد تحديد تنسيق TFLite مخصّص، والتبعية لمجموعة معينة من النماذج، فيمكنك تحديد القواعد التالية في مستودع المشروع:
بالنسبة إلى النماذج التي تحتوي على عمليات مدمجة فقط:
load(
"@org_tensorflow//tensorflow/lite:build_def.bzl",
"tflite_custom_android_library",
"tflite_custom_c_library",
"tflite_custom_cc_library",
)
# A selectively built TFLite Android library.
tflite_custom_android_library(
name = "selectively_built_android_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# A selectively built TFLite C library.
tflite_custom_c_library(
name = "selectively_built_c_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# A selectively built TFLite C++ library.
tflite_custom_cc_library(
name = "selectively_built_cc_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
بالنسبة إلى النماذج التي تتضمّن عمليات اختيار TF:
load(
"@org_tensorflow//tensorflow/lite/delegates/flex:build_def.bzl",
"tflite_flex_android_library",
"tflite_flex_cc_library",
)
# A Select TF ops enabled selectively built TFLite Android library.
tflite_flex_android_library(
name = "selective_built_tflite_flex_android_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# A Select TF ops enabled selectively built TFLite C++ library.
tflite_flex_cc_library(
name = "selective_built_tflite_flex_cc_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
الاستخدامات المتقدمة: إنشاء مكتبات مشتركة مخصصة بلغة C/C++
إذا كنت ترغب في إنشاء كائنات مشتركة لـ TFLite C/C++ مخصصة النماذج المحددة، يمكنك اتباع الخطوات التالية:
أنشئ ملف BUILD مؤقتًا من خلال تشغيل الأمر التالي في الجذر دليل الرمز المصدر TensorFlow:
mkdir -p tmp && touch tmp/BUILD
إنشاء كائنات مشتركة C مخصصة
إذا أردت إنشاء عنصر مشترك مخصّص في TFLite C، أضِف ما يلي إلى
ملف tmp/BUILD
:
load(
"//tensorflow/lite:build_def.bzl",
"tflite_custom_c_library",
"tflite_cc_shared_object",
)
tflite_custom_c_library(
name = "selectively_built_c_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# Generates a platform-specific shared library containing the LiteRT C
# API implementation as define in `c_api.h`. The exact output library name
# is platform dependent:
# - Linux/Android: `libtensorflowlite_c.so`
# - Mac: `libtensorflowlite_c.dylib`
# - Windows: `tensorflowlite_c.dll`
tflite_cc_shared_object(
name = "tensorflowlite_c",
linkopts = select({
"//tensorflow:ios": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite/c:exported_symbols.lds)",
],
"//tensorflow:macos": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite/c:exported_symbols.lds)",
],
"//tensorflow:windows": [],
"//conditions:default": [
"-z defs",
"-Wl,--version-script,$(location //tensorflow/lite/c:version_script.lds)",
],
}),
per_os_targets = True,
deps = [
":selectively_built_c_lib",
"//tensorflow/lite/c:exported_symbols.lds",
"//tensorflow/lite/c:version_script.lds",
],
)
يمكن إنشاء الاستهداف المُضاف حديثًا على النحو التالي:
bazel build -c opt --cxxopt=--std=c++17 \
//tmp:tensorflowlite_c
وبالنسبة إلى Android (استبدِل android_arm
بـ android_arm64
للإصدار 64 بت):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite_c
إنشاء كائنات مشتركة C++ مخصصة
إذا أردت إنشاء عنصر مشترك مخصّص في TFLite C++ ، يُرجى إضافة ما يلي
إلى ملف tmp/BUILD
:
load(
"//tensorflow/lite:build_def.bzl",
"tflite_custom_cc_library",
"tflite_cc_shared_object",
)
tflite_custom_cc_library(
name = "selectively_built_cc_lib",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
# Shared lib target for convenience, pulls in the core runtime and builtin ops.
# Note: This target is not yet finalized, and the exact set of exported (C/C++)
# APIs is subject to change. The output library name is platform dependent:
# - Linux/Android: `libtensorflowlite.so`
# - Mac: `libtensorflowlite.dylib`
# - Windows: `tensorflowlite.dll`
tflite_cc_shared_object(
name = "tensorflowlite",
# Until we have more granular symbol export for the C++ API on Windows,
# export all symbols.
features = ["windows_export_all_symbols"],
linkopts = select({
"//tensorflow:macos": [
"-Wl,-exported_symbols_list,$(location //tensorflow/lite:tflite_exported_symbols.lds)",
],
"//tensorflow:windows": [],
"//conditions:default": [
"-Wl,-z,defs",
"-Wl,--version-script,$(location //tensorflow/lite:tflite_version_script.lds)",
],
}),
per_os_targets = True,
deps = [
":selectively_built_cc_lib",
"//tensorflow/lite:tflite_exported_symbols.lds",
"//tensorflow/lite:tflite_version_script.lds",
],
)
يمكن إنشاء الاستهداف المُضاف حديثًا على النحو التالي:
bazel build -c opt --cxxopt=--std=c++17 \
//tmp:tensorflowlite
وبالنسبة إلى Android (استبدِل android_arm
بـ android_arm64
للإصدار 64 بت):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite
بالنسبة للنماذج التي تحتوي على عمليات تحديد TF، تحتاج أيضًا إلى إنشاء ما يلي المكتبة المشتركة أيضًا:
load(
"@org_tensorflow//tensorflow/lite/delegates/flex:build_def.bzl",
"tflite_flex_shared_library"
)
# Shared lib target for convenience, pulls in the standard set of TensorFlow
# ops and kernels. The output library name is platform dependent:
# - Linux/Android: `libtensorflowlite_flex.so`
# - Mac: `libtensorflowlite_flex.dylib`
# - Windows: `libtensorflowlite_flex.dll`
tflite_flex_shared_library(
name = "tensorflowlite_flex",
models = [
":model_one.tflite",
":model_two.tflite",
],
)
يمكن إنشاء الاستهداف المُضاف حديثًا على النحو التالي:
bazel build -c opt --cxxopt='--std=c++17' \
--config=monolithic \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
//tmp:tensorflowlite_flex
وبالنسبة إلى Android (استبدِل android_arm
بـ android_arm64
للإصدار 64 بت):
bazel build -c opt --cxxopt='--std=c++17' \
--config=android_arm \
--config=monolithic \
--host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
//tmp:tensorflowlite_flex
إعداد LiteRT بشكل انتقائي باستخدام Docker
يفترض هذا القسم أنك ثبَّت Docker على جهازك المحلي تم تنزيل ملف LiteRT Dockerfile هنا
بعد تنزيل ملف Dockerfile أعلاه، يمكنك إنشاء صورة Docker عن طريق قيد التشغيل:
docker build . -t tflite-builder -f tflite-android.Dockerfile
إنشاء ملفات AAR لمشروع Android
نزِّل النص البرمجي للإنشاء باستخدام Docker من خلال تنفيذ ما يلي:
curl -o build_aar_with_docker.sh \
https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/lite/tools/build_aar_with_docker.sh &&
chmod +x build_aar_with_docker.sh
بعد ذلك، يمكنك إنشاء تطبيق LiteRT AAR المخصّص من خلال تقديم ملف النموذج المسارات على النحو التالي.
sh build_aar_with_docker.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a \
--checkpoint=master \
[--cache_dir=<path to cache directory>]
العلامة checkpoint
هي التزام، أو فرع، أو علامة في مستودع TensorFlow
تريد الدفع قبل إنشاء المكتبات بشكل افتراضي هو الأحدث
فرع الإصدار. سينشئ الأمر أعلاه ملف AAR
tensorflow-lite.aar
للعمليات المضمّنة والمخصَّصة باستخدام LiteRT واختياريًا
ملف AAR tensorflow-lite-select-tf-ops.aar
لعمليات "اختيار TensorFlow"
الدليل الحالي.
تحدد --cache_dir دليل ذاكرة التخزين المؤقت. وإذا لم يتم توفير هذا النص، فسيحدث
إنشاء دليل باسم bazel-build-cache
ضمن دليل العمل الحالي لـ
التخزين المؤقت.
إضافة ملفات AAR إلى المشروع
يمكنك إضافة ملفات AAR من خلال استيراد ملفات AAR مباشرةً إلى
المشروع، أو من خلال النشر
ميزة "التطبيق التلقائي للاقتراحات" المخصّصة إلى Maven المحلي
المستودع. ملاحظة
يجب إضافة ملفات AAR لـ tensorflow-lite-select-tf-ops.aar
باسم
إذا قمت بإنشائها.
الإصدار الانتقائي لنظام التشغيل iOS
يُرجى الاطّلاع على قسم البناء محليًا لإعداد إعداد بيئة التصميم وإعداد مساحة عمل TensorFlow ثم اتّباع دليل استخدام الخيارات لإنشاء نص برمجي لنظام التشغيل iOS.