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/