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

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

วิธีการต่อไปนี้ได้รับการทดสอบใน Ubuntu 16.04.3 บน PC แบบ 64 บิต (AMD64) อิมเมจ Docker ของ TensorFlow Devel tensorflow/tensorflow:devel

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

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

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

ตัวอย่างต่อไปนี้จะได้รับการทดสอบใน Raspberry Pi OS, Ubuntu Server 20.04 LTS และ Mendel Linux 4.0 คุณอาจต้องใช้ Toolchain และพารามิเตอร์ของบิลด์เวอร์ชันที่แตกต่างกัน ทั้งนี้ขึ้นอยู่กับเวอร์ชัน 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 2 แบบที่ขึ้นอยู่กับความว่างของ VFP ซึ่งได้แก่ armhf และ armel เอกสารนี้แสดงตัวอย่าง armhf คุณต้องใช้ Toolchain อื่นสำหรับเป้าหมาย Armel

ตรวจสอบความสามารถของ CPU

คุณควรทราบเวอร์ชัน VFP ที่สนับสนุนและความพร้อมใช้งานของ NEON สำหรับ ARMv7

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 20.04.01 LTS 64 บิต)

ดาวน์โหลด Toolchain

คำสั่งเหล่านี้จะติดตั้ง Toolchain gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu ภายใต้ ${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 ที่ใช้งานร่วมกับ Raaspberry 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/