Ndërtoni LiteRT me CMake, Ndërtoni LiteRT me CMake, Ndërtoni LiteRT me CMake, Ndërtoni LiteRT me CMake

Kjo faqe përshkruan se si të ndërtoni dhe përdorni bibliotekën LiteRT me mjetin CMake .

Udhëzimet e mëposhtme janë testuar në Ubuntu 16.04.3 64-bit PC (AMD64), macOS Catalina (x86_64), Windows 10 dhe TensorFlow Devel Docker image tensorflow/tensorflow:devel .

Hapi 1. Instaloni mjetin CMake

Kërkon CMake 3.16 ose më të lartë. Në Ubuntu, thjesht mund të ekzekutoni komandën e mëposhtme.

sudo apt-get install cmake

Ose mund të ndiqni udhëzuesin zyrtar të instalimit cmake

Hapi 2. Klononi depon e TensorFlow

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

Hapi 3. Krijo drejtorinë e ndërtimit të CMake

mkdir tflite_build
cd tflite_build

Hapi 4. Ekzekutoni mjetin CMake me konfigurime

Lëshoni ndërtimin

Ai gjeneron një binar të optimizuar të lëshimit si parazgjedhje. Nëse dëshironi të ndërtoni për stacionin tuaj të punës, thjesht ekzekutoni komandën e mëposhtme.

cmake ../tensorflow_src/tensorflow/lite

Ndërtimi i korrigjimit

Nëse keni nevojë të krijoni një ndërtim korrigjimi që ka informacion simboli, ju duhet të siguroni opsionin -DCMAKE_BUILD_TYPE=Debug .

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

Ndërtoni me teste të njësisë së kernelit

Për të qenë në gjendje të ekzekutoni testet e kernelit, duhet të jepni flamurin -DTFLITE_KERNEL_TEST=on . Specifikat e përpilimit të kryqëzuar të testit të njësisë mund të gjenden në nënseksionin tjetër.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

Ndërtoni paketën e instalueshme

Për të ndërtuar një paketë të instalueshme që mund të përdoret si një varësi nga një projekt tjetër CMake me find_package(tensorflow-lite CONFIG) , përdorni opsionin -DTFLITE_ENABLE_INSTALL=ON .

Në mënyrë ideale, duhet të ofroni edhe versionet tuaja të varësive të bibliotekës. Këto do të duhet gjithashtu të përdoren nga projekti që varet nga LiteRT. Mund të përdorni -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dhe të vendosni variablat <PackageName>_DIR që të tregojnë instalimet e bibliotekës suaj.

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

Ndër-përmbledhje

Ju mund të përdorni CMake për të ndërtuar binare për arkitekturat e synuara ARM64 ose Android.

Për të ndërthurur LiteRT-në, duhet të siguroni shtegun për në SDK (p.sh. ARM64 SDK ose NDK në rastin e Android) me flamurin -DCMAKE_TOOLCHAIN_FILE .

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Specifikat e ndërthurjes së Android

Për ndërthurjen e Android, duhet të instaloni Android NDK dhe të siguroni shtegun NDK me -DCMAKE_TOOLCHAIN_FILE flamurin e përmendur më sipër. Ju gjithashtu duhet të vendosni ABI-në e synuar me flamurin -DANDROID_ABI .

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Specifikat e testeve të kernelit (njësive) të ndërthurjes

Kompilimi i kryqëzuar i testeve të njësisë kërkon përpilues flatc për arkitekturën e hostit. Për këtë qëllim, ekziston një CMakeLists e vendosur në tensorflow/lite/tools/cmake/native_tools/flatbuffers për të ndërtuar paraprakisht përpiluesin flatc me CMake në një direktori të veçantë ndërtimi duke përdorur zinxhirin e veglave pritës.

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Është gjithashtu e mundur të instaloni flatc në një vendndodhje instalimi të personalizuar (p.sh. në një drejtori që përmban mjete të tjera të ndërtuara në mënyrë origjinale në vend të drejtorisë së ndërtimit CMake):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Për vetë përpilimin e ndërthurur të LiteRT, duhet të sigurohet parametri shtesë -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> që tregon direktoriumin që përmban binarin vendas flatc së bashku me -DTFLITE_KERNEL_TEST=on flamurin e përmendur më sipër.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Testet e kernelit (njësive) të ndërthurura nisen në objektiv

Testet e njësisë mund të ekzekutohen si ekzekutues të veçantë ose duke përdorur programin CTest. Për sa i përket CTest-it, nëse të paktën një nga parametrat TFLITE_ENABLE_XNNPACK or TFLITE_EXTERNAL_DELEGATE është aktivizuar për ndërtimin e LiteRT, testet që rezultojnë gjenerohen me dy etiketa të ndryshme (duke përdorur të njëjtin ekzekutues provë): - i thjeshtë - që tregon testet shtesë që presin testet e CPU-së. nisni argumentet e përdorura për specifikimin e delegatit të përdorur

Të dy CTestTestfile.cmake dhe run-tests.cmake (siç përmendet më poshtë) janë të disponueshme në <build_dir>/kernels .

Nisja e testeve të njësisë me prapavijën e CPU-së (me kusht që CTestTestfile.cmake të jetë i pranishëm në objektiv në drejtorinë aktuale):

ctest -L plain

Nisni shembuj të testeve të njësive duke përdorur delegatë (me kusht që skedari CTestTestfile.cmake si dhe skedari run-tests.cmake të jenë të pranishëm në objektiv në direktorinë aktuale):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

Një kufizim i njohur i kësaj mënyre të ofrimit të argumenteve shtesë të nisjes lidhur me delegat në testet e njësisë është se ai në mënyrë efektive mbështet vetëm ato me një vlerë të pritshme kthimi prej 0 . Vlerat e ndryshme të kthimit do të raportohen si një dështim i testit.

Delegat i OpenCL GPU

Nëse makina juaj e synuar ka mbështetje OpenCL, mund të përdorni delegatin e GPU-së i cili mund të shfrytëzojë fuqinë tuaj GPU.

Për të konfiguruar mbështetjen e delegatëve të OpenCL GPU:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

Hapi 5. Ndërtoni LiteRT

Në drejtorinë tflite_build ,

cmake --build . -j

Hapi 6. Build LiteRT Benchmark Tool and Label Image Shembull (opsionale)

Në drejtorinë tflite_build ,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

Opsionet e disponueshme për të ndërtuar LiteRT

Këtu është lista e opsioneve të disponueshme. Mund ta anashkaloni me -D<option_name>=[ON|OFF] . Për shembull, -DTFLITE_ENABLE_XNNPACK=OFF për të çaktivizuar XNNPACK i cili është i aktivizuar si parazgjedhje.

Emri i opsionit Veçori Android Linux macOS Dritaret
TFLITE_ENABLE_RUY Aktivizo bibliotekën e shumëzimit të matricës RUY AKTIV FAKT FAKT FAKT
TFLITE_ENABLE_GPU Aktivizo delegatin e GPU FAKT FAKT N/A N/A
TFLITE_ENABLE_XNNPACK Aktivizo delegatin XNNPACK AKTIV AKTIV AKTIV AKTIV
TFLITE_ENABLE_MMAP Aktivizo MMAP AKTIV AKTIV AKTIV N/A

Krijo një projekt CMake i cili përdor LiteRT

Këtu është shembulli minimal CMakeLists.txt i TFLite .

Duhet të keni add_subdirectory() për direktoriumin LiteRT dhe të lidhni tensorflow-lite me 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)

Ndërtoni bibliotekën LiteRT C

Nëse dëshironi të ndërtoni bibliotekë të përbashkët LiteRT për C API , ndiqni hapin 1 deri në hapin 3 fillimisht. Pas kësaj, ekzekutoni komandat e mëposhtme.

TENSORFLOW_VERSION=$(grep "TF_VERSION = " "../tensorflow_src/tensorflow/tf_version.bzl" | cut -d= -f2 | sed 's/[ "-]//g')
IFS='.' read -r -a array <<< "$TENSORFLOW_VERSION"
TF_MAJOR=${array[0]}
TF_MINOR=${array[1]}
TF_PATCH=${array[2]}
TF_CXX_FLAGS="-DTF_MAJOR_VERSION=${TF_MAJOR} -DTF_MINOR_VERSION=${TF_MINOR} -DTF_PATCH_VERSION=${TF_PATCH} -DTF_VERSION_SUFFIX=''"
cmake -DCMAKE_C_FLAGS="${TF_CXX_FLAGS}" -DCMAKE_CXX_FLAGS="${TF_CXX_FLAGS}" ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

Kjo komandë gjeneron bibliotekën e mëposhtme të përbashkët në drejtorinë aktuale.

Platforma Emri i bibliotekës
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Dritaret tensorflowlite_c.dll
,

Kjo faqe përshkruan se si të ndërtoni dhe përdorni bibliotekën LiteRT me mjetin CMake .

Udhëzimet e mëposhtme janë testuar në Ubuntu 16.04.3 64-bit PC (AMD64), macOS Catalina (x86_64), Windows 10 dhe TensorFlow Devel Docker image tensorflow/tensorflow:devel .

Hapi 1. Instaloni mjetin CMake

Kërkon CMake 3.16 ose më të lartë. Në Ubuntu, thjesht mund të ekzekutoni komandën e mëposhtme.

sudo apt-get install cmake

Ose mund të ndiqni udhëzuesin zyrtar të instalimit cmake

Hapi 2. Klononi depon e TensorFlow

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

Hapi 3. Krijo drejtorinë e ndërtimit të CMake

mkdir tflite_build
cd tflite_build

Hapi 4. Ekzekutoni mjetin CMake me konfigurime

Lëshoni ndërtimin

Ai gjeneron një binar të optimizuar të lëshimit si parazgjedhje. Nëse dëshironi të ndërtoni për stacionin tuaj të punës, thjesht ekzekutoni komandën e mëposhtme.

cmake ../tensorflow_src/tensorflow/lite

Ndërtimi i korrigjimit

Nëse keni nevojë të krijoni një ndërtim korrigjimi që ka informacion simboli, ju duhet të siguroni opsionin -DCMAKE_BUILD_TYPE=Debug .

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

Ndërtoni me teste të njësisë së kernelit

Për të qenë në gjendje të ekzekutoni testet e kernelit, duhet të jepni flamurin -DTFLITE_KERNEL_TEST=on . Specifikat e përpilimit të kryqëzuar të testit të njësisë mund të gjenden në nënseksionin tjetër.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

Ndërtoni paketën e instalueshme

Për të ndërtuar një paketë të instalueshme që mund të përdoret si një varësi nga një projekt tjetër CMake me find_package(tensorflow-lite CONFIG) , përdorni opsionin -DTFLITE_ENABLE_INSTALL=ON .

Në mënyrë ideale, duhet të ofroni edhe versionet tuaja të varësive të bibliotekës. Këto do të duhet gjithashtu të përdoren nga projekti që varet nga LiteRT. Mund të përdorni -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dhe të vendosni variablat <PackageName>_DIR që të tregojnë instalimet e bibliotekës suaj.

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

Ndër-përmbledhje

Ju mund të përdorni CMake për të ndërtuar binare për arkitekturat e synuara ARM64 ose Android.

Për të ndërthurur LiteRT-në, duhet të siguroni shtegun për në SDK (p.sh. ARM64 SDK ose NDK në rastin e Android) me flamurin -DCMAKE_TOOLCHAIN_FILE .

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Specifikat e ndërthurjes së Android

Për ndërthurjen e Android, duhet të instaloni Android NDK dhe të siguroni shtegun NDK me -DCMAKE_TOOLCHAIN_FILE flamurin e përmendur më sipër. Ju gjithashtu duhet të vendosni ABI-në e synuar me flamurin -DANDROID_ABI .

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Specifikat e testeve të kernelit (njësive) të ndërthurjes

Kompilimi i kryqëzuar i testeve të njësisë kërkon përpilues flatc për arkitekturën e hostit. Për këtë qëllim, ekziston një CMakeLists e vendosur në tensorflow/lite/tools/cmake/native_tools/flatbuffers për të ndërtuar paraprakisht përpiluesin flatc me CMake në një direktori të veçantë ndërtimi duke përdorur zinxhirin e veglave pritës.

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Është gjithashtu e mundur të instaloni flatc në një vendndodhje instalimi të personalizuar (p.sh. në një drejtori që përmban mjete të tjera të ndërtuara në mënyrë origjinale në vend të drejtorisë së ndërtimit CMake):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Për vetë përpilimin e ndërthurur të LiteRT, duhet të sigurohet parametri shtesë -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> që tregon direktoriumin që përmban binarin vendas flatc së bashku me -DTFLITE_KERNEL_TEST=on flamurin e përmendur më sipër.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Testet e kernelit (njësive) të ndërthurura nisen në objektiv

Testet e njësisë mund të ekzekutohen si ekzekutues të veçantë ose duke përdorur programin CTest. Për sa i përket CTest-it, nëse të paktën një nga parametrat TFLITE_ENABLE_XNNPACK or TFLITE_EXTERNAL_DELEGATE është aktivizuar për ndërtimin e LiteRT, testet që rezultojnë gjenerohen me dy etiketa të ndryshme (duke përdorur të njëjtin ekzekutues provë): - i thjeshtë - që tregon testet shtesë që presin testet e CPU-së. nisni argumentet e përdorura për specifikimin e delegatit të përdorur

Të dy CTestTestfile.cmake dhe run-tests.cmake (siç përmendet më poshtë) janë të disponueshme në <build_dir>/kernels .

Nisja e testeve të njësisë me prapavijën e CPU-së (me kusht që CTestTestfile.cmake të jetë i pranishëm në objektiv në drejtorinë aktuale):

ctest -L plain

Nisni shembuj të testeve të njësive duke përdorur delegatë (me kusht që skedari CTestTestfile.cmake si dhe skedari run-tests.cmake të jenë të pranishëm në objektiv në direktorinë aktuale):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

Një kufizim i njohur i kësaj mënyre të ofrimit të argumenteve shtesë të nisjes lidhur me delegat në testet e njësisë është se ai në mënyrë efektive mbështet vetëm ato me një vlerë të pritshme kthimi prej 0 . Vlerat e ndryshme të kthimit do të raportohen si një dështim i testit.

Delegat i OpenCL GPU

Nëse makina juaj e synuar ka mbështetje OpenCL, mund të përdorni delegatin e GPU-së i cili mund të shfrytëzojë fuqinë tuaj GPU.

Për të konfiguruar mbështetjen e delegatëve të OpenCL GPU:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

Hapi 5. Ndërtoni LiteRT

Në drejtorinë tflite_build ,

cmake --build . -j

Hapi 6. Build LiteRT Benchmark Tool and Label Image Shembull (opsionale)

Në drejtorinë tflite_build ,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

Opsionet e disponueshme për të ndërtuar LiteRT

Këtu është lista e opsioneve të disponueshme. Mund ta anashkaloni me -D<option_name>=[ON|OFF] . Për shembull, -DTFLITE_ENABLE_XNNPACK=OFF për të çaktivizuar XNNPACK i cili është i aktivizuar si parazgjedhje.

Emri i opsionit Veçori Android Linux macOS Dritaret
TFLITE_ENABLE_RUY Aktivizo bibliotekën e shumëzimit të matricës RUY AKTIV FAKT FAKT FAKT
TFLITE_ENABLE_GPU Aktivizo delegatin e GPU FAKT FAKT N/A N/A
TFLITE_ENABLE_XNNPACK Aktivizo delegatin XNNPACK AKTIV AKTIV AKTIV AKTIV
TFLITE_ENABLE_MMAP Aktivizo MMAP AKTIV AKTIV AKTIV N/A

Krijo një projekt CMake i cili përdor LiteRT

Këtu është shembulli minimal CMakeLists.txt i TFLite .

Duhet të keni add_subdirectory() për direktoriumin LiteRT dhe të lidhni tensorflow-lite me 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)

Ndërtoni bibliotekën LiteRT C

Nëse dëshironi të ndërtoni bibliotekë të përbashkët LiteRT për C API , ndiqni hapin 1 deri në hapin 3 fillimisht. Pas kësaj, ekzekutoni komandat e mëposhtme.

TENSORFLOW_VERSION=$(grep "TF_VERSION = " "../tensorflow_src/tensorflow/tf_version.bzl" | cut -d= -f2 | sed 's/[ "-]//g')
IFS='.' read -r -a array <<< "$TENSORFLOW_VERSION"
TF_MAJOR=${array[0]}
TF_MINOR=${array[1]}
TF_PATCH=${array[2]}
TF_CXX_FLAGS="-DTF_MAJOR_VERSION=${TF_MAJOR} -DTF_MINOR_VERSION=${TF_MINOR} -DTF_PATCH_VERSION=${TF_PATCH} -DTF_VERSION_SUFFIX=''"
cmake -DCMAKE_C_FLAGS="${TF_CXX_FLAGS}" -DCMAKE_CXX_FLAGS="${TF_CXX_FLAGS}" ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

Kjo komandë gjeneron bibliotekën e mëposhtme të përbashkët në drejtorinë aktuale.

Platforma Emri i bibliotekës
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Dritaret tensorflowlite_c.dll
,

Kjo faqe përshkruan se si të ndërtoni dhe përdorni bibliotekën LiteRT me mjetin CMake .

Udhëzimet e mëposhtme janë testuar në Ubuntu 16.04.3 64-bit PC (AMD64), macOS Catalina (x86_64), Windows 10 dhe TensorFlow Devel Docker image tensorflow/tensorflow:devel .

Hapi 1. Instaloni mjetin CMake

Kërkon CMake 3.16 ose më të lartë. Në Ubuntu, thjesht mund të ekzekutoni komandën e mëposhtme.

sudo apt-get install cmake

Ose mund të ndiqni udhëzuesin zyrtar të instalimit cmake

Hapi 2. Klononi depon e TensorFlow

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

Hapi 3. Krijo drejtorinë e ndërtimit të CMake

mkdir tflite_build
cd tflite_build

Hapi 4. Ekzekutoni mjetin CMake me konfigurime

Lëshoni ndërtimin

Ai gjeneron një binar të optimizuar të lëshimit si parazgjedhje. Nëse dëshironi të ndërtoni për stacionin tuaj të punës, thjesht ekzekutoni komandën e mëposhtme.

cmake ../tensorflow_src/tensorflow/lite

Ndërtimi i korrigjimit

Nëse keni nevojë të krijoni një ndërtim korrigjimi që ka informacion simboli, ju duhet të siguroni opsionin -DCMAKE_BUILD_TYPE=Debug .

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

Ndërtoni me teste të njësisë së kernelit

Për të qenë në gjendje të ekzekutoni testet e kernelit, duhet të jepni flamurin -DTFLITE_KERNEL_TEST=on . Specifikat e përpilimit të kryqëzuar të testit të njësisë mund të gjenden në nënseksionin tjetër.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

Ndërtoni paketën e instalueshme

Për të ndërtuar një paketë të instalueshme që mund të përdoret si një varësi nga një projekt tjetër CMake me find_package(tensorflow-lite CONFIG) , përdorni opsionin -DTFLITE_ENABLE_INSTALL=ON .

Në mënyrë ideale, duhet të ofroni edhe versionet tuaja të varësive të bibliotekës. Këto do të duhet gjithashtu të përdoren nga projekti që varet nga LiteRT. Mund të përdorni -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dhe të vendosni variablat <PackageName>_DIR që të tregojnë instalimet e bibliotekës suaj.

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

Përmbledhje e kryqëzuar

Ju mund të përdorni CMake për të ndërtuar binare për arkitekturat e synuara ARM64 ose Android.

Për të ndërthurur LiteRT-në, duhet të siguroni shtegun për në SDK (p.sh. ARM64 SDK ose NDK në rastin e Android) me flamurin -DCMAKE_TOOLCHAIN_FILE .

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Specifikat e ndërthurjes së Android

Për ndërthurjen e Android, duhet të instaloni Android NDK dhe të siguroni shtegun NDK me -DCMAKE_TOOLCHAIN_FILE flamurin e përmendur më sipër. Ju gjithashtu duhet të vendosni ABI-në e synuar me flamurin -DANDROID_ABI .

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Specifikat e testeve të kernelit (njësive) të ndërthurjes

Kompilimi i kryqëzuar i testeve të njësisë kërkon përpilues flatc për arkitekturën e hostit. Për këtë qëllim, ekziston një CMakeLists e vendosur në tensorflow/lite/tools/cmake/native_tools/flatbuffers për të ndërtuar paraprakisht përpiluesin flatc me CMake në një direktori të veçantë ndërtimi duke përdorur zinxhirin e veglave pritës.

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Është gjithashtu e mundur të instaloni flatc në një vendndodhje instalimi të personalizuar (p.sh. në një drejtori që përmban mjete të tjera të ndërtuara në mënyrë origjinale në vend të drejtorisë së ndërtimit CMake):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Për vetë përpilimin e ndërthurur të LiteRT, duhet të sigurohet parametri shtesë -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> që tregon direktoriumin që përmban binarin vendas flatc së bashku me -DTFLITE_KERNEL_TEST=on flamurin e përmendur më sipër.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Testet e kernelit (njësive) të ndërthurura nisen në objektiv

Testet e njësisë mund të ekzekutohen si ekzekutues të veçantë ose duke përdorur programin CTest. Për sa i përket CTest-it, nëse të paktën një nga parametrat TFLITE_ENABLE_XNNPACK or TFLITE_EXTERNAL_DELEGATE është aktivizuar për ndërtimin e LiteRT, testet që rezultojnë gjenerohen me dy etiketa të ndryshme (duke përdorur të njëjtin ekzekutues provë): - i thjeshtë - që tregon testet shtesë që presin testet e CPU-së. nisni argumentet e përdorura për specifikimin e delegatit të përdorur

Të dy CTestTestfile.cmake dhe run-tests.cmake (siç përmendet më poshtë) janë të disponueshme në <build_dir>/kernels .

Nisja e testeve të njësisë me prapavijën e CPU-së (me kusht që CTestTestfile.cmake të jetë i pranishëm në objektiv në drejtorinë aktuale):

ctest -L plain

Nisni shembuj të testeve të njësive duke përdorur delegatë (me kusht që skedari CTestTestfile.cmake si dhe skedari run-tests.cmake të jenë të pranishëm në objektiv në direktorinë aktuale):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

Një kufizim i njohur i kësaj mënyre të ofrimit të argumenteve shtesë të nisjes lidhur me delegat në testet e njësisë është se ai në mënyrë efektive mbështet vetëm ato me një vlerë të pritshme kthimi prej 0 . Vlerat e ndryshme të kthimit do të raportohen si një dështim i testit.

Delegat i OpenCL GPU

Nëse makina juaj e synuar ka mbështetje OpenCL, mund të përdorni delegatin e GPU-së i cili mund të shfrytëzojë fuqinë tuaj GPU.

Për të konfiguruar mbështetjen e delegatëve të OpenCL GPU:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

Hapi 5. Ndërtoni LiteRT

Në drejtorinë tflite_build ,

cmake --build . -j

Hapi 6. Build LiteRT Benchmark Tool and Label Image Shembull (opsionale)

Në drejtorinë tflite_build ,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

Opsionet e disponueshme për të ndërtuar LiteRT

Këtu është lista e opsioneve të disponueshme. Mund ta anashkaloni me -D<option_name>=[ON|OFF] . Për shembull, -DTFLITE_ENABLE_XNNPACK=OFF për të çaktivizuar XNNPACK i cili është i aktivizuar si parazgjedhje.

Emri i opsionit Veçori Android Linux macOS Dritaret
TFLITE_ENABLE_RUY Aktivizo bibliotekën e shumëzimit të matricës RUY AKTIV FAKT FAKT FAKT
TFLITE_ENABLE_GPU Aktivizo delegatin e GPU FAKT FAKT N/A N/A
TFLITE_ENABLE_XNNPACK Aktivizo delegatin XNNPACK AKTIV AKTIV AKTIV AKTIV
TFLITE_ENABLE_MMAP Aktivizo MMAP AKTIV AKTIV AKTIV N/A

Krijo një projekt CMake i cili përdor LiteRT

Këtu është shembulli minimal CMakeLists.txt i TFLite .

Duhet të keni add_subdirectory() për direktoriumin LiteRT dhe të lidhni tensorflow-lite me 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)

Ndërtoni bibliotekën LiteRT C

Nëse dëshironi të ndërtoni bibliotekë të përbashkët LiteRT për C API , ndiqni hapin 1 deri në hapin 3 fillimisht. Pas kësaj, ekzekutoni komandat e mëposhtme.

TENSORFLOW_VERSION=$(grep "TF_VERSION = " "../tensorflow_src/tensorflow/tf_version.bzl" | cut -d= -f2 | sed 's/[ "-]//g')
IFS='.' read -r -a array <<< "$TENSORFLOW_VERSION"
TF_MAJOR=${array[0]}
TF_MINOR=${array[1]}
TF_PATCH=${array[2]}
TF_CXX_FLAGS="-DTF_MAJOR_VERSION=${TF_MAJOR} -DTF_MINOR_VERSION=${TF_MINOR} -DTF_PATCH_VERSION=${TF_PATCH} -DTF_VERSION_SUFFIX=''"
cmake -DCMAKE_C_FLAGS="${TF_CXX_FLAGS}" -DCMAKE_CXX_FLAGS="${TF_CXX_FLAGS}" ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

Kjo komandë gjeneron bibliotekën e mëposhtme të përbashkët në drejtorinë aktuale.

Platforma Emri i bibliotekës
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Dritaret tensorflowlite_c.dll
,

Kjo faqe përshkruan se si të ndërtoni dhe përdorni bibliotekën LiteRT me mjetin CMake .

Udhëzimet e mëposhtme janë testuar në Ubuntu 16.04.3 64-bit PC (AMD64), macOS Catalina (x86_64), Windows 10 dhe TensorFlow Devel Docker image tensorflow/tensorflow:devel .

Hapi 1. Instaloni mjetin CMake

Kërkon CMake 3.16 ose më të lartë. Në Ubuntu, thjesht mund të ekzekutoni komandën e mëposhtme.

sudo apt-get install cmake

Ose mund të ndiqni udhëzuesin zyrtar të instalimit cmake

Hapi 2. Klononi depon e TensorFlow

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

Hapi 3. Krijo drejtorinë e ndërtimit të CMake

mkdir tflite_build
cd tflite_build

Hapi 4. Ekzekutoni mjetin CMake me konfigurime

Lëshoni ndërtimin

Ai gjeneron një binar të optimizuar të lëshimit si parazgjedhje. Nëse dëshironi të ndërtoni për stacionin tuaj të punës, thjesht ekzekutoni komandën e mëposhtme.

cmake ../tensorflow_src/tensorflow/lite

Ndërtimi i korrigjimit

Nëse keni nevojë të krijoni një ndërtim korrigjimi që ka informacion simboli, ju duhet të siguroni opsionin -DCMAKE_BUILD_TYPE=Debug .

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

Ndërtoni me teste të njësisë së kernelit

Për të qenë në gjendje të ekzekutoni testet e kernelit, duhet të jepni flamurin -DTFLITE_KERNEL_TEST=on . Specifikat e përpilimit të kryqëzuar të testit të njësisë mund të gjenden në nënseksionin tjetër.

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

Ndërtoni paketën e instalueshme

Për të ndërtuar një paketë të instalueshme që mund të përdoret si një varësi nga një projekt tjetër CMake me find_package(tensorflow-lite CONFIG) , përdorni opsionin -DTFLITE_ENABLE_INSTALL=ON .

Në mënyrë ideale, duhet të ofroni edhe versionet tuaja të varësive të bibliotekës. Këto do të duhet gjithashtu të përdoren nga projekti që varet nga LiteRT. Mund të përdorni -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dhe të vendosni variablat <PackageName>_DIR që të tregojnë instalimet e bibliotekës suaj.

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

Përmbledhje e kryqëzuar

Ju mund të përdorni CMake për të ndërtuar binare për arkitekturat e synuara ARM64 ose Android.

Për të ndërthurur LiteRT-në, duhet të siguroni shtegun për në SDK (p.sh. ARM64 SDK ose NDK në rastin e Android) me flamurin -DCMAKE_TOOLCHAIN_FILE .

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Specifikat e ndërthurjes së Android

Për ndërthurjen e Android, duhet të instaloni Android NDK dhe të siguroni shtegun NDK me -DCMAKE_TOOLCHAIN_FILE flamurin e përmendur më sipër. Ju gjithashtu duhet të vendosni ABI-në e synuar me flamurin -DANDROID_ABI .

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Specifikat e testeve të kernelit (njësive) të ndërthurjes

Kompilimi i kryqëzuar i testeve të njësisë kërkon përpilues flatc për arkitekturën e hostit. Për këtë qëllim, ekziston një CMakeLists e vendosur në tensorflow/lite/tools/cmake/native_tools/flatbuffers për të ndërtuar paraprakisht përpiluesin flatc me CMake në një direktori të veçantë ndërtimi duke përdorur zinxhirin e veglave pritës.

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Është gjithashtu e mundur të instaloni flatc në një vendndodhje instalimi të personalizuar (p.sh. në një drejtori që përmban mjete të tjera të ndërtuara në mënyrë origjinale në vend të drejtorisë së ndërtimit CMake):

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

Për vetë përpilimin e ndërthurur të LiteRT, duhet të sigurohet parametri shtesë -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> që tregon direktoriumin që përmban binarin vendas flatc së bashku me -DTFLITE_KERNEL_TEST=on flamurin e përmendur më sipër.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Testet e kernelit (njësive) të ndërthurura nisen në objektiv

Testet e njësisë mund të ekzekutohen si ekzekutues të veçantë ose duke përdorur programin CTest. Për sa i përket CTest-it, nëse të paktën një nga parametrat TFLITE_ENABLE_XNNPACK or TFLITE_EXTERNAL_DELEGATE është aktivizuar për ndërtimin e LiteRT, testet që rezultojnë gjenerohen me dy etiketa të ndryshme (duke përdorur të njëjtin ekzekutues provë): - i thjeshtë - që tregon testet shtesë që presin testet e CPU-së. nisni argumentet e përdorura për specifikimin e delegatit të përdorur

Të dy CTestTestfile.cmake dhe run-tests.cmake (siç përmendet më poshtë) janë të disponueshme në <build_dir>/kernels .

Nisja e testeve të njësisë me prapavijën e CPU-së (me kusht që CTestTestfile.cmake të jetë i pranishëm në objektiv në drejtorinë aktuale):

ctest -L plain

Nisni shembuj të testeve të njësive duke përdorur delegatë (me kusht që skedari CTestTestfile.cmake si dhe skedari run-tests.cmake të jenë të pranishëm në objektiv në direktorinë aktuale):

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

Një kufizim i njohur i kësaj mënyre të ofrimit të argumenteve shtesë të nisjes lidhur me delegat në testet e njësisë është se ai në mënyrë efektive mbështet vetëm ato me një vlerë të pritshme kthimi prej 0 . Vlerat e ndryshme të kthimit do të raportohen si një dështim i testit.

Delegat i OpenCL GPU

Nëse makina juaj e synuar ka mbështetje OpenCL, mund të përdorni delegatin e GPU-së i cili mund të shfrytëzojë fuqinë tuaj GPU.

Për të konfiguruar mbështetjen e delegatëve të OpenCL GPU:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

Hapi 5. Ndërtoni LiteRT

Në drejtorinë tflite_build ,

cmake --build . -j

Hapi 6. Build LiteRT Benchmark Tool and Label Image Shembull (opsionale)

Në drejtorinë tflite_build ,

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

Opsionet e disponueshme për të ndërtuar LiteRT

Këtu është lista e opsioneve të disponueshme. Mund ta anashkaloni me -D<option_name>=[ON|OFF] . Për shembull, -DTFLITE_ENABLE_XNNPACK=OFF për të çaktivizuar XNNPACK i cili është i aktivizuar si parazgjedhje.

Emri i opsionit Veçori Android Linux macOS Dritaret
TFLITE_ENABLE_RUY Aktivizo bibliotekën e shumëzimit të matricës RUY AKTIV FAKT FAKT FAKT
TFLITE_ENABLE_GPU Aktivizo delegatin e GPU FAKT FAKT N/A N/A
TFLITE_ENABLE_XNNPACK Aktivizo delegatin XNNPACK AKTIV AKTIV AKTIV AKTIV
TFLITE_ENABLE_MMAP Aktivizo MMAP AKTIV AKTIV AKTIV N/A

Krijo një projekt CMake i cili përdor LiteRT

Këtu është shembulli minimal CMakeLists.txt i TFLite .

Duhet të keni add_subdirectory() për direktoriumin LiteRT dhe të lidhni tensorflow-lite me 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)

Ndërtoni bibliotekën LiteRT C

Nëse dëshironi të ndërtoni bibliotekë të përbashkët LiteRT për C API , ndiqni hapin 1 deri në hapin 3 fillimisht. Pas kësaj, ekzekutoni komandat e mëposhtme.

TENSORFLOW_VERSION=$(grep "TF_VERSION = " "../tensorflow_src/tensorflow/tf_version.bzl" | cut -d= -f2 | sed 's/[ "-]//g')
IFS='.' read -r -a array <<< "$TENSORFLOW_VERSION"
TF_MAJOR=${array[0]}
TF_MINOR=${array[1]}
TF_PATCH=${array[2]}
TF_CXX_FLAGS="-DTF_MAJOR_VERSION=${TF_MAJOR} -DTF_MINOR_VERSION=${TF_MINOR} -DTF_PATCH_VERSION=${TF_PATCH} -DTF_VERSION_SUFFIX=''"
cmake -DCMAKE_C_FLAGS="${TF_CXX_FLAGS}" -DCMAKE_CXX_FLAGS="${TF_CXX_FLAGS}" ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

Kjo komandë gjeneron bibliotekën e mëposhtme të përbashkët në drejtorinë aktuale.

Platforma Emri i bibliotekës
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Dritaret tensorflowlite_c.dll