このページでは、さまざまな ARM デバイス向けの TensorFlow Lite ライブラリをビルドする方法について説明します。
以下の手順は、Ubuntu 16.04.3 64 ビット PC(AMD64)、TensorFlow 開発 Docker イメージ tensorflow/tensorflow:devel でテストされています。
前提条件
CMake をインストールし、TensorFlow のソースコードをダウンロードする必要があります。詳しくは、CMake で TensorFlow Lite をビルドするのページをご覧ください。
移行先の環境を確認する
次の例は、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(armhf と armel)を利用できます。このドキュメントでは、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)用のビルド
この手順では、Coral Mendel Linux 4.0、Raspberry Pi(Ubuntu Server 20.04.01 LTS 64 ビットがインストール済み)と互換性のある AArch64 バイナリをビルドする方法を示します。
ツールチェーンをダウンロードする
これらのコマンドにより、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 用のビルドを有効にする
この命令は、Raspberry Pi 3 および 4 と互換性のある VFPv4 と NEON 対応バイナリを使用して ARMv7 をビルドする方法を示しています。
ツールチェーンをダウンロードする
これらのコマンドにより、gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
ツールチェーンが ${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-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)向けにビルドする
この命令は、Raspberry Pi Zero と互換性のある ARMv6 バイナリをビルドする方法を示しています。
ツールチェーンをダウンロードする
これらのコマンドにより、gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
ツールチェーンが ${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-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/