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