使用 CMake 跨越 TensorFlow Lite

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

下列操作說明已在 Ubuntu 16.04.3 64 位元 PC (AMD64)、TensorFlow devel docker 映像檔 tensorflow/tensorflow:devel 上經過測試。

必要條件

您需要安裝及下載 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) 所建構

本操作說明會說明如何建構 AArch64 二進位檔,該二進位檔與 Coral Mendel Linux 4.0、Raspberry Pi (已安裝 Ubuntu Server 20.04.01 LTS 64 位元) 相容。

下載工具鍊

這些指令會在 ${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 的建構作業

本操作說明說明如何使用支援 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)

本操作說明說明如何建構與 Raaspberry 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/