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 bản thân 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.cmake
và run-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.
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
Lệnh này 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 |