Xây dựng LiteRT bằng CMake

Trang này mô tả cách tạo và sử dụng thư viện LiteRT với Công cụ CMake.

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

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

Phần mềm này 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ể theo dõi hướng dẫn chính thức về cách cài đặt cmake

Bước 2. Nhân bản 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

Theo mặc định, công cụ này tạo một tệp nhị phân phát hành được tối ưu hoá. Nếu bạn muốn tạo bản 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 gỡ lỗi

Nếu cần tạo một bản gỡ lỗi có thông tin về biểu tượng, bạn cần hãy cung cấp tuỳ chọn -DCMAKE_BUILD_TYPE=Debug.

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

Tạo bản dựng bằng cách kiểm thử đơn vị nhân hệ điều hành

Để có thể chạy kiểm thử nhân, bạn cần cung cấp Cờ -DTFLITE_KERNEL_TEST=on. Thông số cụ thể của việc biên dịch chéo kiểm thử đơn vị có thể là được tìm thấy trong tiểu mục tiếp theo.

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

Tạo gói có thể cài đặt

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

Tốt nhất là bạn cũng nên cung cấp các phiên bản phần phụ thuộc thư viện riêng. Dự án phụ thuộc vào LiteRT cũng cần sử dụng các thuộc tính này. Bạn có thể sử dụng -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON và thiết lập <PackageName>_DIR để trỏ đến các bả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 để tạo tệp nhị phân cho kiến trúc đích ARM64 hoặc Android.

Để biên dịch chéo LiteRT, cụ thể 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) có -DCMAKE_TOOLCHAIN_FILE cờ.

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Thông tin cụ thể về tính năng biên dịch chéo trên Android

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

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Thông tin cụ thể của quá trình biên dịch chéo (đơn vị) kiểm thử hạt nhân

Biên dịch chéo các bài kiểm thử đơn vị yêu cầu trình biên dịch phẳng cho máy chủ cấu trúc. Để phục vụ mục đích này, có một CMakeLists trong tensorflow/lite/tools/cmake/native_tools/flatbuffers để xây dựng xe du lịch phẳng trình biên dịch với CMake trước trong một thư mục bản dựng riêng biệt sử dụng máy chủ lưu trữ chuỗi công cụ.

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

Bạn cũng có thể cài đặt phình phẳng vào một vị trí cài đặt tuỳ chỉnh (ví dụ: đến một thư mục chứa các công cụ được tạo sẵn khác thay vì CMake thư mục bản dựng):

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 LiteRT, tham số bổ sung -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> trỏ đến thư mục chứa bạn cần cung cấp tệp nhị phân flatc gốc cùng với Cờ -DTFLITE_KERNEL_TEST=on nói trên.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Kiểm thử hạt nhân biên dịch chéo (đơn vị) khởi chạy trên mục tiêu

Bạn có thể chạy bài kiểm thử đơn vị dưới dạng các tệp thực thi riêng biệt hoặc sử dụng tiện ích CTest. Cho đến nay có liên quan đến CTest, nếu có ít nhất một trong các tham số TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE` được bật cho LiteRT thì các bài kiểm thử thu được sẽ được tạo bằng hai nhãn khác nhau (sử dụng cùng một tệp thực thi kiểm thử): – đơn giản – biểu thị các chương trình kiểm thử chạy trên Phần phụ trợ của CPU – uỷ quyền – biểu thị các lượt kiểm thử cần khởi chạy thêm đối số dùng cho quy cách uỷ quyền đã sử dụng

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

Khởi chạy bài kiểm thử đơn vị bằng phần phụ trợ CPU (miễn là CTestTestfile.cmake được có trên đích trong thư mục hiện tại):

ctest -L plain

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

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 điểm hạn chế đã biết về cách này trong việc cung cấp thêm nội dung liên quan đến người được uỷ quyền khởi chạy đối số cho kiểm thử đơn vị là nó chỉ hỗ trợ hiệu quả những đối số có giá trị trả về dự kiến bằng 0. Các giá trị trả về khác nhau sẽ được báo cáo dưới dạng kiểm thử không thành công.

Uỷ quyền GPU OpenCL

Nếu máy đích của bạn có hỗ trợ OpenCL, bạn có thể sử dụng Người được uỷ quyền của GPU có thể tận dụng sức mạnh của GPU.

Cách định cấu hình tính năng hỗ trợ uỷ quyền GPU OpenCL:

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

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

Trong thư mục tflite_build,

cmake --build . -j

Bước 6. Xây dựng công cụ đo điểm chuẩn LiteRT và ví dụ về hình ảnh nhãn (Không bắt buộc)

Trong thư mục tflite_build,

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

Các lựa chọn hiện có để xây dựng LiteRT

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

Tên lựa chọn Tính năng Android Linux macOS Windows
TFLITE_ENABLE_RUY Bật RUY ma trận phép nhân thư viện BẬT ĐÃ TẮT ĐÃ TẮT ĐÃ TẮT
TFLITE_ENABLE_GPU Bật GPU người được uỷ quyền ĐÃ TẮT ĐÃ TẮT Không áp dụng Không áp dụng
TFLITE_ENABLE_XNNPACK Bật XNNPACK người được uỷ quyền BẬT BẬT BẬT BẬT
TFLITE_ENABLE_MMAP Bật MMAP BẬT BẬT BẬT Không áp dụng

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

Đây là CMakeLists.txt của Ví dụ tối giản về TFLite.

Bạn cần có add_subdirectory() cho thư mục và đường liên kết LiteRT tensorflow-lite với target_link_library().

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 LiteRT C

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

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

Lệnh này tạo thư viện dùng chung sau đây trong thư mục hiện tại.

Nền tảng Tên thư viện
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll