نظرة عامة
عند نشر نماذج لتطبيقات تعلُّم الآلة على الجهاز (ODML)، من المهم أن تكون على دراية بالذاكرة المحدودة المتاحة على الأجهزة الجوّالة. ترتبط الأحجام الثنائية للنموذج ارتباطًا وثيقًا بعدد العمليات المستخدمة في النموذج. تتيح لك TensorFlow Lite تقليل أحجام النماذج الثنائية باستخدام الإصدارات الانتقائية. تتخطى الإصدارات الانتقائية العمليات غير المستخدمة في مجموعة النماذج وتنشئ مكتبة صغيرة تتضمن وقت التشغيل ونواة العمليات المطلوبة لتشغيل النموذج على جهازك الجوّال.
ينطبق التصميم الانتقائي على مكتبات العمليات الثلاث التالية.
- مكتبة العمليات المضمّنة في TensorFlow Lite
- العمليات المخصَّصة في TensorFlow Lite
- اختيار مكتبة عمليات TensorFlow
يوضح الجدول التالي تأثير الإصدارات الانتقائية لبعض حالات الاستخدام الشائعة:
اسم النموذج | النطاق | بنية الاستهداف | أحجام ملفات 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 بايت) |
حسِّن أسلوبك في TensorFlow Lite باستخدام تطبيق Bazel.
يفترض هذا القسم أنك نزّلت رموز المصدر TensorFlow وأعددت بيئة التطوير المحلي على Bazel.
إنشاء ملفات AAR لمشروع Android
يمكنك إنشاء تطبيقات TensorFlow Lite AAR المخصّصة من خلال توفير مسارات ملفات النماذج على النحو التالي.
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
إذا كانت نماذجك تحتوي على عمليات Select TensorFlow. تجدر الإشارة إلى أنّ هذه الطريقة تنشئ تقنية AAR "كبيرة" مع عدة بُنى مختلفة. إذا لم تكن بحاجة إلى جميع هذه البُنى، يمكنك استخدام المجموعة الفرعية المناسبة لبيئة النشر التي تستخدمها.
البناء باستخدام العمليات المخصّصة
إذا كنت قد طورت نماذج Tensorflow Lite باستخدام العمليات المخصَّصة، يمكنك إنشاؤها عن طريق إضافة العلامات التالية إلى أمر التصميم:
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 TensorFlow Lite 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
بالنسبة إلى النماذج التي تحتوي على عمليات Select 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
حسِّن تجربة استخدام TensorFlow Lite باستخدام Docker
يفترض هذا القسم أنك ثبَّت Docker على جهازك المحلي ونزّلت ملف TensorFlow Lite 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
بعد ذلك، يمكنك إنشاء تطبيق TensorFlow Lite 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
للعمليات المضمّنة والمخصَّصة من TensorFlow Lite، ويمكنك اختياريًا إنشاء
ملف AAR tensorflow-lite-select-tf-ops.aar
لعمليات "اختيار TensorFlow"
في الدليل الحالي.
تحدد--cache_dir دليل ذاكرة التخزين المؤقت. إذا لم يتم توفير هذا النص، سينشئ النص البرمجي
دليلاً باسم "bazel-build-cache
" ضمن دليل العمل الحالي
للتخزين المؤقت.
إضافة ملفات AAR إلى المشروع
يمكنك إضافة ملفات AAR من خلال استيرادها مباشرةً إلى مشروعك أو من خلال نشرها في مستودع Maven المحلي. يُرجى العلم أنّه يجب إضافة ملفات AAR إلى tensorflow-lite-select-tf-ops.aar
أيضًا في حال إنشائها.
الإصدار الانتقائي لنظام التشغيل iOS
يُرجى الاطّلاع على قسم "الإنشاء على الجهاز" لإعداد بيئة التصميم وإعداد مساحة عمل TensorFlow ثم اتّباع الدليل لاستخدام النص البرمجي الانتقائي لإنشاء نظام التشغيل iOS.