CMake के साथ TensorFlow Lite बनाएं

यह पृष्ठ वर्णन करता है कि CMake टूल के साथ TensorFlow Lite लाइब्रेरी का निर्माण और उपयोग कैसे करें।

निम्नलिखित निर्देशों का परीक्षण उबंटू 16.04.3 64-बिट पीसी (एएमडी64), मैकओएस कैटालिना (x86_64), विंडोज 10 और टेन्सरफ्लो डेवेल डॉकर इमेज टेन्सरफ्लो/टेन्सरफ्लो:डेवेल पर किया गया है।

चरण 1. सीएमके टूल इंस्टॉल करें

इसके लिए CMake 3.16 या उच्चतर की आवश्यकता है। उबंटू पर, आप बस निम्नलिखित कमांड चला सकते हैं।

sudo apt-get install cmake

या आप आधिकारिक सीएमके इंस्टॉलेशन गाइड का पालन कर सकते हैं

चरण 2. क्लोन TensorFlow रिपॉजिटरी

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

चरण 3. सीएमके बिल्ड निर्देशिका बनाएं

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 विकल्प का उपयोग करें।

आदर्श रूप से आपको लाइब्रेरी निर्भरता के अपने स्वयं के संस्करण भी उपलब्ध कराने चाहिए। इन्हें टीएफ लाइट पर निर्भर प्रोजेक्ट द्वारा भी उपयोग करने की आवश्यकता होगी। आप -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 का उपयोग कर सकते हैं।

टीएफ लाइट को क्रॉस-कंपाइल करने के लिए, आपको -DCMAKE_TOOLCHAIN_FILE ध्वज के साथ SDK (उदाहरण के लिए Android के मामले में ARM64 SDK या NDK) के लिए पथ प्रदान करना होगा।

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
एंड्रॉइड क्रॉस-संकलन की विशिष्टताएँ

एंड्रॉइड क्रॉस-संकलन के लिए, आपको एंड्रॉइड एनडीके इंस्टॉल करना होगा और ऊपर उल्लिखित -DCMAKE_TOOLCHAIN_FILE ध्वज के साथ एनडीके पथ प्रदान करना होगा। आपको -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 में एक सीएमकेलिस्ट स्थित है।

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

फ़्लैटसी को एक कस्टम इंस्टॉलेशन स्थान पर स्थापित करना भी संभव है (उदाहरण के लिए सीएमके बिल्ड निर्देशिका के बजाय अन्य मूल रूप से निर्मित टूल वाली निर्देशिका में):

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

टीएफ लाइट क्रॉस-संकलन के लिए, अतिरिक्त पैरामीटर -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 का सवाल है, यदि TF लाइट बिल्ड के लिए TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK या TFLITE_EXTERNAL_DELEGATE में से कम से कम एक पैरामीटर सक्षम है, तो परिणामी परीक्षण दो अलग-अलग लेबल (एक ही परीक्षण निष्पादन योग्य का उपयोग करके) के साथ उत्पन्न होते हैं: - सादा - परीक्षणों को दर्शाते हुए सीपीयू बैकएंड पर चलते हैं - प्रतिनिधि - प्रयुक्त प्रतिनिधि विनिर्देश के लिए उपयोग किए जाने वाले अतिरिक्त लॉन्च तर्कों की अपेक्षा वाले परीक्षणों को दर्शाते हैं

CTestTestfile.cmake और run-tests.cmake (जैसा कि नीचे बताया गया है) दोनों <build_dir>/kernels में उपलब्ध हैं।

सीपीयू बैकएंड के साथ यूनिट परीक्षणों का लॉन्च (बशर्ते CTestTestfile.cmake वर्तमान निर्देशिका में लक्ष्य पर मौजूद हो):

ctest -L plain

प्रतिनिधियों का उपयोग करके यूनिट परीक्षणों के उदाहरण लॉन्च करें (बशर्ते कि CTestTestfile.cmake के साथ-साथ run-tests.cmake फ़ाइल वर्तमान निर्देशिका में लक्ष्य पर मौजूद हो):

cmake -E env TESTS_ARGUMENTS=--use_nnapi=true\;--nnapi_accelerator_name=vsi-npu ctest -L delegate
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 प्रतिनिधि समर्थन को कॉन्फ़िगर करने के लिए:

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

चरण 5. TensorFlow Lite बनाएँ

tflite_build निर्देशिका में,

cmake --build . -j

चरण 6. TensorFlow Lite बेंचमार्क टूल और लेबल छवि उदाहरण बनाएं (वैकल्पिक)

tflite_build निर्देशिका में,

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

TensorFlow Lite बनाने के लिए उपलब्ध विकल्प

यहां उपलब्ध विकल्पों की सूची दी गई है. आप इसे -D<option_name>=[ON|OFF] से ओवरराइड कर सकते हैं। उदाहरण के लिए, -DTFLITE_ENABLE_XNNPACK=OFF XNNPACK को अक्षम करने के लिए जो डिफ़ॉल्ट रूप से सक्षम है।

विकल्प का नाम विशेषता एंड्रॉयड लिनक्स मैक ओएस खिड़कियाँ
TFLITE_ENABLE_RUY RUY मैट्रिक्स गुणन लाइब्रेरी सक्षम करें पर बंद बंद बंद
TFLITE_ENABLE_NNAPI एनएनएपीआई प्रतिनिधि सक्षम करें पर बंद एन/ए एन/ए
TFLITE_ENABLE_GPU GPU प्रतिनिधि सक्षम करें बंद बंद एन/ए एन/ए
TFLITE_ENABLE_XNNPACK XNNPACK प्रतिनिधि सक्षम करें पर पर पर पर
TFLITE_ENABLE_MMAP एमएमएपी सक्षम करें पर पर पर एन/ए

एक CMake प्रोजेक्ट बनाएं जो TensorFlow Lite का उपयोग करता हो

यहां TFLite न्यूनतम उदाहरण का CMakeLists.txt है।

आपके पास TensorFlow Lite निर्देशिका के लिए add_subdirectory() होना चाहिए और tensorflow-lite target_link_libraries() के साथ लिंक करना होगा।

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)

TensorFlow Lite C लाइब्रेरी बनाएं

यदि आप C API के लिए TensorFlow Lite साझा लाइब्रेरी बनाना चाहते हैं, तो पहले चरण 1 से चरण 3 का पालन करें। उसके बाद, निम्नलिखित कमांड चलाएँ।

लिनक्स/मैकओएस

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

खिड़कियाँ

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

संकलित पुस्तकालय

उपरोक्त आदेश वर्तमान निर्देशिका में निम्नलिखित साझा लाइब्रेरी उत्पन्न करता है।

प्लैटफ़ॉर्म पुस्तकालय का नाम
लिनक्स libtensorflowlite_c.so
मैक ओएस libtensorflowlite_c.dylib
खिड़कियाँ tensorflowlite_c.dll