このページでは、CMake ツールで TensorFlow Lite ライブラリをビルドして使用する方法について説明します。
以下の手順は、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
インストール可能なパッケージをビルドする
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 コンパイラが必要です。この目的のために、tensorflow/lite/tools/cmake/native_tools/flatbuffers
にある CMakeList があり、事前にホスト ツールチェーンを使用して別のビルド ディレクトリに CMake でフラット コンパイラをビルドします。
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 に関する限り、TF Lite ビルドでパラメータ TFLITE_ENABLE_XNNPACKor
TFLITE_EXTERNAL_DELEGATE の少なくとも 1 つが有効になっている場合、結果として得られるテストは 2 つの異なるラベルで生成されます(同じテスト実行可能ファイルを使用)。 - plain - 使用するテスト仕様が、使用する 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_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 が無効になります。
オプション名 | 特徴 | Android | Linux | macOS | Windows |
---|---|---|---|---|---|
TFLITE_ENABLE_RUY
|
RUY 行列乗算ライブラリを有効にする | オン | オフ | オフ | オフ |
TFLITE_ENABLE_GPU
|
GPU デリゲートを有効にする | オフ | オフ | 該当しない | 該当しない |
TFLITE_ENABLE_XNNPACK
|
XNNPACK デリゲートを有効にする | オン | オン | オン | オン |
TFLITE_ENABLE_MMAP |
MMAP を有効にする | ON | ON | ON | なし |
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 を行います。その後、次のコマンドを実行します。
cmake ../tensorflow_src/tensorflow/lite/c
cmake --build . -j
このコマンドにより、現在のディレクトリに次の共有ライブラリが生成されます。
プラットフォーム | 図書館名 |
---|---|
Linux | libtensorflowlite_c.so |
macOS | libtensorflowlite_c.dylib |
Windows | tensorflowlite_c.dll |