نمای کلی
هنگام استقرار مدلها برای برنامههای یادگیری ماشین روی دستگاه (ODML)، توجه به محدودیت حافظه موجود در دستگاههای تلفن همراه بسیار مهم است. اندازههای دودویی مدل ارتباط نزدیکی با تعداد عملیاتهای مورد استفاده در مدل دارند. LiteRT شما را قادر میسازد تا با استفاده از ساختهای انتخابی، اندازههای دودویی مدل را کاهش دهید. ساختهای انتخابی، عملیاتهای بلااستفاده را در مجموعه مدل شما حذف میکنند و یک کتابخانه فشرده با زمان اجرا و هستههای عملیاتی مورد نیاز برای اجرای مدل روی دستگاه تلفن همراه شما تولید میکنند.
ساخت انتخابی روی سه کتابخانه عملیاتی زیر اعمال میشود.
جدول زیر تأثیر ساختهای انتخابی را برای برخی موارد استفاده رایج نشان میدهد:
| نام مدل | دامنه | معماری هدف | اندازه(های) فایل AAR |
|---|---|---|---|
| Mobilenet_1.0_224 (شناور) | طبقهبندی تصویر | armeabi-v7a | tensorflow-lite.aar (۲۹۶,۶۳۵ بایت) |
| arm64-v8a | tensorflow-lite.aar (۳۸۲,۸۹۲ بایت) | ||
| ادویه | استخراج زیر و بمی صدا | armeabi-v7a | tensorflow-lite.aar (۳۷۵۸۱۳ بایت) tensorflow-lite-select-tf-ops.aar (۱,۶۷۶,۳۸۰ بایت) |
| arm64-v8a | tensorflow-lite.aar (۴۲۱۸۲۶ بایت) tensorflow-lite-select-tf-ops.aar (۲,۲۹۸,۶۳۰ بایت) | ||
| i3d-سینتیک-400 | طبقهبندی ویدیو | armeabi-v7a | tensorflow-lite.aar (۲۴۰,۰۸۵ بایت) tensorflow-lite-select-tf-ops.aar (۱,۷۰۸,۵۹۷ بایت) |
| arm64-v8a | tensorflow-lite.aar (۲۷۳،۷۱۳ بایت) tensorflow-lite-select-tf-ops.aar (۲,۳۳۹,۶۹۷ بایت) |
ساخت انتخابی LiteRT با Bazel
این بخش فرض میکند که شما کدهای منبع TensorFlow را دانلود کرده و محیط توسعه محلی Bazel را راهاندازی کردهاید .
ساخت فایلهای AAR برای پروژه اندروید
شما میتوانید با ارائه مسیرهای فایل مدل خود به شرح زیر، LiteRT 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 را برای عملیات داخلی و سفارشی LiteRT تولید میکند؛ و در صورت تمایل، اگر مدلهای شما حاوی عملیات Select TensorFlow باشند، فایل aar bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar را نیز تولید میکند. توجه داشته باشید که این دستور یک AAR "بزرگ" با چندین معماری مختلف میسازد؛ اگر به همه آنها نیاز ندارید، از زیرمجموعه مناسب برای محیط استقرار خود استفاده کنید.
با گزینههای سفارشی بسازید
اگر مدلهای LiteRT را با گزینههای سفارشی توسعه دادهاید، میتوانید با اضافه کردن پرچمهای زیر به دستور build، آنها را بسازید:
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",
],
)
برای مدلهایی که گزینه Select 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++ خود را برای مدلهای داده شده بسازید، میتوانید مراحل زیر را دنبال کنید:
با اجرای دستور زیر در دایرکتوری ریشه کد منبع TensorFlow، یک فایل BUILD موقت ایجاد کنید:
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_arm با android_arm64 جایگزین کنید):
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_arm با android_arm64 جایگزین کنید):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite
برای مدلهایی که از Select TF ops استفاده میکنند، باید کتابخانه مشترک زیر را نیز بسازید:
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_arm با android_arm64 جایگزین کنید):
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 را از اینجا دانلود کردهاید.
پس از دانلود فایل داکر بالا، میتوانید با اجرای دستور زیر، ایمیج داکر را بسازید:
docker build . -t tflite-builder -f tflite-android.Dockerfile
ساخت فایلهای AAR برای پروژه اندروید
اسکریپت ساخت با 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 به پروژه خود یا با انتشار AAR سفارشی در مخزن محلی Maven خود اضافه کنید. توجه داشته باشید که اگر tensorflow-lite-select-tf-ops.aar را ایجاد میکنید، باید فایلهای AAR مربوط به آن را نیز اضافه کنید.
ساخت انتخابی برای iOS
لطفاً برای راهاندازی محیط ساخت و پیکربندی فضای کاری TensorFlow به بخش «ساخت محلی» مراجعه کنید و سپس برای استفاده از اسکریپت ساخت انتخابی برای iOS، راهنما را دنبال کنید.