CMake로 TensorFlow Lite 크로스 컴파일

이 페이지에서는 다양한 ARM 기기용 TensorFlow Lite 라이브러리를 빌드하는 방법을 설명합니다.

다음 안내는 Ubuntu 16.04.3 64비트 PC (AMD64), TensorFlow 개발자 Docker 이미지 tensorflow/tensorflow:devel에서 테스트되었습니다.

기본 요건

CMake를 설치하고 TensorFlow 소스 코드를 다운로드해야 합니다. 자세한 내용은 CMake로 TensorFlow Lite 빌드 페이지를 참고하세요.

대상 환경 확인

다음 예는 Raspberry Pi OS, Ubuntu Server 20.04 LTS, Mendel Linux 4.0에서 테스트되었습니다. 대상 glibc 버전과 CPU 기능에 따라 다른 버전의 도구 모음 및 빌드 매개변수를 사용해야 할 수 있습니다.

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.

ABI 호환성 확인

타겟이 ARM 32비트인 경우 VFP 어베일성에 따라 두 가지 ABI(armhfarmel)를 사용할 수 있습니다. 이 문서는 armhf 예를 보여줍니다. armel 타겟에는 다른 도구 모음을 사용해야 합니다.

CPU 기능 확인

ARMv7의 경우 대상에서 지원되는 VFP 버전과 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

AArch64 (ARM64)용 빌드

이 안내에서는 Coral Mendel Linux 4.0, Raspberry Pi (Ubuntu Server 20.04.01 LTS 64비트가 설치된)와 호환되는 AArch64 바이너리를 빌드하는 방법을 보여줍니다.

도구 모음 다운로드

이 명령어는 ${HOME}/toolchains에 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu 도구 모음을 설치합니다.

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 실행

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용 빌드 사용 설정됨

이 명령은 Raspberry Pi 3 및 4와 호환되는 VFPv4 및 NEON 지원 바이너리로 ARMv7을 빌드하는 방법을 보여줍니다.

도구 모음 다운로드

이 명령어는 ${HOME}/toolchains에 gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf 도구 모음을 설치합니다.

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 실행

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 (ARMv6)용 빌드

이 명령은 Raspberry Pi Zero와 호환되는 ARMv6 바이너리를 빌드하는 방법을 보여줍니다.

도구 모음 다운로드

이 명령어는 ${HOME}/toolchains에 gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf 도구 모음을 설치합니다.

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 실행

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/