אוספי סרטונים ב-TensorFlow Lite עם CMake

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