TensorFlow Lite বাইনারি সাইজ কমিয়ে দিন

ওভারভিউ

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

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

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

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

ণশড ডোমেইন টার্গেট আর্কিটেকচার 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_arm64 দিয়ে android_arm প্রতিস্থাপন করুন):

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_arm64 দিয়ে android_arm প্রতিস্থাপন করুন):

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_arm64 দিয়ে android_arm প্রতিস্থাপন করুন):

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-এর জন্য নির্বাচিত বিল্ড স্ক্রিপ্ট ব্যবহার করার জন্য গাইড অনুসরণ করুন।