使用 CMake 進行 TensorFlow Lite 交叉編譯

本頁說明如何為各種 ARM 裝置建構 TensorFlow Lite 程式庫。

下列指示已在 Ubuntu 16.04.3 64 位元 PC (AMD64)、TensorFlow devel 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 位元,則有兩種 ABI 可用,具體取決於 VFP 可用性。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/

為啟用 NEON 的 ARMv7 建構

本指示說明如何建構啟用 VFPv4 和 NEON 的 ARMv7 二進位檔,其與 Raspberry Pi 3 和 4 相容。

下載工具鏈

這些命令會在 ${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/