קומפילציה צולבת TensorFlow Lite עם CMake

עמוד זה מתאר כיצד לבנות את ספריית TensorFlow Lite עבור התקני ARM שונים.

ההוראות הבאות נבדקו על אובונטו 16.04.3 64-bit PC (AMD64) , TensorFlow devel docker image tensorflow/tensorflow:devel .

דרישות מוקדמות

אתה צריך את קוד המקור של TensorFlow מותקן והורדת CMake. אנא עיין בדף Build TensorFlow Lite עם CMake לפרטים.

בדוק את סביבת היעד שלך

הדוגמאות הבאות נבדקות תחת Raspberry Pi OS, Ubuntu Server 20.04 LTS ומנדל 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-bit, ישנם שני ABI זמינים בהתאם לזמינות ה-VFP. armhf ו ארמל . מסמך זה מציג דוגמה של armhf, עליך להשתמש בשרשרת כלים שונה עבור מטרות ארמל.

בדיקת יכולת מעבד

עבור 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 20.04.01 LTS 64-bit מותקן).

הורד את שרשרת הכלים

פקודות אלו מתקינות את 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/

Build עבור ARMv7 NEON מופעל

הוראה זו מראה כיצד לבנות ARMv7 עם VFPv4 ו-NEON בינארי התואם ל-Raspberry Pi 3 ו-4.

הורד את שרשרת הכלים

פקודות אלה מתקינות את 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.

הורד את שרשרת הכלים

פקודות אלה מתקינות את 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/