Bangun TensorFlow Lite dengan CMake

Halaman ini menjelaskan cara membuat dan menggunakan pustaka TensorFlow Lite dengan alat CMake .

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

Langkah 1. Instal alat CMake

Ini membutuhkan CMake 3.16 atau lebih tinggi. Di Ubuntu, Anda cukup menjalankan perintah berikut.

sudo apt-get install cmake

Atau Anda dapat mengikuti panduan instalasi cmake resmi

Langkah 2. Kloning repositori TensorFlow

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

Langkah 3. Buat direktori build CMake

mkdir tflite_build
cd tflite_build

Langkah 4. Jalankan alat CMake dengan konfigurasi

Rilis membangun

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

cmake ../tensorflow_src/tensorflow/lite

Pembuatan debug

Jika Anda perlu membuat build debug yang memiliki informasi simbol, Anda perlu menyediakan opsi -DCMAKE_BUILD_TYPE=Debug .

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

Bangun dengan pengujian unit kernel

Agar dapat menjalankan pengujian kernel, Anda perlu menyediakan flag -DTFLITE_KERNEL_TEST=on . Spesifik kompilasi silang pengujian unit dapat ditemukan di subbagian berikutnya.

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

Bangun paket yang dapat diinstal

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

Idealnya Anda juga harus menyediakan versi dependensi perpustakaan Anda sendiri. Ini juga perlu digunakan oleh proyek yang bergantung pada TF Lite. Anda dapat menggunakan -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON dan mengatur variabel <PackageName>_DIR agar mengarah ke instalasi perpustakaan 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 membuat binari untuk arsitektur target ARM64 atau Android.

Untuk mengkompilasi silang TF Lite, Anda perlu menyediakan jalur ke SDK (misalnya ARM64 SDK atau NDK dalam kasus Android) dengan tanda -DCMAKE_TOOLCHAIN_FILE .

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

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

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

Kompilasi silang pengujian unit memerlukan kompiler flatc untuk arsitektur host. Untuk tujuan ini, ada CMakeLists yang terletak di tensorflow/lite/tools/cmake/native_tools/flatbuffers untuk membangun kompiler flatc dengan CMake terlebih dahulu di direktori build terpisah menggunakan rantai alat host.

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

Dimungkinkan juga untuk menginstal flatc ke lokasi instalasi khusus (misalnya ke direktori yang berisi alat bawaan lainnya, 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 menunjuk ke direktori yang berisi biner flatc asli perlu 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 executable terpisah atau menggunakan utilitas CTest. Sejauh menyangkut CTest, jika setidaknya salah satu parameter TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK atau TFLITE_EXTERNAL_DELEGATE diaktifkan untuk build TF Lite, pengujian yang dihasilkan dihasilkan dengan dua label berbeda (menggunakan pengujian yang sama yang dapat dijalankan): - biasa - menunjukkan pengujian yang dijalankan di backend CPU - delegasi - menunjukkan pengujian yang mengharapkan argumen peluncuran tambahan yang digunakan untuk spesifikasi delegasi yang digunakan

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

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

ctest -L plain

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

cmake -E env TESTS_ARGUMENTS=--use_nnapi=true\;--nnapi_accelerator_name=vsi-npu ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

Keterbatasan umum dari cara memberikan argumen peluncuran terkait delegasi tambahan ke pengujian unit adalah bahwa cara ini hanya mendukung argumen yang memiliki nilai pengembalian yang diharapkan sebesar 0 . Nilai pengembalian yang berbeda akan dilaporkan sebagai kegagalan pengujian.

Delegasi GPU OpenCL

Jika mesin target Anda 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. Bangun TensorFlow Lite

Di direktori tflite_build ,

cmake --build . -j

Langkah 6. Buat Alat Tolok Ukur TensorFlow Lite dan Contoh Gambar Label (Opsional)

Di direktori tflite_build ,

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

Opsi yang Tersedia untuk membangun TensorFlow Lite

Berikut adalah 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 jendela
TFLITE_ENABLE_RUY Aktifkan pustaka perkalian matriks RUY PADA MATI MATI MATI
TFLITE_ENABLE_NNAPI Aktifkan delegasi NNAPI PADA MATI T/A T/A
TFLITE_ENABLE_GPU Aktifkan delegasi GPU MATI MATI T/A T/A
TFLITE_ENABLE_XNNPACK Aktifkan delegasi XNNPACK PADA PADA PADA PADA
TFLITE_ENABLE_MMAP Aktifkan MMAP PADA PADA PADA T/A

Buat proyek CMake yang menggunakan TensorFlow Lite

Berikut adalah contoh minimal CMakeLists.txt dari 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)

Membangun perpustakaan TensorFlow Lite C

Jika Anda ingin membuat pustaka 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 perpustakaan bersama berikut di direktori saat ini.

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