בדף הזה נסביר איך לבנות את ספריית 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/