Raspberry Pi용 TensorFlow Lite 빌드하기

이 페이지에서는 Raspberry Pi용 TensorFlow Lite 정적 및 공유 라이브러리를 빌드하는 방법에 대해 설명합니다. TensorFlow Lite를 사용하여 모델 실행을 시작하려는 경우, 가장 빠른 방법은 Python 빠른 시작에 나와 있는 대로 TensorFlow Lite 런타임 패키지를 설치하는 것입니다.

참고: 이 페이지에서는 TensorFlow Lite용 C++ 정적 및 공유 라이브러리를 컴파일하는 방법을 보여줍니다. 대체 설치 방법은 다음과 같습니다. Python 인터프리터 API만 설치합니다(추론 전용). pip에서 전체 TensorFlow 패키지를 설치합니다. 또는 전체 TensorFlow 패키지를 빌드합니다.

참고: 여기서는 32bit 빌드만 다룹니다. 64bit 빌드를 찾고 있다면 ARM64용 빌드 페이지를 확인하세요.

Make를 사용한 Raspberry Pi의 교차 컴파일

다음 지침은 Ubuntu 16.04.3 64bit PC(AMD64) 및 TensorFlow devel docker 이미지 tensorflow/tensorflow:devel에서 테스트되었습니다.

TensorFlow Lite를 교차 컴파일하려면 다음 단계를 따릅니다.

1단계. 공식 Raspberry Pi 교차 컴파일 도구 체인을 복제합니다.

git clone https://github.com/raspberrypi/tools.git rpi_tools

2단계. TensorFlow 리포지토리를 복제합니다.

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

참고: TensorFlow Docker 이미지를 사용하는 경우, 리포지토리는 /tensorflow_src/에 이미 제공되어 있습니다.

3단계. TensorFlow 리포지토리의 루트에서 다음 스크립트를 실행하여 모든 빌드 종속성을

다운로드합니다.

cd tensorflow_src && ./tensorflow/lite/tools/make/download_dependencies.sh

참고: 이 작업은 한 번만 수행하면 됩니다.

4a단계. Raspberry Pi 2, 3 및 4용 ARMv7 바이너리를 빌드합니다.

PATH=../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH \
  ./tensorflow/lite/tools/make/build_rpi_lib.sh

참고: tensorflow/lite/tools/make/gen/rpi_armv7l/lib/libtensorflow-lite.a에서 정적 라이브러리를 컴파일해야 합니다.

build_rpi_lib.sh 스크립트는 TFLite Makefile을 사용하는 Make의 래퍼이므로 추가 Make 옵션 또는 대상 이름을 추가할 수 있습니다. 가능한 옵션은 다음과 같습니다.

./tensorflow/lite/tools/make/build_rpi_lib.sh clean # clean object files
./tensorflow/lite/tools/make/build_rpi_lib.sh -j 16 # run with 16 jobs to leverage more CPU cores
./tensorflow/lite/tools/make/build_rpi_lib.sh label_image # # build label_image binary

4b단계. Raspberry Pi Zero용 ARMv6 바이너리를 빌드합니다.

PATH=../rpi_tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin:$PATH \
  ./tensorflow/lite/tools/make/build_rpi_lib.sh TARGET_ARCH=armv6

참고: tensorflow/lite/tools/make/gen/rpi_armv6/lib/libtensorflow-lite.a에서 정적 라이브러리를 컴파일해야 합니다.

Raspberry Pi에서 자체적으로 컴파일하기

다음 지침은 Raspberry Pi Zero, Raspbian GNU/Linux 10(buster), gcc 버전 8.3.0(Raspbian 8.3.0-6+rpi1)에서 테스트되었습니다.

TensorFlow Lite를 네이티브로 컴파일하려면 다음 단계를 따릅니다.

1단계. Raspberry Pi에 로그인하고 도구 체인을 설치합니다.

sudo apt-get install build-essential

2단계. TensorFlow 리포지토리를 복제합니다.

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

3단계. TensorFlow 리포지토리의 루트에서 다음 스크립트를 실행하여 모든 빌드 종속성을 다운로드합니다.

cd tensorflow_src && ./tensorflow/lite/tools/make/download_dependencies.sh

참고: 이 작업은 한 번만 수행하면 됩니다.

4단계. 그러면 다음을 사용하여 TensorFlow Lite를 컴파일할 수 있습니다.

./tensorflow/lite/tools/make/build_rpi_lib.sh

**참고: **tensorflow/lite/tools/make/gen/lib/rpi_armv6/libtensorflow-lite.a에서 정적 라이브러리를 컴파일해야 합니다.

Bazel을 사용한 armhf의 교차 컴파일

Bazel과 함께 ARM GCC 도구 체인을 사용하여 Raspberry Pi 2, 3 및 4와 호환되는 armhf 공유 라이브러리를 빌드할 수 있습니다.

참고: 생성된 공유 라이브러리를 실행하려면 glibc 2.28 이상이 필요합니다.

다음 지침은 Ubuntu 16.04.3 64bit PC(AMD64) 및 TensorFlow devel docker 이미지 tensorflow/tensorflow:devel에서 테스트되었습니다.

TensorFlow Lite를 Bazel과 교차 컴파일하려면 다음 단계를 따릅니다.

1단계. Bazel 설치하기

Bazel은 TensorFlow의 기본 빌드 시스템입니다. 최신 버전의 Bazel 빌드 시스템을 설치합니다.

참고: TensorFlow Docker 이미지를 사용하는 경우 Bazel을 이미 사용할 수 있습니다.

2단계. TensorFlow 리포지토리를 복제합니다.

git clone https://github.com/tensorflow/tensorflow.git tensorflow_src

참고: TensorFlow Docker 이미지를 사용하는 경우, 리포지토리는 /tensorflow_src/에 이미 제공되어 있습니다.

3단계. Raspberry Pi 2, 3 및 4용 ARMv7 바이너리를 빌드합니다.

C 라이브러리
bazel build --config=elinux_armhf -c opt //tensorflow/lite/c:libtensorflowlite_c.so

자세한 내용은 TensorFlow Lite C API 페이지를 확인하세요.

C++ 라이브러리
bazel build --config=elinux_armhf -c opt //tensorflow/lite:libtensorflowlite.so

공유 라이브러리는 bazel-bin/tensorflow/lite/libtensorflowlite.so에서 찾을 수 있습니다.

현재, 필요한 모든 헤더 파일을 추출하는 간단한 방법은 없으므로 모든 헤더 파일을 TensorFlow 리포지토리의 tensorflow/lite/에 포함해야 합니다. 또한 FlatBuffersAbseil의 헤더 파일도 필요합니다.

기타

도구 체인을 사용하여 다른 Bazel 대상을 빌드할 수도 있습니다. 다음은 몇 가지 유용한 대상입니다.

  • //tensorflow/lite/tools/benchmark:benchmark_model
  • //tensorflow/lite/examples/label_image:label_image