Membangun LiteRT dengan CMake

Halaman ini menjelaskan cara membangun dan menggunakan library LiteRT dengan CMake.

Instruksi berikut telah diuji pada Ubuntu 16.04.3 64-bit PC (AMD64) , macOS Catalina (x86_64), Windows 10, dan image Docker devel TensorFlow tensorflow/tensorflow:devel.

Langkah 1. Menginstal alat CMake

Memerlukan CMake 3.16 atau yang lebih tinggi. Di Ubuntu, Anda cukup menjalankan perintah.

sudo apt-get install cmake

Atau Anda dapat mengikuti panduan penginstalan cmake resmi

Langkah 2. Meng-clone repositori TensorFlow

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

Langkah 3. Membuat direktori build CMake

mkdir tflite_build
cd tflite_build

Langkah 4. Menjalankan alat CMake dengan konfigurasi

Rilis build

Opsi ini menghasilkan biner rilis yang dioptimalkan secara default. Jika Anda ingin membangun untuk workstation Anda, cukup jalankan perintah berikut.

cmake ../tensorflow_src/tensorflow/lite

Build debug

Jika perlu menghasilkan build debug yang memiliki informasi simbol, Anda harus berikan opsi -DCMAKE_BUILD_TYPE=Debug.

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

Membangun dengan pengujian unit kernel

Agar dapat menjalankan pengujian {i>kernel<i}, Anda harus menyediakan -DTFLITE_KERNEL_TEST=on. Detail-silang kompilasi silang pengujian unit dapat yang ditemukan di subbagian berikutnya.

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

Membuat paket yang dapat diinstal

Untuk membangun paket yang dapat diinstal yang dapat digunakan sebagai dependensi oleh project CMake dengan find_package(tensorflow-lite CONFIG), gunakan -DTFLITE_ENABLE_INSTALL=ON.

Idealnya, Anda juga harus menyediakan versi dependensi library Anda sendiri. Aturan ini juga perlu digunakan oleh project yang bergantung pada LiteRT. Anda dapat gunakan -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dan setel <PackageName>_DIR variabel untuk menunjuk ke instalasi {i>library<i} Anda.

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

Kompilasi silang

Anda dapat menggunakan CMake untuk membangun biner bagi arsitektur target ARM64 atau Android.

Untuk mengompilasi silang LiteRT, Anda harus menyediakan jalur ke SDK (misalnya ARM64 SDK atau NDK dalam kasus Android) dengan -DCMAKE_TOOLCHAIN_FILE penanda.

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Detail kompilasi silang Android

Untuk kompilasi silang Android, Anda harus menginstal Android NDK dan menyediakan jalur NDK dengan Flag -DCMAKE_TOOLCHAIN_FILE yang disebutkan di atas. Anda juga perlu menetapkan ABI target dengan flag -DANDROID_ABI.

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
Kekhususan kernel (unit) menguji kompilasi silang

Kompilasi silang pengujian unit memerlukan compiler flatc untuk host tentang arsitektur ini. Untuk tujuan ini, ada CMakeLists yang terletak di tensorflow/lite/tools/cmake/native_tools/flatbuffers untuk membuat flatc dengan CMake terlebih dahulu di direktori build terpisah menggunakan host Rantai Alat (Toolchain).

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

Anda juga dapat menginstal flatc ke lokasi penginstalan kustom (misalnya, ke direktori yang berisi alat yang dibangun secara native lain, bukan CMake direktori build):

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

Untuk kompilasi silang LiteRT itu sendiri, parameter tambahan -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> mengarah ke direktori yang berisi biner flatc native harus disediakan bersama dengan Flag -DTFLITE_KERNEL_TEST=on yang disebutkan di atas.

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
Pengujian kernel (unit) yang dikompilasi silang diluncurkan sesuai target

Pengujian unit dapat dijalankan sebagai file yang dapat dieksekusi terpisah atau menggunakan utilitas CTest. Selama ini seperti yang diperhatikan CTest, jika setidaknya salah satu parameter TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE` diaktifkan untuk LiteRT build, pengujian yang dihasilkan dihasilkan dengan dua label yang berbeda (menggunakan pengujian yang sama yang dapat dieksekusi): - biasa - yang menunjukkan pengujian tempat pengujian dijalankan Backend CPU - delegasikan - yang menunjukkan bahwa pengujian mengharapkan peluncuran tambahan argumen yang digunakan untuk spesifikasi delegasi yang digunakan

CTestTestfile.cmake dan run-tests.cmake (sebagaimana disebutkan di bawah) tersedia di <build_dir>/kernels.

Peluncuran pengujian unit dengan backend CPU (asalkan CTestTestfile.cmake adalah ada sesuai target dalam direktori saat ini):

ctest -L plain

Meluncurkan contoh pengujian unit yang menggunakan delegasi (asalkan CTestTestfile.cmake serta run-tests.cmake file sesuai target di direktori saat ini):

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

Keterbatasan yang diketahui untuk memberikan cara memberikan tambahan terkait delegasi mengaktifkan argumen ke pengujian unit secara efektif hanya mendukung mereka yang memiliki nilai hasil yang diharapkan 0. Nilai hasil yang berbeda akan dilaporkan sebagai kegagalan uji.

Delegasi GPU OpenCL

Jika komputer target memiliki dukungan OpenCL, Anda dapat menggunakan Delegasi GPU yang dapat memanfaatkan kekuatan GPU Anda.

Untuk mengonfigurasi dukungan delegasi GPU OpenCL:

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

Langkah 5. Membangun LiteRT

Dalam direktori tflite_build,

cmake --build . -j

Langkah 6. Membuat Alat Tolok Ukur LiteRT dan Contoh Gambar Label (Opsional)

Dalam direktori tflite_build,

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

Opsi yang Tersedia untuk membangun LiteRT

Berikut adalah daftar opsi yang tersedia. Anda dapat menggantinya dengan -D<option_name>=[ON|OFF]. Misalnya, -DTFLITE_ENABLE_XNNPACK=OFF ke nonaktifkan XNNPACK yang diaktifkan secara default.

Nama Opsi Fitur Android Linux macOS Windows
TFLITE_ENABLE_RUY Aktifkan RUY matriks perkalian perpustakaan AKTIF NONAKTIF NONAKTIF NONAKTIF
TFLITE_ENABLE_GPU Aktifkan GPU delegasi NONAKTIF NONAKTIF T/A T/A
TFLITE_ENABLE_XNNPACK Aktifkan XNNPACK delegasi AKTIF AKTIF AKTIF AKTIF
TFLITE_ENABLE_MMAP Aktifkan MMAP AKTIF AKTIF AKTIF T/A

Membuat project CMake yang menggunakan LiteRT

Berikut adalah CMakeLists.txt dari Contoh minimal TFLite.

Anda harus memiliki add_subdirectory() untuk direktori LiteRT dan link tensorflow-lite dengan 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)

Membangun library LiteRT C

Jika Anda ingin membangun pustaka bersama LiteRT untuk C API, ikuti langkah 1 untuk langkah 3 terlebih dahulu. Setelah itu, jalankan perintah berikut.

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

Perintah ini menghasilkan library bersama berikut di direktori saat ini.

Platform Nama perpustakaan
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll