Auf dieser Seite wird beschrieben, wie Sie die LiteRT-Bibliothek CMake-Tool.
Die folgende Anleitung wurde auf Ubuntu 16.04.3 64-Bit-PC (AMD64) getestet , macOS Catalina (x86_64), Windows 10 und TensorFlow Entwickler-Docker-Image tensorflow/tensorflow:devel.
Schritt 1: CMake-Tool installieren
Dafür ist CMake 3.16 oder höher erforderlich. Unter Ubuntu können Sie einfach folgenden Befehl ausführen: .
sudo apt-get install cmake
Oder folgen Sie offizielle Installationsanleitung für cmake
Schritt 2: TensorFlow-Repository klonen
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
Schritt 3: CMake-Build-Verzeichnis erstellen
mkdir tflite_build
cd tflite_build
Schritt 4: CMake-Tool mit Konfigurationen ausführen
Release-Build
Standardmäßig wird eine optimierte Release-Binärdatei generiert. Wenn Sie für Ihre auf Ihrer Workstation ist, führen Sie einfach den folgenden Befehl aus.
cmake ../tensorflow_src/tensorflow/lite
Fehler im Build beheben
Wenn Sie einen Debug-Build mit Symbolinformationen erstellen müssen,
geben Sie die Option -DCMAKE_BUILD_TYPE=Debug
an.
cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug
Mit Kernel-Unittests erstellen
Um Kernel-Tests ausführen zu können, müssen Sie die
Flag -DTFLITE_KERNEL_TEST=on
. Details zur Cross-Kompilierung von Einheitentests
finden Sie im nächsten Unterabschnitt.
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on
Installierbares Paket erstellen
Um ein installierbares Paket zu erstellen, das als Abhängigkeit von einer anderen Person verwendet werden kann
CMake-Projekt mit find_package(tensorflow-lite CONFIG)
, verwenden Sie die
Option -DTFLITE_ENABLE_INSTALL=ON
.
Idealerweise sollten Sie auch eigene Versionen von Bibliotheksabhängigkeiten bereitstellen.
Diese müssen auch von dem LiteRT-basierten Projekt verwendet werden. Sie können
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON
verwenden und <PackageName>_DIR
festlegen
Variablen, die auf Ihre Bibliotheksinstallationen verweisen.
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
Cross-Kompilierung
Mit CMake können Sie Binärdateien für ARM64- oder Android-Zielarchitekturen erstellen.
Für die Cross-Kompilierung von LiteRT müssen Sie insbesondere den Pfad zu
das SDK (z.B. ARM64 SDK oder NDK bei Android) durch -DCMAKE_TOOLCHAIN_FILE
melden.
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Besonderheiten der Cross-Kompilierung unter Android
Für die Android-Cross-Kompilierung müssen Sie
Android NDK und geben Sie den NDK-Pfad mit
-DCMAKE_TOOLCHAIN_FILE
. Du musst auch das Ziel-ABI festlegen
mit dem Flag -DANDROID_ABI
.
cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Besonderheiten der Kreuzkompilierung von Kernel- (Einheitentests)
Für die Kreuzkompilierung der Einheitentests ist ein Flatc-Compiler für den Host erforderlich
Architektur. Zu diesem Zweck gibt es CMakeLists
tensorflow/lite/tools/cmake/native_tools/flatbuffers
, um das Flatc zu erstellen
Compiler mit CMake in einem separaten Build-Verzeichnis unter Verwendung des Hosts
Toolchain.
mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
Es ist auch möglich, das Flatc an einem benutzerdefinierten Speicherort zu installieren. (z.B. in ein Verzeichnis mit anderen nativ erstellten Tools anstelle des CMake- Build-Verzeichnis erstellen):
cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
Für die LiteRT-Cross-Kompilierung selbst wird ein zusätzlicher Parameter
-DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path>
verweist auf das Verzeichnis, das
muss das native Binärprogramm Flatc zusammen mit dem Parameter
-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/
Start kompilierter Kerneltests (Einheiten) am Ziel
Einheitentests können als separate ausführbare Dateien oder mit dem Dienstprogramm CTest ausgeführt werden. Bis jetzt
wenn mindestens einer der Parameter
TFLITE_ENABLE_XNNPACKor
TFLITE_EXTERNAL_DELEGATE ist für LiteRT aktiviert
werden die resultierenden Tests mit zwei verschiedenen Labels generiert.
(unter Verwendung derselben ausführbaren Testdatei): einfach – zur Angabe der Testläufe, die ausgeführt werden
CPU-Back-End – delegieren – gibt die Tests an, die einen zusätzlichen Start erwarten
Argumente für die verwendete Delegatspezifikation
Sowohl CTestTestfile.cmake
als auch run-tests.cmake
(siehe unten) sind
verfügbar in <build_dir>/kernels
.
Start von Einheitentests mit dem CPU-Back-End (vorausgesetzt, der CTestTestfile.cmake
ist
auf Ziel im aktuellen Verzeichnis vorhanden):
ctest -L plain
Starten Sie Beispiele für Einheitentests mit Bevollmächtigten (vorausgesetzt, die
Datei „CTestTestfile.cmake
“ und „run-tests.cmake
“ sind im Ziel vorhanden in
aktuellem Verzeichnis):
cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate
Eine bekannte Einschränkung dieser Art der Bereitstellung zusätzlicher delegatbezogener die Einführung von Argumenten für Einheitentests ist, dass sie effektiv nur diejenigen mit erwarteter Rückgabewert von 0. Unterschiedliche Rückgabewerte werden als Testfehler.
OpenCL-GPU-Delegierung
Wenn Ihre Zielmaschine OpenCL unterstützt, können Sie Folgendes verwenden: GPU Delegate, Ihre GPU-Leistung zu nutzen.
So konfigurieren Sie die Unterstützung von OpenCL-GPU-Delegate:
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON
Schritt 5: LiteRT erstellen
Im Verzeichnis tflite_build
cmake --build . -j
Schritt 6: Beispiel für Build LiteRT Benchmark-Tool und Labelbild (optional)
Im Verzeichnis tflite_build
cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image
Verfügbare Optionen zum Erstellen von LiteRT
Im Folgenden finden Sie eine Liste der verfügbaren Optionen. Sie können sie überschreiben mit
-D<option_name>=[ON|OFF]
Beispiel: -DTFLITE_ENABLE_XNNPACK=OFF
für
deaktiviert XNNPACK, das standardmäßig aktiviert ist.
Option | Funktion | Android | Linux | macOS | Windows |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY
|
RUY aktivieren Matrix Multiplikation Bibliothek | AN | AUS | AUS | AUS |
TFLITE_ENABLE_GPU
|
GPU aktivieren delegieren | AUS | AUS | – | – |
TFLITE_ENABLE_XNNPACK
|
XNNPACK aktivieren delegieren | AN | AN | AN | AN |
TFLITE_ENABLE_MMAP |
MMAP aktivieren | AN | AN | AN | – |
CMake-Projekt mit LiteRT erstellen
Hier ist die CMakeLists.txt-Datei Minimal-Beispiel von TFLite.
Sie benötigen add_subdirectory() für das LiteRT-Verzeichnis und den Link.
tensorflow-lite
mit 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-Bibliothek erstellen
Wenn Sie eine gemeinsam genutzte LiteRT-Bibliothek C API führen Sie Schritt 1 aus, um Schritt 3 zuerst. Führen Sie anschließend den folgenden Befehle.
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
Dieser Befehl generiert die folgende freigegebene Bibliothek im aktuellen Verzeichnis.
Plattform | Name der Bibliothek |
---|---|
Linux | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
Windows | tensorflowlite_c.dll |