หน้านี้จะอธิบายวิธีสร้างและใช้ไลบรารี LiteRT กับ CMake
คำแนะนำต่อไปนี้ได้รับการทดสอบใน Ubuntu 16.04.3 PC แบบ 64 บิต (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 ของไลบรารีด้วยตามหลักการ
โดยโปรเจ็กต์ที่ต้องใช้ 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
การคอมไพล์แบบข้ามระบบ
คุณใช้ CMake เพื่อสร้างไบนารีสำหรับสถาปัตยกรรมเป้าหมายของ ARM64 หรือ Android ได้
ในการคอมไพล์ LiteRT ข้ามแพลตฟอร์ม คุณจะต้องใส่เส้นทางไปยัง
SDK (เช่น ARM64 SDK หรือ NDK ในกรณีของ Android) ที่มี -DCMAKE_TOOLCHAIN_FILE
แจ้ง
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
ข้อมูลจำเพาะของการคอมไพล์แบบข้ามระบบของ Android
สำหรับการคอมไพล์แบบข้ามระบบของ Android คุณต้องติดตั้ง
Android NDK และระบุเส้นทาง NDK ด้วย
-DCMAKE_TOOLCHAIN_FILE
การแจ้งข้างต้น คุณต้องกำหนด ABI เป้าหมายด้วย
ที่มี-DANDROID_ABI
Flag
cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
ข้อมูลจำเพาะของการทดสอบเคอร์เนล (หน่วย) แบบข้ามการคอมไพล์
การคอมไพล์การทดสอบ 1 หน่วยแบบข้ามหน่วยต้องใช้คอมไพเลอร์ Flatc สำหรับโฮสต์
สถาปัตยกรรม สำหรับวัตถุประสงค์นี้ มี CMakeLists อยู่ใน
tensorflow/lite/tools/cmake/native_tools/flatbuffers
เพื่อสร้างแฟลต
คอมไพเลอร์ที่มี CMake ล่วงหน้าในไดเรกทอรีบิลด์แยกต่างหากโดยใช้โฮสต์
Toolchain
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 .
สำหรับ LiteRT การคอมไพล์ตัวเอง พารามิเตอร์เพิ่มเติม
-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" สำหรับ LiteRT แล้ว
สร้างการทดสอบที่ได้จะสร้างขึ้นโดยมีป้ายกำกับที่แตกต่างกัน 2 ป้าย
(โดยใช้ไฟล์ปฏิบัติการทดสอบเดียวกัน): - ธรรมดา - แสดงถึงการทดสอบที่ดำเนินการอยู่
แบ็กเอนด์ CPU - ตัวแทน - บ่งบอกถึงการทดสอบที่คาดว่าจะมีการเปิดตัวเพิ่มเติม
อาร์กิวเมนต์ที่ใช้สำหรับข้อกำหนดผู้รับมอบสิทธิ์ที่ใช้
ทั้ง CTestTestfile.cmake
และ run-tests.cmake
(ตามที่แนะนำด้านล่าง)
มีให้บริการใน <build_dir>/kernels
การเปิดตัวการทดสอบหน่วยด้วยแบ็กเอนด์ CPU (หาก CTestTestfile.cmake
คือ
อยู่ในเป้าหมายในไดเรกทอรีปัจจุบัน):
ctest -L plain
ปล่อยตัวอย่างการทดสอบ 1 หน่วยโดยใช้ผู้รับมอบสิทธิ์ (โดย
พบไฟล์ 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
ข้อจำกัดที่ทราบของวิธีจัดหาผู้รับมอบสิทธิ์เพิ่มเติม เปิดอาร์กิวเมนต์ของการทดสอบ 1 หน่วยก็คือ ฟังก์ชันนี้จะสนับสนุนเฉพาะรายการที่มี มูลค่าผลตอบแทนที่คาดไว้เท่ากับ 0 ค่าผลลัพธ์ที่แตกต่างกันจะรายงานเป็น การทดสอบล้มเหลว
ผู้รับมอบสิทธิ์ GPU ของ OpenCL
หากเครื่องเป้าหมายมีการรองรับ OpenCL คุณสามารถใช้ ผู้แทน GPU ซึ่งสามารถ ใช้ประโยชน์จากพลัง GPU ของคุณ
วิธีกำหนดค่าการรองรับการมอบสิทธิ์ GPU ของ OpenCL
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]
เช่น -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 ที่ใช้ LiteRT
นี่คือ CMakeLists.txt ของ ตัวอย่าง TFLite แบบมินิมอล
คุณต้องมี add_subdirectory() สำหรับไดเรกทอรีและลิงก์ LiteRT
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)
สร้างไลบรารี LiteRT C
หากต้องการสร้างไลบรารีที่ใช้ร่วมกันของ LiteRT สำหรับ 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 |