CMake ile çapraz derleme TensorFlow Lite

Bu sayfada, çeşitli ARM cihazları için TensorFlow Lite kitaplığının nasıl oluşturulacağı açıklanmaktadır.

Aşağıdaki talimatlar Ubuntu 16.04.3 64 bit PC (AMD64), TensorFlow devel docker görüntüsü tensorflow/tensorflow:devel'de test edilmiştir.

Ön koşullar

CMake'in yüklenmesi ve TensorFlow kaynak kodunun indirilmesi gerekir. Ayrıntılar için lütfen TensorFlow Lite with CMake sayfasını inceleyin.

Hedef ortamınızı kontrol edin

Aşağıdaki örnekler Raspberry Pi OS, Ubuntu Server 20.04 LTS ve Mendel Linux 4.0 altında test edilmiştir. Hedef glibc sürümünüze ve CPU özelliklerinize bağlı olarak, araç zincirinin ve derleme parametrelerinin farklı sürümlerini kullanmanız gerekebilir.

glibc sürümü kontrol ediliyor

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 uyumluluğunu kontrol etme

Hedefiniz ARM 32 bit ise VFP kullanılabilirliğine bağlı olarak iki ABI kullanılabilir. armhf ve armel. Bu belgede bir armhf örneği gösterilmektedir. Armel hedefleri için farklı bir araç zinciri kullanmanız gerekir.

CPU özelliği kontrol ediliyor

ARMv7 için hedefin desteklenen VFP sürümünü ve NEON kullanılabilirliğini bilmeniz gerekir.

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

AArch64 (ARM64) için derleme

Bu talimat, Coral Mendel Linux 4.0, Raspberry Pi (Ubuntu Server 20.04.01 LTS 64 bit yüklü olarak) ile uyumlu AArch64 ikili programının nasıl oluşturulacağını gösterir.

Araç zincirini indirin

Bu komutlar, gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu araç zincirini ${HOME}/araç zincirleri altına yükler.

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 Çalıştırma

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/

ARMv7 NEON için derleme etkin

Bu talimat, Raspberry Pi 3 ve 4 ile uyumlu olan, VFPv4 ve NEON etkin bir ikili program ile ARMv7'nin nasıl oluşturulacağını gösterir.

Araç zincirini indirin

Bu komutlar, gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf araç zincirini ${HOME}/araç zincirleri altına yükler.

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 Çalıştırma

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/

Raspberry Pi Zero için Derleme (ARMv6)

Bu talimat, Raspberry Pi Zero ile uyumlu ARMv6 ikili programının nasıl oluşturulacağını göstermektedir.

Araç zincirini indirin

Bu komutlar, gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf araç zincirini ${HOME}/araç zincirleri altına yükler.

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 Çalıştırma

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/