이 문서에서는 TensorFlow Lite Android 라이브러리를 직접 빌드하는 방법을 설명합니다. 일반적으로 TensorFlow Lite Android 라이브러리를 로컬에서 빌드할 필요가 없습니다. 이 API를 사용하려면 Android 빠른 시작에서 Android 프로젝트에서 이를 사용하는 방법을 자세히 알아보세요.
야간 스냅샷 사용
야간 스냅샷을 사용하려면 루트 Gradle 빌드 구성에 다음 저장소를 추가하세요.
allprojects {
repositories { // should be already there
mavenCentral() // should be already there
maven { // add this repo to use snapshots
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
}
}
build.gradle에 야간 스냅샷을 종속 항목에 추가 (또는 필요에 따라 수정)
...
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-gpu:0.0.0-nightly-SNAPSHOT'
implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly-SNAPSHOT'
...
}
...
로컬에서 TensorFlow Lite 빌드
경우에 따라 TensorFlow Lite의 로컬 빌드를 사용해야 할 수도 있습니다. 예를 들어 TensorFlow에서 선택한 작업이 포함된 커스텀 바이너리를 빌드하거나 TensorFlow Lite를 로컬에서 변경해야 할 수 있습니다.
Docker를 사용하여 빌드 환경 설정
- Docker 파일을 다운로드합니다. Docker 파일을 다운로드하면 파일 사용에 다음 서비스 약관이 적용되는 데 동의하는 것으로 간주됩니다.
동의를 클릭하면 Android 스튜디오 및 Android Native Development Kit의 모든 사용에 https://developer.android.com/studio/terms에서 확인할 수 있는 Android 소프트웨어 개발 키트 라이선스 계약이 적용된다는 데 동의하는 것으로 간주됩니다 (이 URL은 Google에서 수시로 업데이트하거나 변경할 수 있음).
파일을 다운로드하려면 서비스 약관을 확인해야 합니다.- 선택적으로 Android SDK 또는 NDK 버전을 변경할 수 있습니다. 다운로드한 Docker 파일을 빈 폴더에 넣고 다음을 실행하여 Docker 이미지를 빌드합니다.
docker build . -t tflite-builder -f tflite-android.Dockerfile
- 현재 폴더를 컨테이너 내부의 /host_dir에 마운트하여 Docker 컨테이너를 대화형으로 시작합니다. /tensorflow_src는 컨테이너 내부의 TensorFlow 저장소입니다.
docker run -it -v $PWD:/host_dir tflite-builder bash
Windows에서 PowerShell을 사용하는 경우 '$PWD'를 'pwd'로 바꿉니다.
호스트에서 TensorFlow 저장소를 사용하려면 대신 호스트 디렉터리를 마운트합니다 (-v hostDir:/host_dir).
- 컨테이너에 들어가면 다음을 실행하여 추가 Android 도구와 라이브러리를 다운로드할 수 있습니다 (라이선스를 수락해야 할 수도 있음).
sdkmanager \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
"platform-tools" \
"platforms;android-${ANDROID_API_LEVEL}"
이제 Configure WORKSPACE 및 .bazelrc 섹션으로 이동하여 빌드 설정을 구성해야 합니다.
라이브러리 빌드가 끝나면 컨테이너 내부의 /host_dir에 복사하여 호스트에서 액세스할 수 있습니다.
Docker 없이 빌드 환경 설정
Bazel 및 Android 기본 요건 설치
Bazel은 TensorFlow의 기본 빌드 시스템입니다. 이 라이브러리를 사용하여 빌드하려면 시스템에 Android NDK 및 SDK가 설치되어 있어야 합니다.
- 최신 버전의 Bazel 빌드 시스템을 설치합니다.
- Android NDK는 네이티브 (C/C++) TensorFlow Lite 코드를 빌드하는 데 필요합니다. 현재 권장되는 버전은 25b이며 여기에서 확인할 수 있습니다.
- Android SDK 및 빌드 도구는 여기에서 가져오거나 Android 스튜디오의 일부로 가져올 수 있습니다. Build Tools API 23 이상은 TensorFlow Lite를 빌드하는 데 권장되는 버전입니다.
WORKSPACE 및 .bazelrc 구성
이는 TF Lite 라이브러리를 빌드하는 데 필요한 일회성 구성 단계입니다. 루트 TensorFlow 결제 디렉터리에서 ./configure
스크립트를 실행하고 스크립트가 Android 빌드에 ./WORKSPACE
를 대화형으로 구성할지 물으면 '예'라고 답합니다. 스크립트는 다음 환경 변수를 사용하여 설정 구성을 시도합니다.
ANDROID_SDK_HOME
ANDROID_SDK_API_LEVEL
ANDROID_NDK_HOME
ANDROID_NDK_API_LEVEL
이러한 변수가 설정되지 않은 경우 스크립트 프롬프트에서 대화형으로 제공되어야 합니다. 성공적으로 구성하면 루트 폴더의 .tf_configure.bazelrc
파일에 다음과 유사한 항목이 생성됩니다.
build --action_env ANDROID_NDK_HOME="/usr/local/android/android-ndk-r25b"
build --action_env ANDROID_NDK_API_LEVEL="21"
build --action_env ANDROID_BUILD_TOOLS_VERSION="30.0.3"
build --action_env ANDROID_SDK_API_LEVEL="30"
build --action_env ANDROID_SDK_HOME="/usr/local/android/android-sdk-linux"
빌드 및 설치
Bazel이 올바르게 구성되었으면 다음과 같이 루트 결제 디렉터리에서 TensorFlow Lite AAR을 빌드할 수 있습니다.
bazel build -c opt --cxxopt=--std=c++17 --config=android_arm64 \
--fat_apk_cpu=x86,x86_64,arm64-v8a,armeabi-v7a \
--define=android_dexmerger_tool=d8_dexmerger \
--define=android_incremental_dexing_tool=d8_dexbuilder \
//tensorflow/lite/java:tensorflow-lite
그러면 bazel-bin/tensorflow/lite/java/
에 AAR 파일이 생성됩니다. 이렇게 하면 여러 아키텍처로 '뚱뚱한' AAR이 빌드됩니다. 모두 필요하지 않은 경우 배포 환경에 적합한 하위 집합을 사용하세요.
다음과 같이 모델 집합만 타겟팅하는 더 작은 AAR 파일을 빌드할 수 있습니다.
bash tensorflow/lite/tools/build_aar.sh \
--input_models=model1,model2 \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
위 스크립트는 tensorflow-lite.aar
파일을 생성하고 모델 중 하나가 TensorFlow 작업을 사용 중인 경우 tensorflow-lite-select-tf-ops.aar
파일(선택사항)을 생성합니다. 자세한 내용은 TensorFlow Lite 바이너리 크기 줄이기 섹션을 참고하세요.
프로젝트에 AAR 직접 추가
tensorflow-lite.aar
파일을 프로젝트의 libs
라는 디렉터리로 이동합니다. 새 디렉터리를 참조하도록 앱의 build.gradle
파일을 수정하고 기존 TensorFlow Lite 종속 항목을 새 로컬 라이브러리로 바꿉니다.예를 들면 다음과 같습니다.
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
flatDir {
dirs 'libs'
}
}
}
dependencies {
compile(name:'tensorflow-lite', ext:'aar')
}
로컬 Maven 저장소에 AAR 설치
루트 결제 디렉터리에서 다음 명령어를 실행합니다.
mvn install:install-file \
-Dfile=bazel-bin/tensorflow/lite/java/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
앱의 build.gradle
에 mavenLocal()
종속 항목이 있는지 확인하고 표준 TensorFlow Lite 종속 항목을 일부 TensorFlow 작업을 지원하는 종속 항목으로 바꿉니다.
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
}
여기서 0.1.100
버전은 순전히 테스트/개발을 위한 것입니다. 로컬 AAR이 설치되어 있으면 앱 코드에서 표준 TensorFlow Lite 자바 추론 API를 사용할 수 있습니다.