Na tej stronie opisano, jak zbudować bibliotekę TensorFlow Lite dla różnych urządzeń ARM.
Poniższe instrukcje zostały przetestowane na 64-bitowym komputerze Ubuntu 16.04.3 (AMD64), obraz dokujący TensorFlow devel tensorflow/tensorflow:devel .
Warunki wstępne
Potrzebujesz zainstalowanego i pobranego kodu źródłowego TensorFlow CMake. Aby uzyskać szczegółowe informacje, sprawdź stronę Build TensorFlow Lite z CMake .
Sprawdź swoje środowisko docelowe
Poniższe przykłady zostały przetestowane w systemie operacyjnym Raspberry Pi, Ubuntu Server 20.04 LTS i Mendel Linux 4.0. W zależności od docelowej wersji glibc i możliwości procesora, może być konieczne użycie innej wersji zestawu narzędzi i parametrów kompilacji.
Sprawdzam wersję 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.
Sprawdzanie zgodności ABI
Jeśli Twoim celem jest 32-bitowy procesor ARM, dostępne są dwa interfejsy ABI w zależności od dostępności VFP. armhf i armel . Ten dokument pokazuje przykład armhf, musisz użyć innego zestawu narzędzi dla celów armel.
Sprawdzanie wydajności procesora
W przypadku ARMv7 powinieneś znać obsługiwaną wersję VFP celu i dostępność 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
Kompilacja dla AArch64 (ARM64)
Niniejsza instrukcja pokazuje, jak zbudować plik binarny AArch64, który jest kompatybilny z Coral Mendel Linux 4.0 , Raspberry Pi (z zainstalowanym Ubuntu Server 20.04.01 LTS 64-bit ).
Pobierz zestaw narzędzi
Te polecenia instalują zestaw narzędzi gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu
w katalogu ${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
Uruchom CMake'a
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/
Kompilacja dla ARMv7 NEON z włączoną obsługą
Ta instrukcja pokazuje, jak zbudować ARMv7 z plikiem binarnym obsługującym VFPv4 i NEON, który jest kompatybilny z Raspberry Pi 3 i 4.
Pobierz zestaw narzędzi
Te polecenia instalują zestaw narzędzi gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
w katalogu ${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
Uruchom CMake'a
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/
Kompilacja dla Raspberry Pi Zero (ARMv6)
Niniejsza instrukcja pokazuje jak zbudować plik binarny ARMv6 kompatybilny z Raspberry Pi Zero.
Pobierz zestaw narzędzi
Te polecenia instalują zestaw narzędzi gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
w katalogu ${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
Uruchom CMake'a
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/