本頁說明如何使用 CMake 工具建構及使用 TensorFlow Lite 程式庫。
下列指示已在 Ubuntu 16.04.3 64 位元 PC (AMD64)、macOS Catalina (x86_64)、Windows 10 和 TensorFlow devel 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
建構可安裝套件
若要建構可安裝套件,以便另一個 CMake 專案可以使用 find_package(tensorflow-lite CONFIG)
將其作為依附元件,請使用 -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,您需要提供 SDK 的路徑 (例如,ARM64 SDK 或 Android 案例中的 NDK),並使用 -DCMAKE_TOOLCHAIN_FILE
旗標。
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
核心 (單元) 測試跨平台編譯的詳細資訊
單元測試的跨平台編譯需要主機架構的 flatc 編譯器。為此,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 而言,如果至少為 TF Lite 建構啟用 TFLITE_ENABLE_NNAPI、TFLITE_ENABLE_XNNPACK
或 TFLITE_EXTERNAL_DELEGATE
參數之一,則產生的測試會產生兩個不同的標籤 (使用相同的測試可執行檔):- plain - 表示在 CPU 後端執行的測試 - delegate - 表示預期用於使用委派規格的其他啟動引數的測試
CTestTestfile.cmake
和 run-tests.cmake
(如下所述) 皆可在 <build_dir>/kernels
中取得。
使用 CPU 後端啟動單元測試 (前提是 CTestTestfile.cmake
存在於目標的目前目錄中)
ctest -L plain
使用委派啟動單元測試範例 (前提是 CTestTestfile.cmake
和 run-tests.cmake
檔案都存在於目標的目前目錄中)
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
將其他委派相關啟動引數提供給單元測試的這種方式的已知限制是,它實際上僅支援預期傳回值為 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_NNAPI
|
啟用 NNAPI 委派 | 開啟 | 關閉 | 不適用 | 不適用 |
TFLITE_ENABLE_GPU
|
啟用 GPU 委派 | 關閉 | 關閉 | 不適用 | 不適用 |
TFLITE_ENABLE_XNNPACK
|
啟用 XNNPACK 委派 | 開啟 | 開啟 | 開啟 | 開啟 |
TFLITE_ENABLE_MMAP |
啟用 MMAP | 開啟 | 開啟 | 開啟 | 不適用 |
建立使用 TensorFlow Lite 的 CMake 專案
以下是 TFLite 最小範例的 CMakeLists.txt。
您需要為 TensorFlow Lite 目錄新增 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)
建構 TensorFlow Lite C 程式庫
如果您想要為 C API 建構 TensorFlow Lite 共用程式庫,請先按照步驟 1 至步驟 3 操作。完成後,執行下列指令。
Linux / MacOS
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
Windows
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j --config Release
已編譯程式庫
上述指令會在目前目錄中產生下列共用程式庫。
平台 | 程式庫名稱 |
---|---|
Linux | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
Windows | tensorflowlite_c.dll |