LiteRT বাইনারি আকার হ্রাস করুন

সংক্ষিপ্ত বিবরণ

অন-ডিভাইস মেশিন লার্নিং (ODML) অ্যাপ্লিকেশনের জন্য মডেল স্থাপন করার সময়, মোবাইল ডিভাইসে উপলব্ধ সীমিত মেমোরি সম্পর্কে সচেতন থাকা গুরুত্বপূর্ণ। মডেল বাইনারি আকারগুলি মডেলে ব্যবহৃত অপশনের সংখ্যার সাথে ঘনিষ্ঠভাবে সম্পর্কিত। LiterRT আপনাকে নির্বাচনী বিল্ড ব্যবহার করে মডেল বাইনারি আকার হ্রাস করতে সক্ষম করে। নির্বাচনী বিল্ডগুলি আপনার মডেল সেটে অব্যবহৃত ক্রিয়াকলাপগুলি এড়িয়ে যায় এবং আপনার মোবাইল ডিভাইসে মডেলটি চালানোর জন্য প্রয়োজনীয় রানটাইম এবং অপশন কার্নেল সহ একটি কমপ্যাক্ট লাইব্রেরি তৈরি করে।

নিম্নলিখিত তিনটি অপারেশন লাইব্রেরিতে সিলেক্টিভ বিল্ড প্রযোজ্য।

  1. LiterRT বিল্ট-ইন অপ্স লাইব্রেরি
  2. LiterRT কাস্টম অপ্স
  3. টেনসরফ্লো অপ্স লাইব্রেরি নির্বাচন করুন

নীচের টেবিলটি কিছু সাধারণ ব্যবহারের ক্ষেত্রে নির্বাচনী বিল্ডের প্রভাব প্রদর্শন করে:

মডেলের নাম ডোমেইন লক্ষ্য স্থাপত্য AAR ফাইলের আকার(গুলি)
মোবাইলনেট_১.০_২২৪(ফ্লোট) ছবির শ্রেণীবিভাগ আরমেবি-v7a tensorflow-lite.aar (২৯৬,৬৩৫ বাইট)
arm64-v8a সম্পর্কে tensorflow-lite.aar (৩৮২,৮৯২ বাইট)
মশলা শব্দের পিচ নিষ্কাশন আরমেবি-v7a tensorflow-lite.aar (৩৭৫,৮১৩ বাইট)
টেনসরফ্লো-লাইট-সিলেক্ট-টিএফ-অপস.এআর (১,৬৭৬,৩৮০ বাইট)
arm64-v8a সম্পর্কে tensorflow-lite.aar (৪২১,৮২৬ বাইট)
টেনসরফ্লো-লাইট-সিলেক্ট-টিএফ-অপস.এআর (২,২৯৮,৬৩০ বাইট)
i3d-গতিবিদ্যা-400 ভিডিও শ্রেণীবিভাগ আরমেবি-v7a tensorflow-lite.aar (২৪০,০৮৫ বাইট)
টেনসরফ্লো-লাইট-সিলেক্ট-টিএফ-অপস.এআর (১,৭০৮,৫৯৭ বাইট)
arm64-v8a সম্পর্কে tensorflow-lite.aar (২৭৩,৭১৩ বাইট)
টেনসরফ্লো-লাইট-সিলেক্ট-টিএফ-অপস.এআর (২,৩৩৯,৬৯৭ বাইট)

Bazel দিয়ে বেছে বেছে LiterRT তৈরি করুন

এই বিভাগটি ধরে নিয়েছে যে আপনি TensorFlow সোর্স কোড ডাউনলোড করেছেন এবং Bazel-এ স্থানীয় ডেভেলপমেন্ট পরিবেশ সেট আপ করেছেন

অ্যান্ড্রয়েড প্রকল্পের জন্য AAR ফাইল তৈরি করুন

আপনি নিম্নরূপ আপনার মডেল ফাইল পাথ প্রদান করে কাস্টম LiterRT 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

উপরের কমান্ডটি LiterRT বিল্ট-ইন এবং কাস্টম অপশনের জন্য AAR ফাইল bazel-bin/tmp/tensorflow-lite.aar তৈরি করবে; এবং ঐচ্ছিকভাবে, যদি আপনার মডেলগুলিতে Select TensorFlow অপশন থাকে তবে aar ফাইল bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar তৈরি করবে। মনে রাখবেন যে এটি বেশ কয়েকটি ভিন্ন আর্কিটেকচার সহ একটি "ফ্যাট" AAR তৈরি করে; যদি আপনার সবগুলির প্রয়োজন না হয়, তাহলে আপনার স্থাপনার পরিবেশের জন্য উপযুক্ত সাবসেটটি ব্যবহার করুন।

কাস্টম অপ্স দিয়ে তৈরি করুন

যদি আপনি কাস্টম অপ্স সহ LiterRT মডেল তৈরি করে থাকেন, তাহলে আপনি 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 ব্যবহার করে এবং আপনি নির্দিষ্ট মডেলের সেটের জন্য কাস্টম 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

কাস্টম সি শেয়ার্ড অবজেক্ট তৈরি করা

যদি আপনি একটি কাস্টম 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 অপশন সহ মডেলগুলির জন্য, আপনাকে নিম্নলিখিত শেয়ার্ড লাইব্রেরিটিও তৈরি করতে হবে:

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

ডকারের সাহায্যে বেছে বেছে LiterRT তৈরি করুন

এই বিভাগটি ধরে নিচ্ছে যে আপনি আপনার স্থানীয় মেশিনে ডকার ইনস্টল করেছেন এবং এখান থেকে LiterRT ডকারফাইলটি ডাউনলোড করেছেন।

উপরের ডকারফাইলটি ডাউনলোড করার পরে, আপনি নিম্নলিখিতটি চালিয়ে ডকার চিত্রটি তৈরি করতে পারেন:

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

তারপর, আপনি নিম্নরূপ আপনার মডেল ফাইল পাথ প্রদান করে কাস্টম LiterRT 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 রেপোর একটি ট্যাগ যা আপনি লাইব্রেরি তৈরি করার আগে চেকআউট করতে চান; ডিফল্টরূপে এটি সর্বশেষ রিলিজ শাখা। উপরের কমান্ডটি আপনার বর্তমান ডিরেক্টরিতে LiterRT বিল্ট-ইন এবং কাস্টম অপসের জন্য AAR ফাইল tensorflow-lite.aar এবং ঐচ্ছিকভাবে Select TensorFlow অপসের জন্য 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 এর জন্য সিলেক্টিভ বিল্ড

বিল্ড এনভায়রনমেন্ট সেট আপ করতে এবং টেনসরফ্লো ওয়ার্কস্পেস কনফিগার করতে অনুগ্রহ করে বিল্ডিং লোকালি বিভাগটি দেখুন এবং তারপর iOS এর জন্য নির্বাচনী বিল্ড স্ক্রিপ্ট ব্যবহার করতে নির্দেশিকা অনুসরণ করুন।