نمای کلی
هنگام استقرار مدلها برای برنامههای یادگیری ماشین روی دستگاه (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 برای پروژه اندروید
شما می توانید 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 ایجاد می کند. و به صورت اختیاری، فایل aar bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
را تولید می کند اگر مدل های شما دارای گزینه های Select TensorFlow باشند. توجه داشته باشید که این یک 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 \
--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
و برای اندروید (برای 64 بیت 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
و برای اندروید (برای 64 بیت android_arm
با android_arm64
جایگزین کنید):
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
و برای اندروید (برای 64 بیت 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 را از اینجا دانلود کردهاید.
پس از دانلود Dockerfile فوق، می توانید با اجرای زیر، تصویر داکر را بسازید:
docker build . -t tflite-builder -f tflite-android.Dockerfile
ساخت فایل های AAR برای پروژه اندروید
اسکریپت ساخت با داکر را با اجرای زیر دانلود کنید:
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
یک commit، یک شاخه یا یک برچسب از مخزن TensorFlow است که میخواهید قبل از ساخت کتابخانهها آن را بررسی کنید. به طور پیش فرض آخرین شعبه انتشار است. دستور بالا فایل AAR tensorflow-lite.aar
برای عملیات داخلی و سفارشی LiteRT و به صورت اختیاری فایل AAR tensorflow-lite-select-tf-ops.aar
برای Select TensorFlow ops در فهرست فعلی شما ایجاد می کند.
--cache_dir دایرکتوری کش را مشخص می کند. اگر اسکریپت ارائه نشده باشد، یک دایرکتوری به نام bazel-build-cache
تحت فهرست کاری فعلی برای ذخیره سازی ایجاد می کند.
فایل های AAR را به پروژه اضافه کنید
فایل های AAR را با وارد کردن مستقیم AAR به پروژه خود یا با انتشار AAR سفارشی در مخزن محلی Maven خود اضافه کنید. توجه داشته باشید که در صورت ایجاد فایلهای AAR برای tensorflow-lite-select-tf-ops.aar
نیز باید آن را اضافه کنید.
ساخت انتخابی برای iOS
لطفاً برای تنظیم محیط ساخت و پیکربندی فضای کاری TensorFlow به بخش Building locally مراجعه کنید و سپس راهنمای استفاده از اسکریپت ساخت انتخابی برای iOS را دنبال کنید.