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