सीएमके के साथ टेंसरफ्लो लाइट बनाएं

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

निम्नलिखित निर्देशों का परीक्षण Ubuntu 16.04.3 64-बिट PC (AMD64), macOS Catalina (x86_64), Windows 10 और TensorFlow devel Docker image tensorflow/tensorflow:devel पर किया गया है।

चरण 1. सीएमके उपकरण स्थापित करें

इसके लिए सीएमके 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 ../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) , -DTFLITE_ENABLE_INSTALL=ON विकल्प का उपयोग करें।

आपको आदर्श रूप से पुस्तकालय निर्भरताओं के अपने संस्करण भी प्रदान करने चाहिए। इन्हें उस प्रोजेक्ट द्वारा भी उपयोग करने की आवश्यकता होगी जो TF लाइट पर निर्भर करता है। आप -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON का उपयोग कर सकते हैं और अपनी लाइब्रेरी संस्थापन को इंगित करने के लिए <PackageName>_DIR चर सेट कर सकते हैं।

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_INSTALL=ON \
  -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON \
  -Dabsl_DIR=<install path>/lib/cmake/absl \
  -DEigen3_DIR=<install path>/share/eigen3/cmake \
  -DFlatbuffers_DIR=<install path>/lib/cmake/flatbuffers \
  -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 का उपयोग कर सकते हैं।

टीएफ लाइट को क्रॉस-कंपाइल करने के लिए, आपको एसडीके (जैसे एंड्रॉइड के मामले में एआरएम 64 एसडीके या एनडीके) को -DCMAKE_TOOLCHAIN_FILE ध्वज के साथ पथ प्रदान करने की आवश्यकता है।

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 में स्थित एक सीएमकेलिस्ट है।

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 है । विभिन्न वापसी मूल्यों को परीक्षण विफलता के रूप में रिपोर्ट किया जाएगा।

ओपनसीएल जीपीयू प्रतिनिधि

यदि आपकी लक्षित मशीन में ओपनसीएल समर्थन है, तो आप GPU प्रतिनिधि का उपयोग कर सकते हैं जो आपकी GPU शक्ति का लाभ उठा सकता है।

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 एमएमएपी सक्षम करें पर पर पर एन/ए

एक सीएमके प्रोजेक्ट बनाएं जो टेंसरफ्लो लाइट का उपयोग करता है

यहाँ 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

यह आदेश वर्तमान निर्देशिका में निम्नलिखित साझा पुस्तकालय उत्पन्न करता है।

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