เข้าร่วม Women in ML Symposium ในวันที่ 7 ธันวาคม ลงทะเบียนตอนนี้

สร้าง TensorFlow Lite ด้วย CMake

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

หน้านี้อธิบายวิธีสร้างและใช้ไลบรารี TensorFlow Lite ด้วยเครื่องมือ CMake

คำแนะนำต่อไปนี้ได้รับการทดสอบบน Ubuntu 16.04.3 64-bit PC (AMD64) , macOS Catalina (x86_64), Windows 10 และ TensorFlow พัฒนา Docker image 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' ข้อมูลเฉพาะของการรวบรวมข้ามการทดสอบหน่วยสามารถพบได้ในหัวข้อย่อยถัดไป

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

สร้างแพ็คเกจที่ติดตั้งได้

ในการสร้างแพ็คเกจที่ติดตั้งได้ซึ่งสามารถใช้เป็นการพึ่งพาโดยโปรเจ็กต์ CMake อื่นด้วย find_package(tensorflow-lite CONFIG) ให้ใช้ -DTFLITE_ENABLE_INSTALL=ON

คุณควรจัดเตรียมการพึ่งพาไลบรารีเวอร์ชันของคุณเองด้วย สิ่งเหล่านี้จะต้องใช้โดยโครงการที่ขึ้นอยู่กับ 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 \
  -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

การรวบรวมข้าม

คุณสามารถใช้ CMake เพื่อสร้างไบนารีสำหรับสถาปัตยกรรมเป้าหมาย ARM64 หรือ Android

ในการคอมไพล์ TF Lite คุณต้องระบุพาธไปยัง SDK (เช่น ARM64 SDK หรือ NDK ในกรณีของ Android) ด้วยแฟ -DCMAKE_TOOLCHAIN_FILE

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
ข้อมูลเฉพาะของ Android cross-compilation

สำหรับการคอมไพล์ข้าม Android คุณต้องติดตั้ง Android NDK และระบุพาธ NDK ด้วยแฟ -DCMAKE_TOOLCHAIN_FILE กล่าวถึงข้างต้น คุณต้องตั้งค่า ABI เป้าหมายด้วยแฟ -DANDROID_ABI ด้วย

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
ข้อมูลจำเพาะของเคอร์เนล (หน่วย) การทดสอบการคอมไพล์ข้าม

การคอมไพล์ข้ามหน่วยการทดสอบต้องใช้คอมไพเลอร์ flatc สำหรับสถาปัตยกรรมโฮสต์ เพื่อจุดประสงค์นี้มี CMakeLists อยู่ใน tensorflow/lite/tools/cmake/native_tools/flatbuffers เพื่อสร้างคอมไพเลอร์ flatc ด้วย CMake ล่วงหน้าในไดเร็กทอรี build แยกต่างหากโดยใช้ host toolchain

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

เป็นไปได้ ที่จะติดตั้ง flatc ไปยังตำแหน่งการติดตั้งแบบกำหนดเอง (เช่น ไปยังไดเร็กทอรีที่มีเครื่องมืออื่น ๆ ที่สร้างขึ้นโดยกำเนิดแทนไดเร็กทอรี CMake build):

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/
การทดสอบเคอร์เนล (หน่วย) ที่คอมไพล์ข้ามเปิดตัวบนเป้าหมาย

การทดสอบหน่วยสามารถเรียกใช้เป็นไฟล์เรียกทำงานแยกต่างหากหรือใช้ยูทิลิตี้ CTest เท่าที่เกี่ยวข้องกับ CTest หากมีการเปิดใช้งานพารามิเตอร์อย่างน้อยหนึ่งพารามิเตอร์ TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK หรือ TFLITE_EXTERNAL_DELEGATE สำหรับบิลด์ TF Lite การทดสอบที่ได้จะถูกสร้างขึ้นด้วยป้ายกำกับที่แตกต่างกันสอง ป้าย (โดยใช้การทดสอบเดียวกัน): - ธรรมดา - หมายถึงการทดสอบ ตัวที่ทำงานบน 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_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

หากเครื่องเป้าหมายของคุณรองรับ OpenCL คุณสามารถใช้ ผู้แทน 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 ซึ่งเปิดใช้งานโดยค่าเริ่มต้น

ตัวเลือกชื่อ ลักษณะเฉพาะ Android ลินุกซ์ macOS Windows
TFLITE_ENABLE_RUY เปิดใช้งานไลบรารีการคูณเมทริกซ์ RUY บน ปิด ปิด ปิด
TFLITE_ENABLE_NNAPI เปิดใช้งานผู้รับมอบสิทธิ์ NNAPI บน ปิด ไม่มี ไม่มี
TFTLITE_ENABLE_GPU เปิดใช้งานผู้รับมอบสิทธิ์ GPU ปิด ปิด ไม่มี ไม่มี
TFLITE_ENABLE_XNNPACK เปิดใช้งานผู้รับมอบสิทธิ์ XNNPACK บน บน บน บน
TFLITE_ENABLE_MMAP เปิดใช้งาน MMAP บน บน บน ไม่มี

สร้างโครงการ CMake ซึ่งใช้ TensorFlow Lite

นี่คือ CMakeLists.txt ของ TFLite ตัวอย่างขั้นต่ำ

คุณต้องมี 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

คำสั่งนี้สร้างไลบรารีที่แบ่งใช้ต่อไปนี้ในไดเร็กทอรีปัจจุบัน

แพลตฟอร์ม ชื่อห้องสมุด
ลินุกซ์ libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll