Esta página describe cómo crear la biblioteca TensorFlow Lite para varios dispositivos ARM.
Las siguientes instrucciones se han probado en una PC Ubuntu 16.04.3 de 64 bits (AMD64), imagen de la ventana acoplable de desarrollo TensorFlow tensorflow/tensorflow:devel .
Requisitos previos
Necesita CMake instalado y descargado el código fuente de TensorFlow. Consulte la página Build TensorFlow Lite con CMake para obtener más detalles.
Verifique su entorno objetivo
Los siguientes ejemplos se prueban en el sistema operativo Raspberry Pi, Ubuntu Server 20.04 LTS y Mendel Linux 4.0. Dependiendo de la versión de glibc de destino y de las capacidades de la CPU, es posible que necesite utilizar una versión diferente de la cadena de herramientas y los parámetros de compilación.
Comprobando la versión de 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.
Comprobando la compatibilidad ABI
Si su objetivo es ARM de 32 bits, hay dos ABI disponibles según la disponibilidad de VFP. armhf y armel . Este documento muestra un ejemplo de armhf; es necesario utilizar una cadena de herramientas diferente para los objetivos de armel.
Comprobando la capacidad de la CPU
Para ARMv7, debe conocer la versión VFP compatible del objetivo y la disponibilidad de 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
Construir para AArch64 (ARM64)
Esta instrucción muestra cómo compilar el binario AArch64 que es compatible con Coral Mendel Linux 4.0 , Raspberry Pi (con Ubuntu Server 20.04.01 LTS de 64 bits instalado).
Descargar cadena de herramientas
Estos comandos instalan la cadena de herramientas gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu
en ${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
Ejecute 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/
Compilación para ARMv7 NEON habilitado
Esta instrucción muestra cómo construir ARMv7 con VFPv4 y binario habilitado para NEON que es compatible con Raspberry Pi 3 y 4.
Descargar cadena de herramientas
Estos comandos instalan la cadena de herramientas gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
en ${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
Ejecute 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/
Compilación para Raspberry Pi Zero (ARMv6)
Esta instrucción muestra cómo construir un binario ARMv6 que sea compatible con Raspberry Pi Zero.
Descargar cadena de herramientas
Estos comandos instalan la cadena de herramientas gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
en ${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
Ejecute 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/