이 페이지에서는 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_XNNPACKor
TFLITE_EXTERNAL_DELEGATE` 가 TF Lite 빌드에 사용 설정된 경우 결과 테스트는 두 개의 서로 다른 라벨(동일한 테스트 실행 파일 활용)으로 생성됩니다. - 일반 - 사용된 추가 테스트를 실행하는 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 사용 설정 | 사용 | 사용 | 사용 | 해당 사항 없음 |
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 |