ARM ボード用の TesorFlow Lite を構築する

このページでは、ARM を基盤としたコンピュータ向けに TensorFlow Lite ライブラリを構築する方法を説明します。

TensorFlow Lite では 2 つのビルドシステムがサポートされていますが、それぞれのビルドシステムがサポートする機能は同一ではありません。次の表を参考に、適切なビルドシステムを選んでください。

機能 Bazel CMake
事前定義済みツールチェーン armhf、aarch64 armel、armhf、aarch64
カスタムツールチェーン 比較的使いにくい 使いやすい
セレクト TF 演算 サポート対象 サポート対象外
GPU デリゲート Android のみ OpenCL をサポートするすべてのプラットフォーム
XNNPack サポート対象 サポート対象
Python Wheel サポート対象 サポート対象
C API サポート対象 サポート対象
C++ API Bazel プロジェクトでサポート CMake プロジェクトでサポート

CMake を使用した ARM のクロスコンパイル

CMake プロジェクトがある場合、またはカスタムツールチェーンを使用する場合は、CMake を使ってクロスコンパイルをじっこうすることが推奨されます。これを行うための「CMake を使用した TensorFlow Lite クロスコンパイル」というページが別途用意されています。

Bazel を使用した ARM のクロスコンパイル

Bazel プロジェクトがある場合、または TF 演算を使用する場合は、Bazel ビルドシステムの使用が推奨されます。ARM32/64 共有ライブラリを構築するには、統合されている ARM GCC 8.3 ツールチェーンを Bazel を使用します。

ターゲットアーキテクチャ Bazel 構成 対応デバイス
armhf(ARM32) --config=elinux_armhf RPI3、32ビットの RPI4
: : : Raspberry Pi OS :
AArch64(ARM64) --config=elinux_aarch64 Coral、Ubuntu 64ビット の RPI4
: : : bit :

注: 生成された共有ライブラリを実行するには、glibc 2.28 以降が必要です。

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

TensorFlow Lite を Bazel とクロスコンパイルするには、次の手順に従います。

手順 1. Bazel をインストールする

Bazel は TensorFlow の主なビルドシステムです。Bazel ビルドシステムの最新バージョンをインストールします。

注意: TensorFlow Docker イメージを使用している場合、Bazel はすでに利用可能です。

手順 2. TensorFlow レポジトリをクローンする

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

注意: TensorFlow Docker イメージを使用している場合、リポジトリは /tensorflow_src/ にあります。

手順 3. ARM バイナリを構築する

C ライブラリ
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite/c:libtensorflowlite_c.so

共有ライブラリは、bazel-bin/tensorflow/lite/c/libtensorflowlite_c.so にあります。

注意: elinux_armhf32bit ARM ハードフロートビルドに使用します。

詳細については、TensorFlow Lite C API ページをご覧ください。

C++ ライブラリ
bazel build --config=elinux_aarch64 -c opt //tensorflow/lite:libtensorflowlite.so

共有ライブラリは、bazel-bin/tensorflow/lite/libtensorflowlite.so にあります。

現在、必要なすべてのヘッダーファイルを抽出する簡単な方法はないため、TensorFlow リポジトリから tensorflow/lite/ にすべてのヘッダーファイルを含める必要があります。さらに、FlatBuffers および Abseil からのヘッダーファイルが必要になります。

その他

ツールチェーンを使用してほかの Bazel ターゲットを構築することもできます。 以下は有用なターゲットです。

  • //tensorflow/lite/tools/benchmark:benchmark_model
  • //tensorflow/lite/examples/label_image:label_image