En esta página, se describe cómo compilar la biblioteca de TensorFlow Lite para varios dispositivos ARM.
Las siguientes instrucciones se probaron en una PC de 64 bits (AMD64) con Ubuntu 16.04.3 y la imagen de Docker de devel de TensorFlow tensorflow/tensorflow:devel.
Requisitos previos
Necesitas que CMake esté instalado y descargado el código fuente de TensorFlow. Consulta la página Build TensorFlow Lite with CMake para obtener más información.
Verifica tu entorno de destino
Los siguientes ejemplos se probaron con el SO Raspberry Pi, Ubuntu Server 20.04 LTS y Mendel Linux 4.0. Según tu versión de glibc de destino y las capacidades de la CPU, es posible que debas usar una versión diferente de la cadena de herramientas y los parámetros de compilación.
Cómo comprobar 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.
Cómo comprobar la compatibilidad con ABI
Si tu objetivo es ARM de 32 bits, hay dos ABI disponibles según la disponibilidad de VFP: armhf y armel. En este documento, se muestra un ejemplo de armhf. Debes usar diferentes cadenas de herramientas para los objetivos armel.
Verifica la capacidad de la CPU
Para ARMv7, debes conocer la versión de VFP compatible con el destino 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
Compilación para AArch64 (ARM64)
En esta instrucción, se muestra cómo compilar el objeto binario AArch64, que es compatible con Coral Mendel Linux 4.0, Raspberry Pi (con Ubuntu Server 20.04.01 LTS 64 bits instalado).
Descargar cadena de herramientas
Estos comandos instalan la cadena de herramientas de 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
Cómo ejecutar 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 habilitada
En esta instrucción, se muestra cómo compilar ARMv7 con VFPv4 y objeto binario habilitado para NEON, que es compatible con Raspberry Pi 3 y 4.
Descargar cadena de herramientas
Con estos comandos, se instala 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
Cómo ejecutar 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/
Compila para Raspberry Pi Zero (ARMv6)
En esta instrucción, se muestra cómo compilar el objeto binario de ARMv6, que es compatible con Raspberry Pi Zero.
Descargar cadena de herramientas
Con estos comandos, se instala 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
Cómo ejecutar 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/