หน้านี้อธิบายวิธีสร้างและใช้ไลบรารี TensorFlow Lite ด้วยเครื่องมือ CMake
วิธีการต่อไปนี้ได้รับการทดสอบใน Ubuntu 16.04.3 64-bit PC (AMD64) , macOS Catalina (x86_64), Windows 10 และ TensorFlow devel Docker อิมเมจ tensorflow/tensorflow:devel
ขั้นตอนที่ 1 ติดตั้งเครื่องมือ CMake
ต้องใช้ CMake 3.16 ขึ้นไป บน Ubuntu คุณสามารถเรียกใช้คำสั่งต่อไปนี้
sudo apt-get install cmake
หรือคุณจะทำตามคู่มือการติดตั้งอย่างเป็นทางการของ cmake ก็ได้
ขั้นตอนที่ 2 โคลนที่เก็บ TensorFlow
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
เพื่อเรียกใช้การทดสอบเคอร์เนล ข้อมูลจำเพาะของการคอมไพล์การทดสอบ 1 หน่วยจะอยู่ในส่วนย่อยถัดไป
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on
สร้างแพ็กเกจที่ติดตั้งได้
หากต้องการสร้างแพ็กเกจแบบติดตั้งได้ที่ใช้เป็นทรัพยากร Dependency โดยโปรเจ็กต์ CMake อื่นที่มี find_package(tensorflow-lite CONFIG)
ให้ใช้ตัวเลือก -DTFLITE_ENABLE_INSTALL=ON
นอกจากนี้คุณควรระบุทรัพยากร Dependency ของไลบรารีในเวอร์ชันของคุณเองด้วย
ซึ่งโปรเจ็กต์ที่ต้องใช้ 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
find_package
การคอมไพล์แบบข้ามระบบ
คุณใช้ CMake เพื่อสร้างไบนารีสำหรับสถาปัตยกรรมเป้าหมายของ ARM64 หรือ Android ได้
ในคอมไพล์ TF Lite แบบข้ามแพลตฟอร์ม คุณต้องระบุเส้นทางไปยัง SDK (เช่น ARM64 SDK หรือ NDK ในกรณีของ Android) พร้อมแฟล็ก -DCMAKE_TOOLCHAIN_FILE
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
ข้อมูลจำเพาะของการคอมไพล์แบบข้ามระบบ Android
สำหรับการคอมไพล์ข้ามแพลตฟอร์มของ Android คุณต้องติดตั้ง
Android NDK และระบุเส้นทาง NDK พร้อม
-DCMAKE_TOOLCHAIN_FILE
Flag ที่กล่าวถึงข้างต้น นอกจากนี้ คุณยังต้องตั้งค่า ABI เป้าหมายด้วย -DANDROID_ABI
อีกด้วย
cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
ข้อมูลจำเพาะของเคอร์เนล (หน่วย) ทดสอบการคอมไพล์ข้าม
การคอมไพล์การทดสอบ 1 หน่วยข้ามหน่วยต้องใช้คอมไพเลอร์แฟลตสำหรับสถาปัตยกรรมของโฮสต์ สำหรับวัตถุประสงค์นี้ จะมี CMakeLists อยู่ใน tensorflow/lite/tools/cmake/native_tools/flatbuffers
เพื่อสร้างคอมไพเลอร์ Flatc ด้วย CMake ก่อนล่วงหน้าในไดเรกทอรีบิลด์ที่แยกต่างหากโดยใช้ Toolchain ของโฮสต์
mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
นอกจากนี้คุณยังสามารถติดตั้ง flatc ในตำแหน่งการติดตั้งที่กำหนดเอง (เช่น ไปยังไดเรกทอรีที่มีเครื่องมืออื่นๆ ที่สร้างขึ้นมาในตัวแทนไดเรกทอรี CMakebuild) ดังนี้
cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
สำหรับการคอมไพล์ข้ามของ TF Lite คุณต้องระบุพารามิเตอร์เพิ่มเติม -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path>
ที่ชี้ไปยังไดเรกทอรีที่มีไบนารี flatc เนทีฟพร้อมกับแฟล็ก -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/
เปิดตัวการทดสอบเคอร์เนล (หน่วย) ที่คอมไพล์ข้ามเป้าหมาย
คุณจะทดสอบ 1 หน่วยเป็นไฟล์ปฏิบัติการแยกต่างหากหรือจะใช้ยูทิลิตี CTest ก็ได้ ตามที่ CTest กังวล หากมีพารามิเตอร์อย่างน้อย 1 รายการ
TFLITE_ENABLE_XNNPACKor
TFLITE_EXTERNAL_DELEGATE" เปิดใช้อยู่สำหรับบิลด์ TF Lite
ระบบจะสร้างการทดสอบผลลัพธ์ด้วยป้ายกำกับ 2 แบบ
(โดยใช้ไฟล์ดำเนินการทดสอบเดียวกัน) ได้แก่ - ทั่วไป - แสดงการทดสอบที่ใช้ซึ่งเปิดใช้ใน
CPU - ระบุการทดสอบเพิ่มเติมซึ่งทำงานบน
CPU
ทั้ง 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
วิธีกำหนดค่าการรองรับการมอบสิทธิ์ GPU ของ OpenCL มีดังนี้
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 ซึ่งจะเปิดใช้โดยค่าเริ่มต้น
ชื่อตัวเลือก | ฟีเจอร์ | Android | Linux | macOS | Windows |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY
|
เปิดใช้ไลบรารีการคูณ เมทริกซ์ RUY | เปิด | ปิด | ปิด | ปิด |
TFLITE_ENABLE_GPU
|
เปิดใช้การมอบสิทธิ์ GPU | ปิด | ปิด | ไม่มีข้อมูล | ไม่มีข้อมูล |
TFLITE_ENABLE_XNNPACK
|
เปิดใช้ผู้รับมอบสิทธิ์ XNNPACK | เปิด | เปิด | เปิด | เปิด |
TFLITE_ENABLE_MMAP |
เปิดใช้ MMAP | เปิด | เปิด | เปิด | ไม่มีข้อมูล |
สร้างโปรเจ็กต์ CMake ที่ใช้ TensorFlow Lite
ต่อไปนี้เป็น CMakeLists.txt ของตัวอย่าง TFLite Mini
คุณต้องมี add_subdirectory() สำหรับไดเรกทอรีและลิงก์ TensorFlow Lite 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
หากต้องการสร้างไลบรารีที่ใช้ร่วมกันของ TensorFlow Lite สำหรับ C API ให้ทำตามขั้นตอนที่ 1 ไปยังขั้นตอนที่ 3 ก่อน หลังจากนั้น ให้เรียกใช้คำสั่งต่อไปนี้
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
คำสั่งนี้จะสร้างไลบรารีที่ใช้ร่วมกันต่อไปนี้ในไดเรกทอรีปัจจุบัน
แพลตฟอร์ม | ชื่อห้องสมุด |
---|---|
Linux | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
Windows | tensorflowlite_c.dll |