ওভারভিউ
অন-ডিভাইস মেশিন লার্নিং (ODML) অ্যাপ্লিকেশনের জন্য মডেল স্থাপন করার সময়, মোবাইল ডিভাইসে উপলব্ধ সীমিত মেমরি সম্পর্কে সচেতন হওয়া গুরুত্বপূর্ণ। মডেল বাইনারি আকারগুলি মডেলটিতে ব্যবহৃত অপের সংখ্যার সাথে ঘনিষ্ঠভাবে সম্পর্কযুক্ত। TensorFlow Lite আপনাকে নির্বাচনী বিল্ড ব্যবহার করে মডেল বাইনারি আকার কমাতে সক্ষম করে। সিলেক্টিভ বিল্ডগুলি আপনার মডেল সেটে অব্যবহৃত ক্রিয়াকলাপগুলি এড়িয়ে যায় এবং আপনার মোবাইল ডিভাইসে মডেলটি চালানোর জন্য প্রয়োজনীয় রানটাইম এবং অপ কার্নেলগুলির সাথে একটি কমপ্যাক্ট লাইব্রেরি তৈরি করে৷
নির্বাচনী বিল্ড নিম্নলিখিত তিনটি অপারেশন লাইব্রেরিতে প্রযোজ্য।
- TensorFlow Lite বিল্ট-ইন অপস লাইব্রেরি
- TensorFlow Lite কাস্টম অপ্স
- টেনসরফ্লো অপস লাইব্রেরি নির্বাচন করুন
নীচের সারণীটি কিছু সাধারণ ব্যবহারের ক্ষেত্রে নির্বাচনী বিল্ডগুলির প্রভাব প্রদর্শন করে:
ণশড | ডোমেইন | টার্গেট আর্কিটেকচার | AAR ফাইলের আকার(গুলি) |
---|---|---|---|
Mobilenet_1.0_224(ফ্লোট) | চিত্র শ্রেণীবিভাগ | 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-কাইনেটিক্স-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 তৈরি করুন
এই বিভাগটি অনুমান করে যে আপনি TensorFlow সোর্স কোড ডাউনলোড করেছেন এবং Bazel- এ স্থানীয় উন্নয়ন পরিবেশ সেট আপ করেছেন ।
অ্যান্ড্রয়েড প্রকল্পের জন্য AAR ফাইল তৈরি করুন
আপনি নিম্নরূপ আপনার মডেল ফাইল পাথ প্রদান করে কাস্টম TensorFlow Lite AARs তৈরি করতে পারেন।
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
তৈরি করবে; এবং ঐচ্ছিকভাবে, aar ফাইল তৈরি করে bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
যদি আপনার মডেলে Select TensorFlow ops থাকে। মনে রাখবেন যে এটি বিভিন্ন স্থাপত্যের সাথে একটি "ফ্যাট" 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 \
--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
পতাকায় সেই উৎস ফাইলগুলি তৈরি করার জন্য নির্ভরতা রয়েছে। মনে রাখবেন যে এই নির্ভরতাগুলি অবশ্যই টেনসরফ্লো রেপোতে বিদ্যমান থাকতে হবে।
উন্নত ব্যবহার: কাস্টম বেজেল নিয়ম
যদি আপনার প্রকল্পটি 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",
],
)
সিলেক্ট টিএফ অপ্স সহ মডেলগুলির জন্য:
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++ শেয়ার করা অবজেক্ট তৈরি করতে চান, আপনি নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন:
টেনসরফ্লো সোর্স কোডের রুট ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালিয়ে একটি অস্থায়ী বিল্ড ফাইল তৈরি করুন:
mkdir -p tmp && touch tmp/BUILD
কাস্টম সি শেয়ার করা অবজেক্ট তৈরি করা
আপনি যদি একটি কাস্টম 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 এর জন্য (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
এবং Android এর জন্য (64-বিটের জন্য android_arm
দিয়ে android_arm64
প্রতিস্থাপন করুন):
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm \
//tmp:tensorflowlite
সিলেক্ট টিএফ অপ্স সহ মডেলগুলির জন্য, আপনাকে নিম্নলিখিত ভাগ করা লাইব্রেরিও তৈরি করতে হবে:
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 এর জন্য (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
ডকার দিয়ে বেছে বেছে টেনসরফ্লো লাইট তৈরি করুন
এই বিভাগটি ধরে নেয় যে আপনি আপনার স্থানীয় মেশিনে ডকার ইনস্টল করেছেন এবং এখানে TensorFlow Lite 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
তারপর, আপনি নিম্নরূপ আপনার মডেল ফাইল পাথ প্রদান করে কাস্টম 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
পতাকা হল একটি কমিট, একটি শাখা বা টেনসরফ্লো রেপোর একটি ট্যাগ যা আপনি লাইব্রেরি তৈরির আগে চেকআউট করতে চান; ডিফল্টরূপে এটি সর্বশেষ রিলিজ শাখা। উপরের কমান্ডটি টেনসরফ্লো লাইট বিল্ট-ইন এবং কাস্টম অপ্সের জন্য AAR ফাইল tensorflow-lite.aar
তৈরি করবে এবং আপনার বর্তমান ডিরেক্টরিতে টেনসরফ্লো অপ্স নির্বাচন করার জন্য ঐচ্ছিকভাবে AAR ফাইল tensorflow-lite-select-tf-ops.aar
তৈরি করবে।
--cache_dir ক্যাশে ডিরেক্টরি নির্দিষ্ট করে। যদি প্রদান না করা হয়, স্ক্রিপ্টটি ক্যাশিংয়ের জন্য বর্তমান কার্যকারী ডিরেক্টরির অধীনে bazel-build-cache
নামে একটি ডিরেক্টরি তৈরি করবে।
প্রকল্পে AAR ফাইল যোগ করুন
আপনার প্রকল্পে সরাসরি AAR আমদানি করে , অথবা আপনার স্থানীয় Maven সংগ্রহস্থলে কাস্টম AAR প্রকাশ করে AAR ফাইল যোগ করুন। মনে রাখবেন যে আপনি যদি এটি তৈরি করেন তবে আপনাকে tensorflow-lite-select-tf-ops.aar
এর জন্য AAR ফাইল যোগ করতে হবে।
iOS এর জন্য নির্বাচনী বিল্ড
বিল্ড এনভায়রনমেন্ট সেট আপ করতে এবং TensorFlow ওয়ার্কস্পেস কনফিগার করতে অনুগ্রহ করে স্থানীয়ভাবে বিল্ডিং বিভাগটি দেখুন এবং তারপর iOS-এর জন্য নির্বাচিত বিল্ড স্ক্রিপ্ট ব্যবহার করার জন্য গাইড অনুসরণ করুন।