אוסף צולב של LiteRT עם CMake

בדף הזה נסביר איך לבנות את ספריית LiteRT בשביל מעבדי ARM שונים מכשירים.

ההוראות הבאות נבדקו ב-Ubuntu 16.04.3 64-bit PC (AMD64) , תמונת Docer של TensorFlow tensorflow/tensorflow:devel.

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

יש צורך בהתקנה ובהורדה של קוד המקור של TensorFlow. כדאי לבדוק יצירת LiteRT באמצעות CMake לקבלת פרטים.

בדיקה של סביבת היעד

הדוגמאות הבאות נבדקו במסגרת מערכת ההפעלה 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-bit, יש שני ממשק ABI זמין, בהתאם ל-VFP זמינות. armhf, ארמל. במסמך הזה מוצג סמל של צבא למשל, צריך להשתמש ב-toolchain שונה בשביל יעדי נשק.

לבדוק את היכולות של המעבד (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

Build ל-AArch64 (ARM64)

בהוראה הזו מוסבר איך ליצור קובץ בינארי של AArch64 שתואם ל- Coral Mendel Linux 4.0, Raspberry Pi (עם Ubuntu Server 20.04.01 LTS בגרסת 64 ביט מותקנת).

הורדת 'צרור כלים'

הפקודות האלה מתקנות את 'צרור הכלים' של 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/

Build ל-ARMv7 NEON מופעל

בהוראה הזו מוסבר איך לפתח את ARMv7 עם VFPv4 ו-NEON שתואם ל-Raspberry Pi 3 ו-4.

הורדת 'צרור כלים'

הפקודות האלה מתקינים את gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf כלי עבודה מתחת ל-${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/

Build for Raspberry Pi Zero (ARMv6)

ההוראה הזו ממחישה איך לפתח גרסה בינארית של ARMv6 שתואמת ל פאי פטל.

הורדת 'צרור כלים'

הפקודות האלה מתקינים את gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf כלי עבודה מתחת ל-${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/