使用 CMake 建構 LiteRT

本頁面說明如何透過以下項目建構及使用 LiteRT 程式庫: CMake 工具。

下列操作說明已在 Ubuntu 16.04.3 64 位元電腦 (AMD64) 上測試過 、macOS Catalina (x86_64)、Windows 10 和 TensorFlow 開發 Docker 映像檔 tensorflow/tensorflow:devel.

步驟 1:安裝 CMake 工具

需要 CMake 3.16 以上版本。在 Ubuntu 上,您只需在 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選項。

在理想情況下,您應一併提供自己的程式庫依附元件版本。 這些也須用於依附 LiteRT 的專案。你可以 使用 -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 目標架構的二進位檔。

如要跨平台編譯 LiteRT,您需要提供 使用 -DCMAKE_TOOLCHAIN_FILE 呼叫 SDK (例如 Android 的 ARM64 SDK 或 NDK) 旗標。

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android 跨平台程式碼編譯注意事項

如要 Android 跨平台程式碼編譯, Android NDK,並 上方提及了 -DCMAKE_TOOLCHAIN_FILE 標記。您也需要設定目標 ABI 帶有 -DANDROID_ABI 旗標。

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

跨單元測試需要主機的固定費率編譯器 這個架構的簡短總覽為此,有個 CMakeLists 位於 tensorflow/lite/tools/cmake/native_tools/flatbuffers:用來建構 Flatc 透過主機在獨立的建構目錄中使用 CMake 來預先編寫編譯器 工具鍊。

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 .

如果是 LiteRT 跨編譯作業本身,其他參數 -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_XNNPACKor已為 LiteRT 啟用 TFLITE_EXTERNAL_DELEGATE 產生的測試會產生兩組不同的標籤 (使用同一個測試執行檔):- plain - 代表測試執行位置 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:建構 LiteRT

tflite_build 目錄中,

cmake --build . -j

步驟 6:建構 LiteRT 基準工具和標籤圖片範例 (選用)

tflite_build 目錄中,

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

用於建構 LiteRT 的選項

以下清單列出可用的選項。您可以用 -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 開啟 開啟 開啟 不適用

建立使用 LiteRT 的 CMake 專案

以下是 CMakeLists.txt TFLite 最小範例

您需要為 LiteRT 目錄和連結設定 add_subdirectory() tensorflow-lite 與 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)

建構 LiteRT C 程式庫

如要在以下位置建構 LiteRT 共用資料庫 C API 請按照步驟 1 操作, 步驟 3。完成後,請執行 以下指令。

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

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

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