Ayuda a proteger la Gran Barrera de Coral con TensorFlow en Kaggle Únete Challenge

Compilación cruzada de TensorFlow Lite con CMake

En esta página, se describe cómo compilar la biblioteca TensorFlow Lite para varios dispositivos ARM.

Las siguientes instrucciones se han probado en Ubuntu 16.04.3 64-bit PC (AMD64), imagen devel ventana acoplable TensorFlow tensorflow / tensorflow: devel .

Prerrequisitos

Necesita CMake instalado y descargado el código fuente de TensorFlow. Por favor cheque Construir TensorFlow Lite con CMake página para los detalles.

Compruebe su entorno de destino

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 las capacidades de la CPU, es posible que deba usar 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.

Comprobación de 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, necesita usar una cadena de herramientas diferente para los objetivos de armel.

Comprobación de la capacidad de la CPU

Para ARMv7, debe conocer la versión de VFP admitida por el 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

Compilación para AArch64 (ARM64)

Este tipo de instrucción muestra cómo crear AArch64 binaria que es compatible con Coral Mendel Linux 4.0 , Frambuesa Pi (con Ubuntu Server LTS 20/04/01 64 bits instalado).

Descarga toolchain

Estos comandos instalan gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu toolchain 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

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 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.

Descarga toolchain

Estos comandos instalan gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf toolchain 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

Ejecutar CMake

ARMCC_FLAGS="-march=armv7-a -mfpu=neon-vfpv4 -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=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.

Descarga toolchain

Estos comandos instalan arm-rpi-linux-gnueabihf toolchain en $ {HOME} / toolchains.

curl -L https://github.com/rvagg/rpi-newer-crosstools/archive/eb68350c5c8ec1663b7fe52c742ac4271e3217c5.tar.gz -o rpi-toolchain.tar.gz
tar xzf rpi-toolchain.tar.gz -C ${HOME}/toolchains
mv ${HOME}/toolchains/rpi-newer-crosstools-eb68350c5c8ec1663b7fe52c742ac4271e3217c5 ${HOME}/toolchains/arm-rpi-linux-gnueabihf

Ejecutar CMake

ARMCC_PREFIX=${HOME}/toolchains/arm-rpi-linux-gnueabihf/x64-gcc-6.5.0/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-
ARMCC_FLAGS="-march=armv6 -mfpu=vfp -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=armv6 \
  -DTFLITE_ENABLE_XNNPACK=OFF \
  ../tensorflow/lite/