การคอมไพล์แบบข้าม TensorFlow Lite กับ CMake

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

คำแนะนำต่อไปนี้ได้รับการทดสอบใน Ubuntu 16.04.3 PC แบบ 64 บิต (AMD64) , รูปภาพ Docker ของ TensorFlow Devel tensorflow/tensorflow:devel.

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

คุณต้องติดตั้งและดาวน์โหลดซอร์สโค้ด TensorFlow ของ CMake โปรดไปที่ สร้าง TensorFlow Lite ด้วย CMake เพื่อดูรายละเอียด

ตรวจสอบสภาพแวดล้อมเป้าหมาย

ตัวอย่างต่อไปนี้ได้รับการทดสอบภายใต้ระบบปฏิบัติการ Raspberry Pi, 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 2 รายการที่พร้อมใช้งานโดยขึ้นอยู่กับ VFP ความพร้อม armhf และ armel เอกสารนี้แสดง 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 บิต ติดตั้งไว้)

ดาวน์โหลด Toolchain

คำสั่งเหล่านี้จะติดตั้ง Toolchain ของ gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu ภายใต้ ${HOME}/toolchain

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/