Kreuzkompilierung von TensorFlow Lite mit CMake

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

Die folgende Anleitung wurde auf dem 64-Bit-PC Ubuntu 16.04.3 (AMD64) und dem TensorFlow-Devel-Docker-Image tensorflow/tensorflow:devel getestet.

Voraussetzungen

CMake muss den TensorFlow-Quellcode installiert und heruntergeladen haben. Weitere Informationen finden Sie auf der Seite Build TensorFlow Lite with CMake.

Zielumgebung prüfen

Die folgenden Beispiele werden unter Raspberry Pi OS, Ubuntu Server 20.04 LTS und Mendel Linux 4.0 getestet. Abhängig von der glibc-Zielversion und den CPU-Funktionen müssen Sie möglicherweise eine andere Version der Toolchain und die Build-Parameter verwenden.

glibc-Version wird geprüft

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.

ABI-Kompatibilität prüfen

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

CPU-Kapazität prüfen

Für ARMv7 sollten Sie die unterstützte VFP-Version und NEON-Verfügbarkeit des Ziels 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

Für AArch64 (ARM64) entwickeln

Diese Anleitung zeigt, wie Sie eine AArch64-Binärdatei erstellen, die mit Coral Mendel Linux 4.0 und Raspberry Pi (mit installiertem Ubuntu Server 20.04.01 LTS 64-Bit) kompatibel ist.

Toolchain herunterladen

Mit diesen Befehlen wird die Toolchain gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu unter ${HOME}/toolchains installiert.

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 Sie ARMv7 mit VFPv4- und NEON-aktiviertem Binärprogramm erstellen, das mit Raspberry Pi 3 und 4 kompatibel ist.

Toolchain herunterladen

Mit diesen Befehlen wird die Toolchain gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf unter ${HOME}/Toolchains installiert.

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

Für Raspberry Pi Zero (ARMv6) entwickeln

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

Toolchain herunterladen

Mit diesen Befehlen wird die Toolchain gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf unter ${HOME}/Toolchains installiert.

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