Na tej stronie dowiesz się, jak utworzyć bibliotekę LiteRT i jak z niej korzystać CMake.
Poniższe instrukcje zostały przetestowane w systemie Ubuntu 16.04.3 64-bitowego komputera (AMD64) , macOS Catalina (x86_64), Windows 10 i obraz Dockera w TensorFlow tensorflow/tensorflow:devel.
Krok 1. Zainstaluj narzędzie CMake
Wymaga aplikacji CMake w wersji 3.16 lub nowszej. W Ubuntu możesz po prostu uruchomić następujące polecenia .
sudo apt-get install cmake
Możesz też obserwować oficjalny przewodnik instalacji Cmake
Krok 2. Klonowanie repozytorium TensorFlow
git clone https://github.com/tensorflow/tensorflow.git tensorflow_src
Krok 3. Utwórz katalog kompilacji CMake
mkdir tflite_build
cd tflite_build
Krok 4. Uruchamianie narzędzia CMake z konfiguracjami
Kompilacja wersji
Domyślnie generuje plik binarny wersji zoptymalizowanej. Jeśli chcesz tworzyć produkty w swojej stacji roboczej, wystarczy uruchomić poniższe polecenie.
cmake ../tensorflow_src/tensorflow/lite
Debuguj kompilację
Jeśli chcesz utworzyć kompilację do debugowania, która zawiera informacje o symbolach, musisz wykonać te czynności:
podaj opcję -DCMAKE_BUILD_TYPE=Debug
.
cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug
Tworzenie z użyciem testów jednostkowych jądra
Aby móc przeprowadzać testy jądra, musisz udostępnić
flaga -DTFLITE_KERNEL_TEST=on
. Szczegóły kompilacji testu jednostkowego mogą być
które znajdziesz w następnej podsekcji.
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on
Utwórz pakiet do zainstalowania
Aby utworzyć pakiet możliwy do zainstalowania, którego może używać inna zależność
Utwórz projekt za pomocą dodatku find_package(tensorflow-lite CONFIG)
, użyj
-DTFLITE_ENABLE_INSTALL=ON
.
Najlepiej jest też podać własne wersje zależności bibliotek.
Będą one też używane w projekcie zależnym od LiteRT. Dostępne opcje
użyj komponentu -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON
i ustaw <PackageName>_DIR
do wskazywanych instalacji biblioteki.
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
Kompilacja danych
Za pomocą CMake możesz tworzyć pliki binarne dla docelowych architektur ARM64 lub Androida.
Aby krzyżowo skompilować LiteRT, musisz podać ścieżkę do
pakiet SDK (np. ARM64 SDK lub NDK w przypadku Androida) za pomocą -DCMAKE_TOOLCHAIN_FILE
flaga.
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Szczegółowa kompilacja krzyżowa Androida
W przypadku kompilacji na urządzeniach z Androidem musisz zainstalować
Android NDK i podaj ścieżkę NDK z
Flaga -DCMAKE_TOOLCHAIN_FILE
wspomniana powyżej. Musisz też ustawić docelowy interfejs ABI
z flagą -DANDROID_ABI
.
cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Specyfikacje kompilacji krzyżowej jądra systemu (jednostkowego)
Krzyżowa kompilacja testów jednostkowych wymaga kompilatora płaskiego dla hosta
i architekturą. W tym celu znajduje się lista CMakeList
tensorflow/lite/tools/cmake/native_tools/flatbuffers
, aby zbudować płaski
kompilatora z CMake w oddzielnym katalogu kompilacji przy użyciu hosta
z łańcuchem narzędzi.
mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
Możesz też zainstalować flatc w niestandardowej lokalizacji. (np. do katalogu zawierającego inne natywne narzędzia zamiast katalogu CMake katalogu kompilacji):
cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
W przypadku samej kompilacji krzyżowej LiteRT dodatkowy parametr
-DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path>
wskazuje katalog zawierający
natywny flatc trzeba dodać razem z
-DTFLITE_KERNEL_TEST=on
flaga wymieniona powyżej.
cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Krzyżowoskompilowane testy jądra (jednostkowe) uruchamiają się w miejscu docelowym
Testy jednostkowe można uruchamiać jako osobne pliki wykonywalne lub za pomocą narzędzia CTest. Do tej pory
jak dane CTest, jeśli co najmniej jeden z parametrów
Opcja TFLITE_ENABLE_XNNPACKor
TFLITE_EXTERNAL_DELEGATE jest włączona dla LiteRT
kompilację, wynikowe testy będą generowane z 2 różnymi etykietami.
(z wykorzystaniem tego samego pliku wykonywalnego testu): – zwykły – oznacza testy, na których są uruchamiane
Backend procesora – przekazanie – oznaczanie testów oczekujących na dodatkowe uruchomienie
argumenty używane w specyfikacji delegowanej
Zarówno CTestTestfile.cmake
, jak i run-tests.cmake
(jak opisano poniżej) są
dostępne w języku: <build_dir>/kernels
.
Uruchamianie testów jednostkowych z backendem procesora (pod warunkiem, że CTestTestfile.cmake
jest
znajduje się w miejscu docelowym w bieżącym katalogu):
ctest -L plain
uruchamiać przykładowe testy jednostkowe z wykorzystaniem przedstawicieli (pod warunkiem, że
W lokalizacji docelowej znajdują się pliki CTestTestfile.cmake
oraz run-tests.cmake
w bieżącym katalogu):
cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate
Znane ograniczenie tego sposobu dostarczania dodatkowych informacji argumentami do uruchomienia testów jednostkowych jest to, że skutecznie obsługuje tylko te oczekiwana wartość zwrotu wynosi 0. Różne wartości zwracanych wartości będą raportowane jako niepowodzenie testu.
Delegat GPU OpenCL
Jeśli komputer docelowy obsługuje OpenCL, możesz użyć parametru delegat GPU, który może wykorzystują moc GPU.
Aby skonfigurować obsługę przekazywania dostępu do GPU OpenCL:
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON
Krok 5. Utwórz LiteRT
W katalogu tflite_build
cmake --build . -j
Krok 6. Utwórz narzędzie analizy porównawczej LiteRT i przykład obrazu etykiety (opcjonalnie)
W katalogu tflite_build
cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image
Dostępne opcje tworzenia LiteRT
Oto lista dostępnych opcji. Możesz go zastąpić kodem
-D<option_name>=[ON|OFF]
Na przykład od -DTFLITE_ENABLE_XNNPACK=OFF
do
wyłącz usługę XNNPACK, która jest domyślnie włączona.
Nazwa opcji | Funkcja | Android | Linux | macOS | Windows |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY
|
Włącz RUY macierz mnożenie biblioteka | WŁ. | WYŁ. | WYŁ. | WYŁ. |
TFLITE_ENABLE_GPU
|
Włącz GPU przekazać dostęp | WYŁ. | WYŁ. | Nie dotyczy | Nie dotyczy |
TFLITE_ENABLE_XNNPACK
|
Włącz XNNPACK przekazać dostęp | WŁ. | WŁ. | WŁ. | WŁ. |
TFLITE_ENABLE_MMAP |
Włącz MMAP | WŁ. | WŁ. | WŁ. | Nie dotyczy |
Tworzenie projektu CMake korzystającego z LiteRT
Plik CMakeLists.txt zawiera Przykład z TFLite minimum.
Musisz mieć funkcję add_subdirectory() dla katalogu i linku LiteRT
tensorflow-lite
z 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)
Utwórz bibliotekę LiteRT C
Jeśli chcesz utworzyć bibliotekę udostępnioną LiteRT dla C API wykonaj krok 1, aby krok 3. Następnie uruchom tych poleceń.
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
To polecenie wygeneruje następujące zasoby udostępniane w bieżącym katalogu.
Platforma | Nazwa biblioteki |
---|---|
Linux | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
Windows | tensorflowlite_c.dll |