Tham dự Hội nghị chuyên đề Women in ML vào ngày 7 tháng 12 Đăng ký ngay

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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

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

Các hướng dẫn sau đây đã được thử nghiệm trên Ubuntu 16.04.3 64-bit PC (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 hoặc cao hơn. Trên Ubuntu, bạn có thể 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. Kho lưu trữ Clone TensorFlow

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

Bước 3. Tạo thư mục xây dựng CMake

mkdir tflite_build
cd tflite_build

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

Phát hành bản dựng

Nó tạo ra một bản nhị phân phát hành đượ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 một 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 hạt nhân, bạn cần cung cấp cờ '-DTFLITE_KERNEL_TEST = on'. Các chi tiết cụ thể về biên dịch chéo của bài kiểm tra đơn vị có thể được tìm thấy trong phần phụ 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 một gói có thể cài đặt có thể được sử dụng như một gói phụ thuộc của 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 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 \
  -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

Tổng hợp 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 TF Lite, bạn cần cung cấp đường dẫn đến SDK (ví dụ: ARM64 SDK hoặc NDK trong trường hợp của Android) với cờ -DCMAKE_TOOLCHAIN_FILE .

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Các chi tiết cụ thể của tổng hợp chéo Android

Đối với 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 với 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 nhân (đơn vị) kiểm tra 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 biệt bằng cách sử dụ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 đến một vị trí cài đặt tùy chỉnh (ví dụ: đến một thư mục chứa các công cụ được xây dựng tự nhiên khác thay vì thư mục xây 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 nhị phân flatc gốc cần được cung cấp cùng với -DTFLITE_KERNEL_TEST=on cờ đượ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/
Kiểm tra nhân (đơ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 tệp thực thi riêng biệt hoặc sử dụng tiện ích CTest. Theo như CTest có liên quan, 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ả được tạo với 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 - ủy quyền - biểu thị các bài kiểm tra mong đợi các đối số khởi chạy bổ sung được sử dụng cho đặc tả ủy quyền đã 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 phần mềm phụ trợ CPU (miễn là CTestTestfile.cmake có mặt trên đích trong thư mục hiện tại):

ctest -L plain

Khởi chạy các ví dụ về các bài kiểm tra đơn vị bằng cách sử dụng đại biểu (với điều kiện CTestTestfile.cmake cũng như tệp run-tests.cmake có trên đích 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 này trong việc cung cấp các đối số khởi chạy bổ sung liên quan đến ủy quyền cho các bài kiểm tra đơn vị là nó chỉ hỗ trợ hiệu quả những đối tượng 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 thử nghiệm.

Đạ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 ủy quyền GPU có thể tận dụng sức mạnh GPU của bạn.

Để đị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

Đâ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 Bật thư viện nhân ma trận RUY TRÊN TẮT TẮT TẮT
TFLITE_ENABLE_NNAPI Bật ủy quyền NNAPI TRÊN TẮT N / A N / A
TFLITE_ENABLE_GPU Bật ủy quyền GPU TẮT TẮT N / A N / A
TFLITE_ENABLE_XNNPACK Bật ủy quyền XNNPACK TRÊN TRÊN TRÊN TRÊN
TFLITE_ENABLE_MMAP Bật MMAP TRÊN TRÊN TRÊN N / A

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

Đây là CMakeLists.txt của ví dụ tối thiểu 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 API C , trước tiên hãy làm theo bước 1 đến bước 3 . Sau đó, 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 được chia sẻ 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