التحويل البرمجي المتبادل مع LiteRT باستخدام CMake

تصف هذه الصفحة كيفية إنشاء مكتبة LiteRT لمختلف ARM الأجهزة.

تم اختبار التعليمات التالية على جهاز كمبيوتر يعمل بنظام التشغيل Ubuntu 16.04.3 64 بت (AMD64) ، صورة تطوير TensorFlow tensorflow/tensorflow:devel.

المتطلبات الأساسية

يجب تثبيت رمز المصدر TensorFlow وتنزيله من خلال CMake. يُرجى التحقق إنشاء LiteRT باستخدام 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 بت، سيتوفَّر إصدارا ABI اعتمادًا على VFP . 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 مندل Linux 4.0، وRaspberry Pi (مع Ubuntu Server 20.04.01 LTS 64 بت ).

تنزيل سلسلة الأدوات

تعمل هذه الأوامر على تثبيت سلسلة أدوات gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu. أقل من ${home}/سلاسل الأدوات.

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 for 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 متوافق مع أغنية Raspberry Pi Zero

تنزيل سلسلة الأدوات

تعمل هذه الأوامر على تثبيت 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/