本頁面說明如何透過以下項目建構及使用 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.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:建構 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 |