การรวบรวมข้าม TensorFlow Lite ด้วย CMake

หน้านี้อธิบายวิธีสร้างไลบรารี TensorFlow Lite สำหรับอุปกรณ์ ARM ต่างๆ

คำแนะนำต่อไปนี้ได้รับการทดสอบบน Ubuntu 16.04.3 พีซี 64 บิต (AMD64) , TensorFlow devel docker image tensorflow/tensorflow:devel

ข้อกำหนดเบื้องต้น

คุณต้องติดตั้งและดาวน์โหลดซอร์สโค้ด TensorFlow ของ CMake โปรดตรวจสอบรายละเอียดในหน้า Build TensorFlow Lite ด้วย CMake

ตรวจสอบสภาพแวดล้อมเป้าหมายของคุณ

ตัวอย่างต่อไปนี้ได้รับการทดสอบภายใต้ Raspberry Pi OS, Ubuntu Server 20.04 LTS และ Mendel Linux 4.0 ขึ้นอยู่กับเวอร์ชัน glibc เป้าหมายและความสามารถของ CPU คุณอาจจำเป็นต้องใช้เวอร์ชันของ toolchain และพารามิเตอร์บิลด์ที่แตกต่างกัน

กำลังตรวจสอบเวอร์ชัน 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 อาร์มห์ฟ และ อาร์เมล . เอกสารนี้แสดงตัวอย่าง armhf คุณต้องใช้ toolchain ที่แตกต่างกันสำหรับเป้าหมาย 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 บิต )

ดาวน์โหลด toolchain

คำสั่งเหล่านี้จะติดตั้ง gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu toolchain ภายใต้ ${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

เรียกใช้ 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

คำแนะนำนี้แสดงวิธีการสร้าง ARMv7 ด้วยไบนารีที่เปิดใช้งาน VFPv4 และ NEON ซึ่งเข้ากันได้กับ Raspberry Pi 3 และ 4

ดาวน์โหลด toolchain

คำสั่งเหล่านี้จะติดตั้ง gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf toolchain ภายใต้ ${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

เรียกใช้ 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)

คำแนะนำนี้แสดงวิธีการสร้างไบนารี ARMv6 ซึ่งเข้ากันได้กับ Raspberry Pi Zero

ดาวน์โหลด toolchain

คำสั่งเหล่านี้จะติดตั้ง gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf toolchain ภายใต้ ${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

เรียกใช้ 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/