בדף הזה נסביר איך ליצור את ספריית TensorFlow Lite למכשירי ARM שונים.
ההוראות הבאות נבדקו ב-Ubuntu 16.04.3 64-bit PC (AMD64) , TensorFlow devel reporter image tensorflow/tensorflow:devel.
דרישות מוקדמות
צריך להתקין את קוד המקור של TensorFlow ולהוריד אותו באמצעות CMake. לפרטים נוספים, ראו את הדף Build TensorFlow Lite באמצעות CMake.
בדיקה של סביבת היעד
הדוגמאות הבאות נבדקות במערכות ההפעלה Raspberry Pi OS, 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-bit, יש שני ממשקי ABI שתלויים בזמינות של VFP: armhf ו-armel. במסמך הזה מתוארת דוגמה של Armhf. לכן, עליכם להשתמש בשרשרת כלים שונה עבור מטרות זרועות.
מתבצעת בדיקה של היכולת של המעבד (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 for AArch64 (ARM64)
ההוראה הזו מלמדת איך לפתח בינארי AArch64 שתואם ל-Coral Mendel Linux 4.0, Raspberry Pi (עם Ubuntu Server 20.04.01 LTS 64-bit שמותקן).
הורדת Toolchain
הפקודות האלה מתקינות את gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu
Toolschain
בקטע ${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.
הורדת Toolchain
הפקודות האלה מתקינות את toolchain 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 שתואם ל-Raspberry Pi Zero.
הורדת Toolchain
הפקודות האלה מתקינות את toolchain 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/