Xây dựng TensorFlow Lite với CMake

Trang này mô tả cách xây dựng và sử dụng thư viện TensorFlow Lite bằng công cụ CMake .

Các hướng dẫn sau đã được thử nghiệm trên Ubuntu 16.04.3 PC 64-bit (AMD64), macOS Catalina (x86_64), Windows 10 và TensorFlow devel Docker image tensorflow/tensorflow:devel .

Bước 1. Cài đặt công cụ CMake

Nó yêu cầu CMake 3.16 trở lên. Trên Ubuntu, bạn chỉ cần chạy lệnh sau.

sudo apt-get install cmake

Hoặc bạn có thể làm theo hướng dẫn cài đặt cmake chính thức

Bước 2. Sao chép kho lưu trữ TensorFlow

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

Bước 3. Tạo thư mục bản dựng CMake

mkdir tflite_build
cd tflite_build

Bước 4. Chạy công cụ CMake với cấu hình

Bản phát hành

Nó tạo ra một bản phát hành nhị phân được tối ưu hóa theo mặc định. Nếu bạn muốn xây dựng cho máy trạm của mình, chỉ cần chạy lệnh sau.

cmake ../tensorflow_src/tensorflow/lite

Bản dựng gỡ lỗi

Nếu bạn cần tạo bản dựng gỡ lỗi có thông tin ký hiệu, bạn cần cung cấp tùy chọn -DCMAKE_BUILD_TYPE=Debug .

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

Xây dựng với các bài kiểm tra đơn vị hạt nhân

Để có thể chạy kiểm tra kernel, bạn cần cung cấp cờ -DTFLITE_KERNEL_TEST=on . Bạn có thể tìm thấy thông tin cụ thể về biên dịch chéo thử nghiệm đơn vị trong tiểu mục tiếp theo.

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

Xây dựng gói có thể cài đặt

Để xây dựng gói có thể cài đặt có thể được sử dụng làm gói phụ thuộc cho một dự án CMake khác với find_package(tensorflow-lite CONFIG) , hãy sử dụng tùy chọn -DTFLITE_ENABLE_INSTALL=ON .

Lý tưởng nhất là bạn cũng nên cung cấp các phiên bản phụ thuộc thư viện của riêng mình. Những thứ này cũng sẽ cần được sử dụng bởi dự án phụ thuộc vào TF Lite. Bạn có thể sử dụng -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON và đặt các biến <PackageName>_DIR để trỏ đến cài đặt thư viện của bạn.

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

Biên dịch chéo

Bạn có thể sử dụng CMake để xây dựng các tệp nhị phân cho kiến ​​trúc mục tiêu ARM64 hoặc Android.

Để biên dịch chéo TF Lite, cụ thể là bạn cần cung cấp đường dẫn đến SDK (ví dụ: SDK ARM64 hoặc NDK trong trường hợp của Android) với cờ -DCMAKE_TOOLCHAIN_FILE .

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Thông số cụ thể của việc biên dịch chéo Android

Để biên dịch chéo Android, bạn cần cài đặt Android NDK và cung cấp đường dẫn NDK với cờ -DCMAKE_TOOLCHAIN_FILE được đề cập ở trên. Bạn cũng cần đặt ABI mục tiêu bằng cờ -DANDROID_ABI .

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Các chi tiết cụ thể của việc kiểm tra kernel (đơn vị) biên dịch chéo

Việc biên dịch chéo các bài kiểm tra đơn vị yêu cầu trình biên dịch Flatc cho kiến ​​trúc máy chủ. Với mục đích này, có một CMakeLists nằm trong tensorflow/lite/tools/cmake/native_tools/flatbuffers để xây dựng trước trình biên dịch Flatc với CMake trong một thư mục xây dựng riêng bằng chuỗi công cụ máy chủ.

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

Cũng có thể cài đặt flatc vào một vị trí cài đặt tùy chỉnh (ví dụ: vào thư mục chứa các công cụ được xây dựng nguyên bản khác thay vì thư mục bản dựng CMake):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Đối với chính quá trình biên dịch chéo TF Lite, tham số bổ sung -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> trỏ đến thư mục chứa tệp nhị phân flatc gốc cần được cung cấp cùng với cờ -DTFLITE_KERNEL_TEST=on được đề cập ở trên.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Các thử nghiệm kernel (đơn vị) được biên dịch chéo khởi chạy trên mục tiêu

Các bài kiểm tra đơn vị có thể được chạy dưới dạng các tệp thực thi riêng biệt hoặc sử dụng tiện ích CTest. Đối với CTest, nếu ít nhất một trong các tham số TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK hoặc TFLITE_EXTERNAL_DELEGATE được bật cho bản dựng TF Lite, các thử nghiệm kết quả sẽ được tạo bằng hai nhãn khác nhau (sử dụng cùng một tệp thực thi thử nghiệm): - đơn giản - biểu thị các thử nghiệm những cái chạy trên chương trình phụ trợ CPU - đại biểu - biểu thị các thử nghiệm mong đợi các đối số khởi chạy bổ sung được sử dụng cho đặc tả đại biểu đã sử dụng

Cả CTestTestfile.cmakerun-tests.cmake (như được đề cập bên dưới) đều có sẵn trong <build_dir>/kernels .

Khởi chạy các bài kiểm tra đơn vị với chương trình phụ trợ CPU (với điều kiện CTestTestfile.cmake có trên mục tiêu trong thư mục hiện tại):

ctest -L plain

Khởi chạy các ví dụ về kiểm thử đơn vị bằng cách sử dụng đại biểu (miễn là tệp CTestTestfile.cmake cũng như tệp run-tests.cmake có trên mục tiêu trong thư mục hiện tại):

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

Một hạn chế đã biết của cách cung cấp các đối số khởi chạy bổ sung liên quan đến đại biểu này cho các bài kiểm tra đơn vị là nó chỉ hỗ trợ hiệu quả những đối số có giá trị trả về dự kiến ​​là 0 . Các giá trị trả về khác nhau sẽ được báo cáo là lỗi kiểm tra.

Đại biểu GPU OpenCL

Nếu máy mục tiêu của bạn có hỗ trợ OpenCL, bạn có thể sử dụng đại biểu GPU để có thể tận dụng sức mạnh GPU của mình.

Để định cấu hình hỗ trợ đại biểu GPU OpenCL:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

Bước 5. Xây dựng TensorFlow Lite

Trong thư mục tflite_build ,

cmake --build . -j

Bước 6. Xây dựng Công cụ điểm chuẩn TensorFlow Lite và ví dụ về hình ảnh nhãn (Tùy chọn)

Trong thư mục tflite_build ,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

Các tùy chọn có sẵn để xây dựng TensorFlow Lite

Dưới đây là danh sách các tùy chọn có sẵn. Bạn có thể ghi đè nó bằng -D<option_name>=[ON|OFF] . Ví dụ: -DTFLITE_ENABLE_XNNPACK=OFF để tắt XNNPACK được bật theo mặc định.

Tên tùy chọn Tính năng Android Linux hệ điều hành Mac các cửa sổ
TFLITE_ENABLE_RUY Kích hoạt thư viện nhân ma trận RUY TRÊN TẮT TẮT TẮT
TFLITE_ENABLE_NNAPI Kích hoạt đại biểu NNAPI TRÊN TẮT không áp dụng không áp dụng
TFLITE_ENABLE_GPU Bật đại biểu GPU TẮT TẮT không áp dụng không áp dụng
TFLITE_ENABLE_XNNPACK Kích hoạt đại biểu XNNPACK TRÊN TRÊN TRÊN TRÊN
TFLITE_ENABLE_MMAP Kích hoạt MMAP TRÊN TRÊN TRÊN không áp dụng

Tạo dự án CMake sử dụng TensorFlow Lite

Đây là ví dụ tối thiểu về CMakeLists.txt của TFLite .

Bạn cần có add_subdirectory() cho thư mục TensorFlow Lite và liên kết tensorflow-lite với 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)

Xây dựng thư viện TensorFlow Lite C

Nếu bạn muốn xây dựng thư viện chia sẻ TensorFlow Lite cho C API , trước tiên hãy làm theo bước 1 đến bước 3 . Sau đó, chạy các lệnh sau.

Linux / MacOS

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

các cửa sổ

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j --config Release

Thư viện biên soạn

Lệnh trên tạo thư viện dùng chung sau trong thư mục hiện tại.

Nền tảng Tên thư viện
Linux libtensorflowlite_c.so
hệ điều hành Mac libtensorflowlite_c.dylib
các cửa sổ tensorflowlite_c.dll