このページでは、 CMakeツールで TensorFlow Lite ライブラリを構築して使用する方法について説明します。
次の手順は、Ubuntu 16.04.3 64 ビット PC (AMD64)、macOS Catalina (x86_64)、Windows 10、および TensorFlow devel 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
インストール可能なパッケージをビルドする
find_package(tensorflow-lite CONFIG)
を使用して別の CMake プロジェクトによって依存関係として使用できるインストール可能パッケージをビルドするには、 -DTFLITE_ENABLE_INSTALL=ON
オプションを使用します。
理想的には、独自のバージョンのライブラリ依存関係も提供する必要があります。これらは、TF Lite に依存するプロジェクトでも使用する必要があります。 -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 ターゲット アーキテクチャ用のバイナリをビルドできます。
TF Lite をクロスコンパイルするには、 -DCMAKE_TOOLCHAIN_FILE
フラグを使用して SDK (Android の場合は ARM64 SDK または NDK など) へのパスを指定する必要があります。
cmake -DCMAKE_TOOLCHAIN_FILE=<CMakeToolchainFileLoc> ../tensorflow/lite/
Android クロスコンパイルの詳細
Android クロスコンパイルの場合、 Android NDKをインストールし、前述の-DCMAKE_TOOLCHAIN_FILE
フラグを使用して NDK パスを指定する必要があります。 -DANDROID_ABI
フラグを使用してターゲット ABI を設定する必要もあります。
cmake -DCMAKE_TOOLCHAIN_FILE=<NDK path>/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a ../tensorflow_src/tensorflow/lite
カーネル (ユニット) テストのクロスコンパイルの詳細
単体テストのクロスコンパイルには、ホスト アーキテクチャ用の flatc コンパイラが必要です。この目的のために、ホスト ツールチェーンを使用して別のビルド ディレクトリに事前に CMake で flatc コンパイラーをビルドするための CMakeLists がtensorflow/lite/tools/cmake/native_tools/flatbuffers
にあります。
mkdir flatc-native-build && cd flatc-native-build
cmake ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
flatc をカスタムのインストール場所 (CMake ビルド ディレクトリの代わりに他のネイティブに構築されたツールを含むディレクトリなど) にインストールすることもできます。
cmake -DCMAKE_INSTALL_PREFIX=<native_tools_dir> ../tensorflow_src/tensorflow/lite/tools/cmake/native_tools/flatbuffers
cmake --build .
TF Lite クロスコンパイル自体については、ネイティブflatcバイナリを含むディレクトリを指す追加パラメータ-DTFLITE_HOST_TOOLS_DIR=<flatc_dir_path>
を、上記の-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 ユーティリティを使用して実行することもできます。 CTest に関する限り、パラメーターTFLITE_ENABLE_NNAPI, TFLITE_ENABLE_XNNPACK
、またはTFLITE_EXTERNAL_DELEGATE
の少なくとも 1 つが TF Lite ビルドに対して有効になっている場合、結果のテストは 2 つの異なるラベル(同じテスト実行可能ファイルを使用して) で生成されます。 -プレーン- テストを示します。 CPU バックエンドで実行されるもの -デリゲート- 使用されるデリゲート仕様に使用される追加の起動引数を期待するテストを示します
CTestTestfile.cmake
とrun-tests.cmake
(以下で参照) は両方とも<build_dir>/kernels
で入手できます。
CPU バックエンドを使用した単体テストの起動 ( CTestTestfile.cmake
が現在のディレクトリのターゲットに存在する場合):
ctest -L plain
デリゲートを使用した単体テストの起動例 ( CTestTestfile.cmake
ファイルとrun-tests.cmake
ファイルが現在のディレクトリのターゲットに存在する場合):
cmake -E env TESTS_ARGUMENTS=--use_nnapi=true\;--nnapi_accelerator_name=vsi-npu ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--use_xnnpack=true ctest -L delegate
cmake -E env TESTS_ARGUMENTS=--external_delegate_path=<PATH> ctest -L delegate
追加のデリゲート関連の起動引数を単体テストに提供するこの方法の既知の制限は、期待される戻り値 0 を持つ引数のみを効果的にサポートすることです。異なる戻り値はテストの失敗として報告されます。
OpenCL GPU デリゲート
ターゲット マシンが OpenCL をサポートしている場合は、GPU パワーを活用できるGPU デリゲートを使用できます。
OpenCL GPU デリゲートのサポートを構成するには:
cmake ../tensorflow_src/tensorflow/lite -DTFLITE_ENABLE_GPU=ON
ステップ 5. TensorFlow Lite をビルドする
tflite_build
ディレクトリ内で、
cmake --build . -j
ステップ 6. TensorFlow Lite ベンチマーク ツールとラベル イメージの例を構築する (オプション)
tflite_build
ディレクトリ内で、
cmake --build . -j -t benchmark_model
cmake --build . -j -t label_image
TensorFlow Lite を構築するために利用可能なオプション
利用可能なオプションのリストは次のとおりです。 -D<option_name>=[ON|OFF]
でオーバーライドできます。たとえば、 -DTFLITE_ENABLE_XNNPACK=OFF
と指定すると、デフォルトで有効になっている XNNPACK が無効になります。
オプション名 | 特徴 | アンドロイド | Linux | マックOS | ウィンドウズ |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY | RUY行列乗算ライブラリを有効にする | の上 | オフ | オフ | オフ |
TFLITE_ENABLE_NNAPI | NNAPI デリゲートを有効にする | の上 | オフ | 該当なし | 該当なし |
TFLITE_ENABLE_GPU | GPU デリゲートを有効にする | オフ | オフ | 該当なし | 該当なし |
TFLITE_ENABLE_XNNPACK | XNNPACK デリゲートを有効にする | の上 | の上 | の上 | の上 |
TFLITE_ENABLE_MMAP | MMAP を有効にする | の上 | の上 | の上 | 該当なし |
TensorFlow Lite を使用する CMake プロジェクトを作成する
これは、TFLite の最小限の例の CMakeLists.txt です。
TensorFlow Lite ディレクトリに 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)
TensorFlow Lite C ライブラリをビルドする
C API用の TensorFlow Lite 共有ライブラリを構築する場合は、まずステップ 1からステップ 3に従ってください。その後、次のコマンドを実行します。
Linux / MacOS
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
ウィンドウズ
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j --config Release
コンパイルされたライブラリ
上記のコマンドにより、現在のディレクトリに次の共有ライブラリが生成されます。
プラットホーム | 図書館名 |
---|---|
Linux | libtensorflowlite_c.so |
マックOS | libtensorflowlite_c.dylib |
ウィンドウズ | tensorflowlite_c.dll |