CMake でのクロス コンパイル LiteRT

このページでは、さまざまな ARM 用の LiteRT ライブラリをビルドする方法について説明します。 できます。

次の手順は、Ubuntu 16.04.3 64 ビット PC(AMD64)でテストされています 、TensorFlow 開発用の Docker イメージ tensorflow/tensorflow:devel.

前提条件

CMake をインストールして、TensorFlow のソースコードをダウンロードしておく必要があります。以下をご確認ください。 CMake で LiteRT をビルドする ページをご覧ください。

移行先の環境を確認する

次の例は、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 ビットの場合、VFP に応じて 2 つの ABI が利用可能 確認しましょう。armhfarmel。この書類は ARMHF と armel ターゲットに異なるツールチェーンを使用する必要があります。

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

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}/ツールチェーンディレクトリにあります

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/

ARMv7 NEON 対応ビルド

この手順では、VFPv4 と NEON を有効にしたバイナリを使用して ARMv7 をビルドする方法を示します。 Raspberry Pi 3 および 4 に対応しています。

ツールチェーンをダウンロードする

これらのコマンドにより、gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf がインストールされます ツールチェーンを参照してください。

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/

Raspberry Pi Zero(ARMv6)用のビルド

この手順では、以下と互換性のある ARMv6 バイナリをビルドする方法を示します。 Raspberry Pi Zero。

ツールチェーンをダウンロードする

これらのコマンドにより、gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf がインストールされます ツールチェーンを参照してください。

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/