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 이상이 필요합니다. 우분투에서는 간단히 명령어와 함께 사용하면 됩니다

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 도구 실행

출시 빌드

기본적으로 최적화된 출시 바이너리를 생성합니다. Google Cloud의 다음 명령어를 실행하기만 하면 됩니다.

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에 종속된 프로젝트에서도 이 API를 사용해야 합니다. 다음을 수행할 수 있습니다. -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 컴파일러가 필요함 살펴봤습니다 이를 위해 tensorflow/lite/tools/cmake/native_tools/flatbuffers: 평면 빌드 별도의 빌드 디렉터리에 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 .

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 유틸리티를 사용하여 실행할 수 있습니다. 지금까지 CTest의 경우, 매개변수 중 하나 이상이 TFLITE_ENABLE_XNNPACKorTFLITE_EXTERNAL_DELEGATE` 가 LiteRT에 사용 설정됨 빌드 시 결과 테스트가 서로 다른 두 개의 라벨로 생성됩니다. (동일한 테스트 실행 파일 활용): - plain - 실행되는 테스트 표시 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단계: 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()가 있어야 합니다. target_link_library()와 함께 tensorflow-lite를 사용해야 합니다.

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단계로 이동하시기 바랍니다. 그런 다음 실행할 수 있습니다

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

이 명령어는 현재 디렉터리에 다음과 같은 공유 라이브러리를 생성합니다.

플랫폼 도서관 이름
Linux libtensorflowlite_c.so
macOS libtensorflowlite_c.dylib
Windows tensorflowlite_c.dll