Membangun TensorFlow Lite dengan CMake

Halaman ini menjelaskan cara membangun dan menggunakan library TensorFlow Lite dengan alat CMake.

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

Langkah 1. Menginstal alat CMake

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

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

Build rilis

Library ini menghasilkan biner rilis yang dioptimalkan secara default. Jika Anda ingin membangun aplikasi 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 menyediakan opsi -DCMAKE_BUILD_TYPE=Debug.

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

Membangun dengan pengujian unit kernel

Agar dapat menjalankan pengujian kernel, Anda harus memberikan flag -DTFLITE_KERNEL_TEST=on. Detail kompilasi silang pengujian unit dapat ditemukan di subbagian berikutnya.

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

Membuat paket yang dapat diinstal

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

Idealnya, Anda juga harus menyediakan dependensi library versi Anda sendiri. Ini juga perlu digunakan oleh project yang bergantung pada TF Lite. Anda dapat menggunakan -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dan menetapkan variabel <PackageName>_DIR agar mengarah ke penginstalan library 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 TF Lite, Anda harus menyediakan jalur ke SDK (misalnya, ARM64 SDK atau NDK dalam kasus Android) dengan tanda -DCMAKE_TOOLCHAIN_FILE.

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Fitur 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 tanda -DANDROID_ABI.

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

Kompilasi silang pengujian unit memerlukan compiler flatc untuk arsitektur host. Untuk tujuan ini, ada CMakeList yang terletak di tensorflow/lite/tools/cmake/native_tools/flatbuffers untuk mem-build compiler flatc dengan CMake terlebih dahulu dalam direktori build terpisah menggunakan toolchain host.

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 lain yang dibuat secara native, bukan direktori build CMake):

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

Untuk kompilasi silang TF Lite itu sendiri, parameter tambahan -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> yang mengarah ke direktori 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 pada target

Pengujian unit dapat dijalankan sebagai file yang dapat dieksekusi terpisah atau menggunakan utilitas CTest. Sejauh yang diperhatikan CTest, jika setidaknya salah satu parameter TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE` diaktifkan untuk build TF Lite yang digunakan, pengujian yang dihasilkan akan dihasilkan dengan dua label berbeda (menggunakan executable pengujian yang sama): - biasa - menunjukkan pengujian yang dijalankan di spesifikasi backend yang digunakan

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

Peluncuran pengujian unit dengan backend CPU (asalkan CTestTestfile.cmake ada di target pada direktori saat ini):

ctest -L plain

Luncurkan contoh pengujian unit menggunakan delegasi (asalkan file CTestTestfile.cmake serta run-tests.cmake ada di target pada 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 terkait cara memberikan argumen peluncuran terkait delegasi tambahan ke pengujian unit adalah cara ini hanya mendukung metode dengan nilai return yang diharapkan 0. Nilai hasil yang berbeda akan dilaporkan sebagai kegagalan pengujian.

Delegasi GPU OpenCL

Jika mesin target memiliki dukungan OpenCL, Anda dapat menggunakan delegasi GPU yang dapat memanfaatkan daya GPU Anda.

Untuk mengonfigurasi dukungan delegasi GPU OpenCL:

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

Langkah 5. Mem-build TensorFlow Lite

Dalam direktori tflite_build,

cmake --build . -j

Langkah 6. Mem-build Contoh Alat Tolok Ukur dan Gambar Label TensorFlow Lite (Opsional)

Dalam direktori tflite_build,

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

Opsi yang Tersedia untuk mem-build TensorFlow Lite

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

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

Membuat project CMake yang menggunakan TensorFlow Lite

Berikut adalah CMakeLists.txt dari contoh minimal TFLite.

Anda harus memiliki add_subdirectory() untuk direktori TensorFlow Lite dan menautkan 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)

Mem-build library TensorFlow Lite C

Jika Anda ingin membangun library bersama TensorFlow Lite untuk C API, ikuti langkah 1 hingga langkah 3 terlebih dahulu. Setelah itu, jalankan perintah berikut.

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

Perintah ini menghasilkan pustaka bersama berikut di direktori saat ini.

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