使用 CMake 建構 TensorFlow Lite

本頁面說明如何透過 CMake 工具建構及使用 TensorFlow Lite 程式庫。

下列操作說明已在 Ubuntu 16.04.3 64 位元電腦 (AMD64)、macOS Catalina (x86_64)、Windows 10 和 TensorFlow 開發 Docker 映像檔 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

建構可安裝套件

如要建構可安裝套件,以便使用 find_package(tensorflow-lite CONFIG) 的其他 CMake 專案做為依附元件,請使用 -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 \
  -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

跨平台程式碼編譯

您可以使用 CMake 建構 ARM64 或 Android 目標架構的二進位檔。

如要跨編譯 TF Lite,您必須使用 -DCMAKE_TOOLCHAIN_FILE 旗標提供 SDK 的路徑 (例如 Android 情況下的 ARM64 SDK 或 NDK)。

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android 跨平台程式碼編譯的具體細節

如果是 Android 跨平台程式碼編譯,您必須安裝 Android NDK,並以上述 -DCMAKE_TOOLCHAIN_FILE 標記提供 NDK 路徑。您也需要使用 -DANDROID_ABI 標記設定目標 ABI。

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
核心 (單元) 跨編譯測試的具體說明

主機架構的跨編譯單元測試需要平面編譯器。為此,tensorflow/lite/tools/cmake/native_tools/flatbuffers 中有 CMakeLists 可事先使用主機工具鍊,在獨立的建構目錄中利用 CMake 事先建構 Flatc 編譯器。

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

此外,您也可以將 flatc 安裝到自訂安裝位置 (例如,存放在包含其他原生建構工具的目錄,而不是 CMake 建構目錄):

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_XNNPACKorTFLITE_EXTERNAL_DELEGATE` 適用於 TF Lite 版本,系統就會透過兩個不同的「標籤」產生結果測試 (使用同一個測試執行檔):- 說明 - 委派使用在 CPU 後端執行的測試,而非委派使用於 CPU 後端執行測試。

CTestTestfile.cmakerun-tests.cmake (如下所述) 都適用於 <build_dir>/kernels

啟動使用 CPU 後端的單元測試 (前提是 CTestTestfile.cmake 存在於目前目錄中的目標上):

ctest -L plain

使用委派項目啟動單元測試範例 (假設目前目錄中目標中有 CTestTestfile.cmakerun-tests.cmake 檔案):

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 Linux macOS Windows
TFLITE_ENABLE_RUY 啟用 RUY 矩陣 乘法程式庫 啟用 不亮 不亮 不亮
TFLITE_ENABLE_GPU 啟用 GPU 委派功能 關閉 關閉 不適用 不適用
TFLITE_ENABLE_XNNPACK 啟用 XNNPACK 委任 啟用 啟用 啟用 啟用
TFLITE_ENABLE_MMAP 啟用 MMAP ON ON ON 不適用

建立使用 TensorFlow Lite 的 CMake 專案

以下是 TFLite 最小範例的 CMakeLists.txt。

您必須為 TensorFlow Lite 目錄加入 add_subdirectory(),並將 tensorflow-lite 連結至 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)

建構 TensorFlow Lite C 程式庫

如要建構 C API 的 TensorFlow Lite 共用資料庫,請先按照步驟 1 操作步驟 3。之後,請執行下列指令。

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

這個指令會在目前的目錄中產生下列共用資料庫。

平台 圖書館名稱
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll