CMake で LiteRT をビルドする

このページでは、LiteRT ライブラリをビルドして使用する方法について説明します。 CMake ツール。

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

ステップ 1. CMake ツールをインストールする

CMake 3.16 以降が必要です。Ubuntu では、次のコマンドを実行するだけで、 使用できます。

sudo apt-get install cmake

または、 公式の cmake のインストール ガイド

ステップ 2. TensorFlow リポジトリのクローンを作成する

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

ステップ 3. CMake ビルド ディレクトリを作成する

mkdir tflite_build
cd tflite_build

ステップ 4. 構成で CMake ツールを実行する

リリースビルド

デフォルトでは、最適化されたリリース バイナリが生成されます。たとえば、 次のコマンドを実行するだけです。

cmake ../tensorflow_src/tensorflow/lite

デバッグビルド

シンボル情報を含むデバッグビルドを生成する必要がある場合は、以下を行う必要があります。 -DCMAKE_BUILD_TYPE=Debug オプションを指定する。

cmake ../tensorflow_src/tensorflow/lite -DCMAKE_BUILD_TYPE=Debug

カーネル単体テストでビルドする

カーネルテストを実行できるようにするには、 -DTFLITE_KERNEL_TEST=on フラグ。単体テストのクロスコンパイルの仕様は、 次のサブセクションで行います。

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_KERNEL_TEST=on

インストール可能なパッケージをビルドする

別の依存関係として使用できるインストール可能なパッケージをビルドする CMake プロジェクトで find_package(tensorflow-lite CONFIG) を使用している場合は、 -DTFLITE_ENABLE_INSTALL=ON オプション。

可能であれば、独自のバージョンのライブラリ依存関係も用意してください。 これらは、LiteRT に依存するプロジェクトでも使用する必要があります。Google Chat では -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON を使用して <PackageName>_DIR を設定する ライブラリのインストールをポイントします。

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_INSTALL=ON \
  -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON \
  -DSYSTEM_FARMHASH=ON \
  -DSYSTEM_PTHREADPOOL=ON \
  -Dabsl_DIR=<install path>/lib/cmake/absl \
  -DEigen3_DIR=<install path>/share/eigen3/cmake \
  -DFlatBuffers_DIR=<install path>/lib/cmake/flatbuffers \
  -Dgemmlowp_DIR=<install path>/lib/cmake/gemmlowp \
  -DNEON_2_SSE_DIR=<install path>/lib/cmake/NEON_2_SSE \
  -Dcpuinfo_DIR=<install path>/share/cpuinfo \
  -Druy_DIR=<install path>/lib/cmake/ruy

クロスコンパイル

CMake を使用して、ARM64 または Android のターゲット アーキテクチャのバイナリをビルドできます。

LiteRT をクロスコンパイルするには、コードの -DCMAKE_TOOLCHAIN_FILE を使用した SDK(Android の場合は ARM64 SDK または NDK など) 設定されます。

cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android クロスコンパイルの仕様

Android のクロスコンパイルでは、以下を Android NDK です。NDK パスは、 上記の -DCMAKE_TOOLCHAIN_FILE フラグ。ターゲット ABI も設定する必要があります。 -DANDROID_ABI フラグを指定します。

cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
カーネル(単体テスト)テストのクロスコンパイルの仕様

単体テストのクロスコンパイルには、ホスト用の Flatc コンパイラが必要 説明します。この目的のために、CMakeLists が tensorflow/lite/tools/cmake/native_tools/flatbuffers: Flatc をビルドする 事前に、ホストを使用して別のビルド ディレクトリで CMake でコンパイラを実行する ツールチェーン。

mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

flatc をカスタムのインストール場所にインストールすることもできます。 (例: CMake 以外のネイティブ ビルドのツールを含むディレクトリなど)。 build ディレクトリにあります)。

cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .

LiteRT クロスコンパイル自体では、追加のパラメータ -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> は、次のものを含むディレクトリを指します。 ネイティブの flatc バイナリを、 前述の -DTFLITE_KERNEL_TEST=on フラグ。

cmake -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} -DTFLITE_KERNEL_TEST=on -DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path> ../tensorflow/lite/
クロスコンパイルされたカーネル(単体テスト)がターゲットで起動される

単体テストは、個別の実行可能ファイルとして、または CTest ユーティリティを使用して実行できます。ここまで パラメータが少なくとも 1 つある場合、CTest に関連する TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE が LiteRT で有効になっている 結果のテストは 2 つの異なるラベル付きで生成されます。 (同じテスト実行可能ファイルを利用): - プレーン - 実行されるテストを示します。 CPU バックエンド - デリゲート - 追加起動が予定されているテストを示します 使用されるデリゲートの仕様に使用される引数

CTestTestfile.cmakerun-tests.cmake(下記参照)は両方とも <build_dir>/kernels で入手できます。

CPU バックエンドを使用した単体テストの起動(CTestTestfile.cmake が ターゲットに存在する(現在のディレクトリ))。

ctest -L plain

デリゲートを使用した単体テストの起動例( CTestTestfile.cmakerun-tests.cmake ファイルがターゲットに存在する 次のコマンドを入力します。

cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate

この方法に関する既知の制限: 委任に関連する追加の 単体テストに対して起動時の引数を指定するのは、 期待される戻り値 0。さまざまな戻り値が 1 つのパラメータとして 発生します。

OpenCL GPU デリゲート

ターゲット マシンが OpenCL をサポートしている場合は、 GPU デリゲート。これは、 GPU のパワーを活用します。

OpenCL GPU デリゲートのサポートを構成するには:

cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON

ステップ 5. LiteRT をビルドする

tflite_build ディレクトリで、次の操作を行います。

cmake --build . -j

ステップ 6. LiteRT ベンチマーク ツールとラベルイメージの例のビルド(オプション)

tflite_build ディレクトリで、次の操作を行います。

cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image

LiteRT のビルドに使用できるオプション

使用可能なオプションのリストを以下に示します。次のようにオーバーライドできます。 -D<option_name>=[ON|OFF]。たとえば、-DTFLITE_ENABLE_XNNPACK=OFF を デフォルトで有効になっている XNNPACK を無効にします。

オプション名 機能 Android Linux macOS Windows
TFLITE_ENABLE_RUY RUY を有効にする 行列 乗算 ライブラリ オン オフ オフ オフ
TFLITE_ENABLE_GPU GPU を有効にする 委任 オフ オフ なし なし
TFLITE_ENABLE_XNNPACK XNNPACK を有効にする 委任 オン オン オン オン
TFLITE_ENABLE_MMAP MMAP を有効にする オン オン オン なし

LiteRT を使用する CMake プロジェクトを作成する

次の CMakeLists.txt ファイルです。 TFLite の最小例

LiteRT ディレクトリとリンクには add_subdirectory() が必要です。 tensorflow-lite を target_link_libraries() に置き換えます。

cmake_minimum_required(VERSION 3.16)
project(minimal C CXX)

set(TENSORFLOW_SOURCE_DIR "" CACHE PATH
  "Directory that contains the TensorFlow project" )
if(NOT TENSORFLOW_SOURCE_DIR)
  get_filename_component(TENSORFLOW_SOURCE_DIR
    "${CMAKE_CURRENT_LIST_DIR}/../../../../" ABSOLUTE)
endif()

add_subdirectory(
  "${TENSORFLOW_SOURCE_DIR}/tensorflow/lite"
  "${CMAKE_CURRENT_BINARY_DIR}/tensorflow-lite" EXCLUDE_FROM_ALL)

add_executable(minimal minimal.cc)
target_link_libraries(minimal tensorflow-lite)

LiteRT C ライブラリをビルドする

開発用の LiteRT 共有ライブラリをビルドする場合は、 C APIステップ 1 に沿って ステップ 3 に進みます。次に、kubectl の 起動します。

cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j

このコマンドにより、現在のディレクトリに次の共有ライブラリが生成されます。

プラットフォーム ライブラリ名
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll