Bangun TensorFlow Lite dengan CMake

Halaman ini menjelaskan bagaimana membangun dan menggunakan perpustakaan TensorFlow Lite dengan CMake alat.

Petunjuk berikut telah diuji pada Ubuntu 16.04.3 64-bit PC (AMD64), MacOS Catalina (x86_64), Windows 10 dan TensorFlow devel Docker gambar 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. Klon 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 untuk workstation Anda, cukup jalankan perintah berikut.

cmake ../tensorflow_src/tensorflow/lite

Debug build

Jika Anda perlu untuk menghasilkan debug membangun yang memiliki informasi simbol, Anda perlu memberikan -DCMAKE_BUILD_TYPE=Debug pilihan.

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

Bangun dengan tes unit kernel

Agar dapat menjalankan tes kernel, Anda perlu memberikan tanda '-DTFLITE_KERNEL_TEST=on'. Spesifik kompilasi silang pengujian unit dapat ditemukan di subbagian berikutnya.

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

kompilasi silang

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

Dalam rangka untuk menyeberangi-mengkompilasi TF Lite, Anda yaitu harus memberikan jalan untuk SDK (misalnya ARM64 SDK atau NDK dalam kasus Android) dengan -DCMAKE_TOOLCHAIN_FILE bendera.

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

Untuk Android cross-kompilasi, Anda perlu menginstal Android NDK dan menyediakan jalur NDK dengan -DCMAKE_TOOLCHAIN_FILE bendera yang disebutkan di atas. Anda juga perlu target yang ditetapkan ABI dengan -DANDROID_ABI bendera.

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

Kompilasi silang dari unit test membutuhkan kompiler flatc untuk arsitektur host. Untuk tujuan ini, ada CMakeLists terletak di tensorflow/lite/tools/cmake/native_tools/flatbuffers untuk membangun compiler flatc dengan CMake di muka dalam sebuah direktori build terpisah menggunakan toolchain tuan rumah.

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

Hal ini juga memungkinkan untuk menginstal flatc ke lokasi instalasi custom (misalnya ke direktori yang berisi alat native-dibangun lainnya bukan CMake membangun direktori):

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

Untuk TF Lite lintas kompilasi sendiri, tambahan parameter -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> menunjuk ke direktori yang berisi kebutuhan flatc asli biner yang akan diberikan bersama dengan -DTFLITE_KERNEL_TEST=on bendera 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/
Kernel (unit) yang dikompilasi silang diluncurkan sesuai target

Tes unit dapat dijalankan sebagai executable terpisah atau menggunakan utilitas CTest. Sejauh ctest yang bersangkutan, jika setidaknya salah satu parameter TFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK atau TFLITE_EXTERNAL_DELEGATE diaktifkan untuk TF Lite membangun, tes yang dihasilkan dihasilkan dengan dua label yang berbeda (memanfaatkan tes executable yang sama): - polos - yang menunjukkan tes yang berjalan pada CPU backend - delegasi - yang menunjukkan tes mengharapkan argumen peluncuran tambahan yang digunakan untuk spesifikasi delegasi digunakan

Kedua CTestTestfile.cmake dan run-tests.cmake (sebagaimana dimaksud di bawah ini) tersedia dalam <build_dir>/kernels .

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

ctest -L plain

Contoh peluncuran unit tes menggunakan delegasi (disediakan CTestTestfile.cmake serta run-tests.cmake berkas yang hadir pada 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 dikenal dari cara ini memberikan tambahan argumen peluncuran terkait delegasi ke unit test adalah bahwa hal itu efektif hanya mendukung mereka dengan nilai pengembalian yang diharapkan dari 0. Nilai pengembalian yang berbeda akan dilaporkan sebagai kegagalan pengujian.

Delegasi GPU OpenCL

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

Untuk mengonfigurasi dukungan delegasi OpenCL GPU:

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 Label Gambar (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 menimpa dengan -D<option_name>=[ON|OFF] . Misalnya, -DTFLITE_ENABLE_XNNPACK=OFF untuk XNNPACK menonaktifkan yang diaktifkan secara default.

Nama Opsi Fitur Android Linux macOS jendela
TFLITE_ENABLE_RUY Aktifkan perpustakaan 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 CMakeLists.txt dari TFLite contoh minimal .

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

Bangun perpustakaan TensorFlow Lite C

Jika Anda ingin membangun TensorFlow Lite bersama perpustakaan untuk API C , tindak langkah 1 ke langkah 3 pertama. 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