CMake로 TensorFlow Lite 빌드

이 페이지에서는 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

설치 가능한 패키지 빌드

다른 CMake 프로젝트에서 종속 항목으로 사용할 수 있는 설치 가능한 패키지를 find_package(tensorflow-lite CONFIG)로 빌드하려면 -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에 있는 CMakeLists는 호스트 도구 모음을 사용하는 별도의 빌드 디렉터리에서 사전에 CMake로 flatc 컴파일러를 빌드합니다.

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

또한 맞춤 설치 위치(예: CMake 빌드 디렉터리 대신 기본적으로 빌드된 다른 도구가 포함된 디렉터리)에 flatc설치할 수도 있습니다.

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_XNNPACKorTFLITE_EXTERNAL_DELEGATE` 가 TF Lite 빌드에 사용 설정된 경우 결과 테스트는 두 개의 서로 다른 라벨(동일한 테스트 실행 파일 활용)으로 생성됩니다. - 일반 - 사용된 추가 테스트를 실행하는 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인 항목만 사실상 지원한다는 것입니다. 다른 반환 값이 테스트 실패로 보고됩니다.

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 사용 설정 사용 사용 사용 해당 사항 없음

TensorFlow Lite를 사용하는 CMake 프로젝트 생성

다음은 TFLite 최소 예의 CMakeLists.txt입니다.

TensorFlow Lite 디렉터리에 add_subdirectory()를 사용하고 tensorflow-lite를 target_link_library()와 연결해야 합니다.

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