इस पेज पर CMake टूल की मदद से TensorFlow Lite लाइब्रेरी बनाने और उसे इस्तेमाल करने का तरीका बताया गया है.
नीचे दिए गए निर्देशों की जांच, Ubuntu 16.04.3 64-बिट पीसी (AMD64), macOS Catalina (x86_64), Windows 10, और TensorFlow devel Docker इमेज tensorflow/tensorflow:devel पर जांच की गई है.
पहला चरण. C Maker टूल इंस्टॉल करें
इसके लिए C Maker 3.16 या इसके बाद का वर्शन होना चाहिए. Ubuntu पर, नीचे दिया गया कमांड चलाया जा सकता है.
sudo apt-get install cmake
इसके अलावा, cmake इंस्टॉल करने की आधिकारिक गाइड का पालन किया जा सकता है
दूसरा चरण. TensorFlow का डेटा स्टोर करने की जगह का क्लोन
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
तीसरा चरण. C Maker की बिल्ड डायरेक्ट्री बनाएं
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
कर्नेल यूनिट टेस्ट के साथ बनाएं
kernel टेस्ट चलाने के लिए, आपको -DTFLITE_KERNEL_TEST=on
फ़्लैग देना होगा. यूनिट टेस्ट के क्रॉस-कंपाइलेशन से जुड़ी खास जानकारी, अगले सब-सेक्शन में देखी जा सकती है.
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on
ऐसा पैकेज बनाएं जिसे इंस्टॉल किया जा सके
इंस्टॉल किया जा सकने वाला ऐसा पैकेज बनाने के लिए
-DTFLITE_ENABLE_INSTALL=ON
विकल्प का इस्तेमाल करें जिसका इस्तेमाल find_package(tensorflow-lite CONFIG)
के साथ किसी दूसरे Cमेक प्रोजेक्ट के लिए डिपेंडेंसी के तौर पर किया जा सके.
आम तौर पर, आपको लाइब्रेरी डिपेंडेंसी के अपने वर्शन भी उपलब्ध कराने चाहिए.
इन्हें TF Lite पर निर्भर प्रोजेक्ट में भी इस्तेमाल करना होगा. लाइब्रेरी इंस्टॉलेशन दिखाने के लिए, -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 का इस्तेमाल किया जा सकता है.
TF Lite को क्रॉस-कंपाइल करने के लिए, आपको -DCMAKE_TOOLCHAIN_FILE
फ़्लैग के साथ SDK टूल (उदाहरण के लिए, ARM64 SDK टूल या Android के मामले में NDK) का पाथ देना होगा.
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android क्रॉस-कंपाइलेशन की खास बातें
Android के क्रॉस-कंपिलेशन के लिए, आपको Android एनडीके इंस्टॉल करना होगा. साथ ही, ऊपर बताए गए -DCMAKE_TOOLCHAIN_FILE
फ़्लैग के साथ एनडीके पाथ देना होगा. आपको -DANDROID_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 मौजूद है, जो होस्ट टूलचेन का इस्तेमाल करके एक अलग बिल्ड डायरेक्ट्री में पहले से ही C Maker के साथ फ़्लैट सी कंपाइलर बना सकता है.
mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
पसंद के मुताबिक इंस्टॉल करने की जगह पर flatc को इंस्टॉल भी किया जा सकता है (उदाहरण के लिए, एक ऐसी डायरेक्ट्री के लिए जिसमें Cmake बिल्ड डायरेक्ट्री के बजाय, दूसरे मूल रूप से बनाए गए टूल मौजूद हैं):
cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
TF Lite के क्रॉस-कंपाइलेशन के लिए, नेटिव flatc बाइनरी वाली डायरेक्ट्री पर ले जाने वाला अतिरिक्त पैरामीटर
-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 सुविधा का इस्तेमाल करके चलाया जा सकता है. जहां तक Cटेस्ट का सवाल है, तो अगर TF Lite बिल्ड के लिए कम से कम एक पैरामीटर
TFLITE_ENABLE_XNNPACKor
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_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate
यूनिट टेस्ट में डेलिगेट से जुड़े अन्य लॉन्च के तर्क उपलब्ध कराने की एक सीमा यह है कि यह सिर्फ़ उन ही ऐप्लिकेशन के साथ काम करता है जिनकी उम्मीद के मुताबिक रिटर्न वैल्यू 0 है. अलग-अलग रिटर्न वैल्यू को जांच में गड़बड़ी के तौर पर रिपोर्ट किया जाएगा.
OpenCL जीपीयू प्रतिनिधि
अगर टारगेट मशीन में OpenCL काम करता है, तो GPU डेलिगेट का इस्तेमाल किया जा सकता है. यह आपके जीपीयू पावर का इस्तेमाल कर सकता है.
OpenCL जीपीयू डेलिगेट सहायता को कॉन्फ़िगर करने के लिए:
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON
पांचवां चरण. TensorFlow Lite बनाएं
tflite_build
डायरेक्ट्री में,
cmake --build . -j
छठा चरण. TensorFlow Lite बेंचमार्क टूल और लेबल इमेज का उदाहरण बनाएं (ज़रूरी नहीं)
tflite_build
डायरेक्ट्री में,
cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image
TensorFlow Lite बनाने के लिए उपलब्ध विकल्प
यहां उपलब्ध विकल्पों की सूची दी गई है. इसे -D<option_name>=[ON|OFF]
से बदला जा सकता है. उदाहरण के लिए, XNNPACK को बंद करने के लिए, -DTFLITE_ENABLE_XNNPACK=OFF
जो डिफ़ॉल्ट रूप से चालू होता है.
विकल्प का नाम | सुविधा | Android | Linux | macOS | Windows |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY
|
RUY मैट्रिक्स मल्टीप्लिकेशन लाइब्रेरी चालू करें | चालू है | बंद है | बंद है | बंद है |
TFLITE_ENABLE_GPU
|
जीपीयू डेलिगेट चालू करें | बंद है | बंद है | लागू नहीं | लागू नहीं |
TFLITE_ENABLE_XNNPACK
|
XNNPACK डीलिगेट चालू करें | चालू है | चालू है | चालू है | चालू है |
TFLITE_ENABLE_MMAP |
MMAP चालू करें | चालू है | चालू है | चालू है | लागू नहीं |
TensorFlow Lite का इस्तेमाल करने वाला Cमेक प्रोजेक्ट बनाना
यहां TFLite के कम से कम उदाहरण का C MakeLists.txt दिया गया है.
आपके पास TensorFlow Lite डायरेक्ट्री के लिए 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)
TensorFlow Lite C लाइब्रेरी बनाएं
अगर आपको C API के लिए, TensorFlow Lite की शेयर की गई लाइब्रेरी बनानी है, तो सबसे पहले पहले चरण से तीसरे चरण पर जाएं. इसके बाद, नीचे दिए गए निर्देशों को चलाएँ.
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
यह निर्देश, मौजूदा डायरेक्ट्री में शेयर की गई नीचे दी गई लाइब्रेरी जनरेट करता है.
प्लैटफ़ॉर्म | लाइब्रेरी का नाम |
---|---|
Linux | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
Windows | tensorflowlite_c.dll |