Ajuda a proteger a Grande Barreira de Corais com TensorFlow em Kaggle Junte Desafio

TensorFlow Lite de compilação cruzada com CMake

Esta página descreve como construir a biblioteca TensorFlow Lite para vários dispositivos ARM.

As seguintes instruções foram testados no Ubuntu 16.04.3 PC de 64 bits (AMD64), imagem devel janela de encaixe TensorFlow tensorflow / tensorflow: devel .

Pré-requisitos

Você precisa do CMake instalado e baixado do código-fonte do TensorFlow. Por favor, verifique Desenvolver TensorFlow Lite com CMake página para os detalhes.

Verifique seu ambiente de destino

Os exemplos a seguir são testados no Raspberry Pi OS, Ubuntu Server 20.04 LTS e Mendel Linux 4.0. Dependendo da versão glibc de destino e dos recursos da CPU, pode ser necessário usar uma versão diferente do conjunto de ferramentas e parâmetros de compilação.

Verificando a versão 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.

Verificando a compatibilidade ABI

Se seu destino for ARM de 32 bits, há dois ABI disponíveis, dependendo da disponibilidade de VFP. armhf e armel . Este documento mostra um exemplo armhf, você precisa usar diferentes conjuntos de ferramentas para alvos armel.

Verificando a capacidade da CPU

Para ARMv7, você deve saber a versão de VFP com suporte do target e a disponibilidade 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

Construído para AArch64 (ARM64)

Esta instrução mostra como construir AArch64 binário que é compatível com o Coral Mendel Linux 4.0 , Raspberry Pi (com Ubuntu Servidor 20.04.01 LTS 64-bit instalado).

Baixar conjunto de ferramentas

Esses comandos instalam o conjunto de ferramentas gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu em $ {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

Executar 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/

Construído para ARMv7 NEON habilitado

Esta instrução mostra como construir ARMv7 com VFPv4 e binário habilitado para NEON que é compatível com Raspberry Pi 3 e 4.

Baixar conjunto de ferramentas

Esses comandos instalam o conjunto de ferramentas gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf em $ {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

Executar 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/

Construído para Raspberry Pi Zero (ARMv6)

Esta instrução mostra como construir o binário ARMv6 que é compatível com Raspberry Pi Zero.

Baixar conjunto de ferramentas

Esses comandos instalam o conjunto de ferramentas arm-rpi-linux-gnueabihf em $ {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

Executar 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/