Cross-Compilation TensorFlow Lite mit CMake

Auf dieser Seite wird beschrieben, wie Sie die TensorFlow Lite-Bibliothek für verschiedene ARM-Geräte erstellen.

Die folgenden Anweisungen sind auf Ubuntu 16.04.3 64-Bit - PC (AMD64), TensorFlow Entwick Docker Bild getestet devel: tensorflow / tensorflow .

Voraussetzungen

Sie müssen CMake installiert und den TensorFlow-Quellcode heruntergeladen haben. Bitte überprüfen Sie Build - TensorFlow Lite mit CMake Seite für die Details.

Überprüfen Sie Ihre Zielumgebung

Die folgenden Beispiele werden unter Raspberry Pi OS, Ubuntu Server 20.04 LTS und Mendel Linux 4.0 getestet. Abhängig von Ihrer Ziel-Glibc-Version und den CPU-Fähigkeiten müssen Sie möglicherweise unterschiedliche Versionen der Toolchain und Build-Parameter verwenden.

Glibc-Version prüfen

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.

Überprüfung der ABI-Kompatibilität

Wenn Ihr Ziel ARM 32-Bit ist, stehen je nach VFP-Verfügbarkeit zwei ABIs zur Verfügung. armhf und Armel . Dieses Dokument zeigt ein armhf-Beispiel, Sie müssen eine andere Toolchain für armel-Ziele verwenden.

CPU-Fähigkeit prüfen

Für ARMv7 sollten Sie die unterstützte VFP-Version des Ziels und die NEON-Verfügbarkeit kennen.

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

Build für AArch64 (ARM64)

Diese Anweisung zeigt , wie AArch64 binär zu bauen , die mit kompatibel ist Coral Mendel Linux 4.0 , Raspberry Pi (mit Ubuntu Server 20.04.01 LTS 64-Bit installiert ist ).

Toolchain herunterladen

Diese Befehle installieren gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu toolchain unter ${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

CMake ausführen

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/

Build für ARMv7 NEON aktiviert

Diese Anleitung zeigt, wie man ARMv7 mit VFPv4 und NEON aktivierter Binärdatei erstellt, die mit Raspberry Pi 3 und 4 kompatibel ist.

Toolchain herunterladen

Diese Befehle installieren die gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf toolchain unter ${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

CMake ausführen

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/

Build für Raspberry Pi Zero (ARMv6)

Diese Anleitung zeigt, wie man eine ARMv6-Binärdatei erstellt, die mit Raspberry Pi Zero kompatibel ist.

Toolchain herunterladen

Diese Befehle installieren arm-rpi-linux-gnueabihf toolchain unter ${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

CMake ausführen

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/