このページでは、ARM ベースのコンピュータ向けに LiteRT ライブラリをビルドする方法について説明します。
LiteRT は 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 を使用した LiteRT のクロス コンパイルのページをご覧ください。
Bazel を使用した ARM のクロスコンパイル
Bazel プロジェクトがある場合や、TF オペレーションを使用する場合は、Bazel ビルドシステムを使用することをおすすめします。統合された ARM GCC 8.3 ツールチェーンを Bazel で使用して、ARM32/64 共有ライブラリをビルドします。
| ターゲット アーキテクチャ | Bazel の構成 | 対応デバイス |
|---|---|---|
| armhf(ARM32) | --config=elinux_armhf | 32 ビット Raspberry Pi OS を搭載した RPI3、RPI4 |
| AArch64(ARM64) | --config=elinux_aarch64 | Coral、RPI4(Ubuntu 64 ビット) |
以下の手順は、Ubuntu 16.04.3 64 ビット PC(AMD64)と TensorFlow devel Docker イメージ tensorflow/tensorflow:devel でテストされています。
Bazel で LiteRT をクロス コンパイルする手順は次のとおりです。
ステップ 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 で確認できます。
詳しくは、LiteRT 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