このページでは、ARM ベースのコンピュータ用の TensorFlow Lite ライブラリをビルドする方法について説明します。
TensorFlow Lite は 2 つのビルドシステムをサポートしていますが、各ビルドシステムでサポートされている機能は同じではありません。次の表を確認して、適切なビルドシステムを選択してください。
特徴 | Bazel | CMake |
---|---|---|
事前定義されたツールチェーン | armhf、aarch64 | armel、armhf、aarch64 |
カスタム ツールチェーン | 使いづらい | 使いやすい |
TF オペレーションを選択 | をサポート | not supported(対象外) |
GPU デリゲート | Android でのみ利用可能 | すべてのプラットフォームが |
XNNPack | をサポート | をサポート |
Python のホイール | をサポート | をサポート |
C API | をサポート | 対応 |
C++ API | Bazel プロジェクトでサポートされる | CMake プロジェクトでサポートされる |
CMake を使用した ARM 用のクロスコンパイル
CMake プロジェクトがある場合や、カスタム ツールチェーンを使用する場合は、クロスコンパイルに CMake を使用することをおすすめします。これについては、CMake によるクロス コンパイル TensorFlow Lite のページが別途用意されています。
Bazel を使用した ARM のクロスコンパイル
Bazel プロジェクトがある場合や、TF オペレーションを使用する場合は、Bazel ビルドシステムの使用をおすすめします。Bazel と統合された ARM GCC 8.3 ツールチェーンを使用して、ARM32/64 共有ライブラリをビルドします。
目標とするアーキテクチャ | Bazel の構成 | 対応デバイス |
---|---|---|
armhf(ARM32) | --config=elinux_armhf | 32 ビット Raspberry Pi OS 搭載の RPI3、RPI4 |
AArch64(ARM64) | --config=elinux_aarch64 | Coral、Ubuntu 64 ビットの RPI4 |
以下の手順は、Ubuntu 16.04.3 64 ビット PC(AMD64)と TensorFlow 開発 Docker イメージ tensorflow/tensorflow:devel でテストされています。
TensorFlow Lite を Bazel とクロスコンパイルする手順は次のとおりです。
ステップ 1: Bazel をインストールする
Bazel は TensorFlow の主要なビルドシステムです。最新バージョンの Bazel ビルドシステムをインストールします。
ステップ 2. TensorFlow リポジトリのクローンを作成する
git clone https://github.com/tensorflow/tensorflow.git 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
にあります。
詳細については、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