Halaman ini menjelaskan cara mem-build library TensorFlow Lite untuk berbagai perangkat ARM.
Petunjuk berikut telah diuji di Ubuntu 16.04.3 PC 64-bit (AMD64), image Docker devel TensorFlow tensorflow/tensorflow:devel.
Prasyarat
Anda perlu CMake yang menginstal dan mendownload kode sumber TensorFlow. Lihat halaman Mem-build TensorFlow Lite dengan CMake untuk mengetahui detailnya.
Memeriksa lingkungan target
Contoh berikut diuji dalam OS Raspberry Pi, Ubuntu Server 20.04 LTS, dan Mendel Linux 4.0. Bergantung pada versi glibc dan kemampuan CPU target, Anda mungkin perlu menggunakan versi toolchain 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 toolchain yang berbeda untuk target armel.
Memeriksa kemampuan CPU
Untuk ARMv7, Anda harus mengetahui versi VFP yang didukung target dan ketersediaan LTV.
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
Membangun aplikasi untuk AArch64 (ARM64)
Petunjuk ini menunjukkan cara mem-build biner AArch64 yang kompatibel dengan Coral Mendel Linux 4.0, Raspberry Pi (dengan Ubuntu Server 20.04.01 LTS 64-bit yang diinstal).
Mendownload toolchain
Perintah ini menginstal toolchain gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu
dalam ${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
Menjalankan 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/
Build untuk ARMv7 neon diaktifkan
Petunjuk ini menunjukkan cara mem-build ARMv7 dengan biner berkemampuan VFPv4 dan neon yang kompatibel dengan Raspberry Pi 3 dan 4.
Mendownload toolchain
Perintah ini menginstal gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
toolchain di ${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
Menjalankan 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/
Membangun untuk Raspberry Pi Zero (ARMv6)
Petunjuk ini menunjukkan cara mem-build biner ARMv6 yang kompatibel dengan raspberry Pi Zero.
Mendownload toolchain
Perintah ini menginstal gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
toolchain di ${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
Menjalankan 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/