CMake দিয়ে LiteRT তৈরি করুন

এই পৃষ্ঠাটি বর্ণনা করে কিভাবে CMake টুলের সাহায্যে LiteRT লাইব্রেরি তৈরি এবং ব্যবহার করতে হয়।

নিম্নলিখিত নির্দেশাবলী উবুন্টু 16.04.3 64-বিট PC (AMD64), macOS Catalina (x86_64), Windows 10 এবং TensorFlow ডেভেল ডকার ইমেজ tensorflow/tensorflow:devel- এ পরীক্ষা করা হয়েছে।

ধাপ 1. CMake টুল ইনস্টল করুন

এটির জন্য CMake 3.16 বা উচ্চতর প্রয়োজন। উবুন্টুতে, আপনি কেবল নিম্নলিখিত কমান্ডটি চালাতে পারেন।

sudo apt-get install cmake

অথবা আপনি অফিসিয়াল cmake ইনস্টলেশন গাইড অনুসরণ করতে পারেন

ধাপ 2. টেনসরফ্লো রিপোজিটরি ক্লোন করুন

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

ধাপ 3. CMake বিল্ড ডিরেক্টরি তৈরি করুন

mkdir tflite_build
cd tflite_build

ধাপ 4. কনফিগারেশন সহ CMake টুল চালান

রিলিজ বিল্ড

এটি ডিফল্টরূপে একটি অপ্টিমাইজ করা রিলিজ বাইনারি তৈরি করে। আপনি যদি আপনার ওয়ার্কস্টেশনের জন্য তৈরি করতে চান তবে কেবল নিম্নলিখিত কমান্ডটি চালান।

cmake ../tensorflow_src/tensorflow/lite

ডিবাগ বিল্ড

আপনি যদি একটি ডিবাগ বিল্ড তৈরি করতে চান যাতে প্রতীক তথ্য রয়েছে, আপনাকে -DCMAKE_BUILD_TYPE=Debug বিকল্পটি প্রদান করতে হবে।

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

কার্নেল ইউনিট পরীক্ষা দিয়ে তৈরি করুন

কার্নেল পরীক্ষা চালাতে সক্ষম হওয়ার জন্য, আপনাকে -DTFLITE_KERNEL_TEST=on পতাকা প্রদান করতে হবে। ইউনিট টেস্ট ক্রস-কম্পাইলেশন স্পেসিফিকেশন পরবর্তী উপধারায় পাওয়া যাবে।

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

ইনস্টলযোগ্য প্যাকেজ তৈরি করুন

find_package(tensorflow-lite CONFIG) সহ অন্য CMake প্রকল্পের দ্বারা নির্ভরতা হিসাবে ব্যবহার করা যেতে পারে এমন একটি ইনস্টলযোগ্য প্যাকেজ তৈরি করতে, -DTFLITE_ENABLE_INSTALL=ON বিকল্পটি ব্যবহার করুন।

আপনি আদর্শভাবে আপনার লাইব্রেরি নির্ভরতার নিজস্ব সংস্করণ প্রদান করা উচিত. LiteRT-এর উপর নির্ভর করে এমন প্রজেক্টের দ্বারাও এগুলো ব্যবহার করতে হবে। আপনি -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON ব্যবহার করতে পারেন এবং আপনার লাইব্রেরি ইনস্টলেশনের দিকে নির্দেশ করতে <PackageName>_DIR ভেরিয়েবল সেট করতে পারেন।

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_INSTALL=ON \
  -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON \
  -DSYSTEM_FARMHASH=ON \
  -DSYSTEM_PTHREADPOOL=ON \
  -Dabsl_DIR=<install path>/lib/cmake/absl \
  -DEigen3_DIR=<install path>/share/eigen3/cmake \
  -DFlatBuffers_DIR=<install path>/lib/cmake/flatbuffers \
  -Dgemmlowp_DIR=<install path>/lib/cmake/gemmlowp \
  -DNEON_2_SSE_DIR=<install path>/lib/cmake/NEON_2_SSE \
  -Dcpuinfo_DIR=<install path>/share/cpuinfo \
  -Druy_DIR=<install path>/lib/cmake/ruy

ক্রস-সংকলন

আপনি ARM64 বা Android টার্গেট আর্কিটেকচারের জন্য বাইনারি তৈরি করতে CMake ব্যবহার করতে পারেন।

LiteRT ক্রস-কম্পাইল করার জন্য, আপনাকে -DCMAKE_TOOLCHAIN_FILE পতাকা সহ SDK (যেমন ARM64 SDK বা Android এর ক্ষেত্রে NDK) পাথ প্রদান করতে হবে।

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
অ্যান্ড্রয়েড ক্রস-কম্পাইলেশনের বিশেষত্ব

Android ক্রস-সংকলনের জন্য, আপনাকে Android NDK ইনস্টল করতে হবে এবং উপরে উল্লিখিত -DCMAKE_TOOLCHAIN_FILE পতাকা সহ NDK পাথ প্রদান করতে হবে। এছাড়াও আপনাকে -DANDROID_ABI পতাকা সহ লক্ষ্য ABI সেট করতে হবে৷

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
কার্নেল (ইউনিট) পরীক্ষা ক্রস-সংকলনের নির্দিষ্টকরণ

ইউনিট পরীক্ষার ক্রস-সংকলনের জন্য হোস্ট আর্কিটেকচারের জন্য ফ্ল্যাটসি কম্পাইলার প্রয়োজন। এই উদ্দেশ্যে, tensorflow/lite/tools/cmake/native_tools/flatbuffers এ অবস্থিত একটি CMakeLists রয়েছে যা হোস্ট টুলচেন ব্যবহার করে একটি পৃথক বিল্ড ডিরেক্টরিতে CMake-এর সাথে ফ্ল্যাটক কম্পাইলার তৈরি করতে।

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

ফ্ল্যাটসি একটি কাস্টম ইনস্টলেশন অবস্থানে ইনস্টল করাও সম্ভব (যেমন, CMake বিল্ড ডিরেক্টরির পরিবর্তে অন্যান্য নেটিভলি-নির্মিত সরঞ্জাম ধারণকারী ডিরেক্টরিতে):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

LiteRT ক্রস-কম্পাইলেশনের জন্য, অতিরিক্ত প্যারামিটার -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> নেটিভ ফ্ল্যাটক বাইনারি ধারণকারী ডিরেক্টরির দিকে নির্দেশ করে উপরে উল্লিখিত পতাকার -DTFLITE_KERNEL_TEST=on এর সাথে প্রদান করতে হবে।

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
ক্রস-কম্পাইল করা কার্নেল (ইউনিট) পরীক্ষাগুলি লক্ষ্যে চালু হয়

ইউনিট পরীক্ষাগুলি পৃথক এক্সিকিউটেবল হিসাবে বা CTest ইউটিলিটি ব্যবহার করে চালানো যেতে পারে। যতদূর CTest সম্পর্কিত, যদি TFLITE_ENABLE_XNNPACK or TFLITE_EXTERNAL_DELEGATE` প্যারামিটারগুলির মধ্যে অন্তত একটি LiteRT বিল্ডের জন্য সক্ষম করা থাকে, ফলাফল পরীক্ষাগুলি দুটি ভিন্ন লেবেল দিয়ে তৈরি করা হয় (একই পরীক্ষা কার্যকর করার যোগ্য ব্যবহার করে): - প্লেইন - পরীক্ষাগুলি চালানোর নির্দেশ করে সিপিইউ ব্যাকএন্ডে - প্রতিনিধি - ব্যবহৃত প্রতিনিধি স্পেসিফিকেশনের জন্য ব্যবহৃত অতিরিক্ত লঞ্চ আর্গুমেন্টের প্রত্যাশা করে পরীক্ষাগুলি নির্দেশ করে

CTestTestfile.cmake এবং run-tests.cmake (নিচে উল্লেখ করা হয়েছে) উভয়ই <build_dir>/kernels এ উপলব্ধ।

CPU ব্যাকএন্ড সহ ইউনিট পরীক্ষা চালু করা (প্রদত্ত CTestTestfile.cmake বর্তমান ডিরেক্টরিতে লক্ষ্যে উপস্থিত থাকে):

ctest -L plain

প্রতিনিধিদের ব্যবহার করে ইউনিট পরীক্ষার উদাহরণ চালু করুন (প্রদত্ত CTestTestfile.cmake পাশাপাশি run-tests.cmake ফাইল বর্তমান ডিরেক্টরিতে লক্ষ্যে উপস্থিত রয়েছে):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

ইউনিট পরীক্ষায় অতিরিক্ত প্রতিনিধি-সম্পর্কিত লঞ্চ আর্গুমেন্ট প্রদানের এই পদ্ধতির একটি পরিচিত সীমাবদ্ধতা হল যে এটি কার্যকরভাবে শুধুমাত্র তাদের সমর্থন করে যাদের প্রত্যাশিত রিটার্ন মান 0 আছে । পরীক্ষার ব্যর্থতা হিসাবে বিভিন্ন রিটার্ন মান রিপোর্ট করা হবে।

OpenCL GPU প্রতিনিধি

যদি আপনার টার্গেট মেশিনে OpenCL সমর্থন থাকে, তাহলে আপনি GPU প্রতিনিধি ব্যবহার করতে পারেন যা আপনার GPU শক্তিকে কাজে লাগাতে পারে।

OpenCL GPU প্রতিনিধি সমর্থন কনফিগার করতে:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

ধাপ 5. LiteRT তৈরি করুন

tflite_build ডিরেক্টরিতে,

cmake --build . -j

ধাপ 6. LiteRT বেঞ্চমার্ক টুল এবং লেবেল ছবির উদাহরণ তৈরি করুন (ঐচ্ছিক)

tflite_build ডিরেক্টরিতে,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

LiteRT বিল্ড করার জন্য উপলব্ধ বিকল্প

এখানে উপলব্ধ বিকল্পের তালিকা আছে. আপনি এটিকে -D<option_name>=[ON|OFF] দিয়ে ওভাররাইড করতে পারেন। উদাহরণস্বরূপ, XNNPACK নিষ্ক্রিয় করতে -DTFLITE_ENABLE_XNNPACK=OFF যা ডিফল্টরূপে সক্রিয়।

বিকল্পের নাম বৈশিষ্ট্য অ্যান্ড্রয়েড লিনাক্স macOS উইন্ডোজ
TFLITE_ENABLE_RUY RUY ম্যাট্রিক্স গুণ লাইব্রেরি সক্ষম করুন৷ চালু বন্ধ বন্ধ বন্ধ
TFLITE_ENABLE_GPU GPU প্রতিনিধি সক্ষম করুন বন্ধ বন্ধ N/A N/A
TFLITE_ENABLE_XNNPACK XNNPACK প্রতিনিধি সক্ষম করুন৷ চালু চালু চালু চালু
TFLITE_ENABLE_MMAP MMAP সক্ষম করুন৷ চালু চালু চালু N/A

একটি CMake প্রকল্প তৈরি করুন যা LiteRT ব্যবহার করে

এখানে TFLite ন্যূনতম উদাহরণের CMakeLists.txt।

আপনার LiteRT ডিরেক্টরির জন্য add_subdirectory() থাকতে হবে এবং target_link_libraries() এর সাথে tensorflow-lite লিঙ্ক করতে হবে।

cmake_minimum_required(VERSION 3.16)
project(minimal C CXX)

set(TENSORFLOW_SOURCE_DIR "" CACHE PATH
  "Directory that contains the TensorFlow project" )
if(NOT TENSORFLOW_SOURCE_DIR)
  get_filename_component(TENSORFLOW_SOURCE_DIR
    "${CMAKE_CURRENT_LIST_DIR}/../../../../" ABSOLUTE)
endif()

add_subdirectory(
  "${TENSORFLOW_SOURCE_DIR}/tensorflow/lite"
  "${CMAKE_CURRENT_BINARY_DIR}/tensorflow-lite" EXCLUDE_FROM_ALL)

add_executable(minimal minimal.cc)
target_link_libraries(minimal tensorflow-lite)

LiteRT C লাইব্রেরি তৈরি করুন

আপনি যদি C API- এর জন্য LiteRT শেয়ার্ড লাইব্রেরি তৈরি করতে চান, প্রথমে ধাপ 1 থেকে ধাপ 3 অনুসরণ করুন। এর পরে, নিম্নলিখিত কমান্ডগুলি চালান।

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

এই কমান্ডটি বর্তমান ডিরেক্টরিতে নিম্নলিখিত ভাগ করা লাইব্রেরি তৈরি করে।

প্ল্যাটফর্ম লাইব্রেরির নাম
লিনাক্স libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
উইন্ডোজ tensorflowlite_c.dll