Kompilasi silang TensorFlow Lite dengan CMake

Halaman ini menjelaskan cara membuat pustaka TensorFlow Lite untuk berbagai perangkat ARM.

Petunjuk berikut telah diuji pada Ubuntu 16.04.3 64-bit PC (AMD64) , TensorFlow devel docker image tensorflow/tensorflow:devel .

Prasyarat

Anda perlu menginstal CMake dan mendownload kode sumber TensorFlow. Silakan periksa halaman Build TensorFlow Lite dengan CMake untuk mengetahui detailnya.

Periksa lingkungan target Anda

Contoh berikut diuji pada Raspberry Pi OS, Ubuntu Server 20.04 LTS dan Mendel Linux 4.0. Bergantung pada versi glibc target dan kemampuan CPU, Anda mungkin perlu menggunakan versi rantai alat dan parameter build yang berbeda.

Memeriksa versi glibc

ldd --version
ldd (Debian GLIBC 2.28-10) 2.28
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.

Memeriksa kompatibilitas ABI

Jika target Anda adalah ARM 32-bit, ada dua ABI yang tersedia bergantung pada ketersediaan VFP. armhf dan armel . Dokumen ini menunjukkan contoh armhf, Anda perlu menggunakan rantai alat yang berbeda untuk target armel.

Memeriksa kemampuan CPU

Untuk ARMv7, Anda harus mengetahui versi VFP yang didukung target dan ketersediaan NEON.

cat /proc/cpuinfo
processor   : 0
model name  : ARMv7 Processor rev 3 (v7l)
BogoMIPS    : 108.00
Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xd08
CPU revision    : 3

Dibuat untuk AArch64 (ARM64)

Instruksi ini menunjukkan cara membangun biner AArch64 yang kompatibel dengan Coral Mendel Linux 4.0 , Raspberry Pi (dengan Ubuntu Server 20.04.01 LTS 64-bit diinstal).

Unduh rantai alat

Perintah ini menginstal gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu toolchain di bawah ${HOME}/toolchains.

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz -C ${HOME}/toolchains

Jalankan CMake

ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-
ARMCC_FLAGS="-funsafe-math-optimizations"
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  ../tensorflow/lite/

Pembuatan untuk ARMv7 NEON diaktifkan

Instruksi ini menunjukkan cara membangun ARMv7 dengan biner berkemampuan VFPv4 dan NEON yang kompatibel dengan Raspberry Pi 3 dan 4.

Unduh rantai alat

Perintah ini menginstal rantai alat gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf di bawah ${HOME}/toolchains.

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains

Jalankan CMake

ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -funsafe-math-optimizations -mfp16-format=ieee"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=armv7 \
  ../tensorflow/lite/

Dibuat untuk Raspberry Pi Zero (ARMv6)

Instruksi ini menunjukkan cara membangun biner ARMv6 yang kompatibel dengan Raspberry Pi Zero.

Unduh rantai alat

Perintah ini menginstal rantai alat gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf di bawah ${HOME}/toolchains.

curl -LO https://storage.googleapis.com/mirror.tensorflow.org/developer.arm.com/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
mkdir -p ${HOME}/toolchains
tar xvf gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C ${HOME}/toolchains

Jalankan CMake

ARMCC_FLAGS="-march=armv6 -mfpu=vfp -mfloat-abi=hard -funsafe-math-optimizations"
ARMCC_PREFIX=${HOME}/toolchains/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
cmake -DCMAKE_C_COMPILER=${ARMCC_PREFIX}gcc \
  -DCMAKE_CXX_COMPILER=${ARMCC_PREFIX}g++ \
  -DCMAKE_C_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_CXX_FLAGS="${ARMCC_FLAGS}" \
  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=armv6 \
  -DTFLITE_ENABLE_XNNPACK=OFF \
  ../tensorflow/lite/