Android용 LiteRT 빌드

이 문서에서는 Android 기기에 LiteRT Android 라이브러리를 빌드하는 방법을 있습니다. 일반적으로 LiteRT 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 'com.google.ai.edge.litert:litert-gpu:0.0.0-nightly-SNAPSHOT'
    implementation 'com.google.ai.edge.litert:litert-support:0.0.0-nightly-SNAPSHOT'
    ...
}
...

로컬에서 LiteRT 빌드

경우에 따라 LiteRT의 로컬 빌드를 사용하고자 할 수도 있습니다. 대상 예를 들어, 컨테이너 이미지 생성 및 가져오기가 포함된 TensorFlow에서 선택된 작업 또는 LiteRT를 로컬에서 변경할 수 있습니다.

Docker를 사용하여 빌드 환경 설정

  • Docker 파일을 다운로드합니다. Docker 파일을 다운로드하면 다음 서비스 약관이 귀하의 서비스 사용에 적용됩니다.

동의를 클릭하면 Android 스튜디오 및 Android Native Development Kit에는 Android 소프트웨어가 적용됩니다. 개발 키트 라이선스 계약은 다음 위치에서 확인할 수 있습니다. https://developer.android.com/studio/terms (이러한 URL은 업데이트 또는 변경될 수 있음) 경우에 따라 변경될 수 있음).

다운로드하려면 서비스 약관을 확인해야 합니다. 파일에서 참조됩니다. <ph type="x-smartling-placeholder"></ph>

  • 선택적으로 Android SDK 또는 NDK 버전을 변경할 수 있습니다. 다운로드한 Docker 파일을 빈 폴더에 만들고 다음을 실행하여 Docker 이미지를 빌드합니다.
docker build . -t tflite-builder -f tflite-android.Dockerfile
  • 현재 폴더를 컨테이너 내부의 /host_dir(/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}"

이제 작업공간 및 .bazelrc 구성 섹션으로 이동하여 빌드 설정을 구성해야 합니다.

라이브러리 빌드를 완료한 후 /host_dir에 복사할 수 있습니다. 호스트에서 액세스할 수 있도록 합니다

Docker 없이 빌드 환경 설정

Bazel 및 Android 기본 요건 설치

Bazel은 TensorFlow의 기본 빌드 시스템입니다. 이를 사용하여 빌드하려면 이미 시스템에 Android NDK 및 SDK가 설치되어 있어야 합니다.

  1. Bazel 빌드 시스템의 최신 버전을 설치합니다.
  2. 네이티브 (C/C++) LiteRT를 빌드하려면 Android NDK가 필요합니다. 생성합니다. 현재 권장 버전은 25b이며, 여기에서 확인할 수 있습니다.
  3. Android SDK 및 빌드 도구는 여기 또는 또는 Cloud Build의 일부로 Android 스튜디오 빌드 Tools API >= 23이 LiteRT 빌드에 권장되는 버전입니다.

WORKSPACE 및 .bazelrc 구성

LiteRT를 빌드하는 데 필요한 일회성 구성 단계입니다. 제공합니다 루트 TensorFlow 결제에서 ./configure 스크립트를 실행합니다. '예'라고 답합니다. 스크립트가 대화형 방식으로 ./WORKSPACE를 구성하도록 요청할 때 Android 빌드용입니다. 스크립트는 환경 변수에 적용됩니다.

  • 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이 올바르게 구성되면 다음 위치에서 LiteRT 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-lite-select-tf-ops.aar 파일(모델 중 하나가 사용 중인 경우) TensorFlow 작업 자세한 내용은 LiteRT 바이너리 크기 줄이기 섹션

프로젝트에 AAR 직접 추가

tensorflow-lite.aar 파일을 다음 디렉터리의 libs 디렉터리로 이동합니다. 살펴보겠습니다 새 디렉터리를 참조하도록 앱의 build.gradle 파일을 수정합니다. 기존 LiteRT 종속 항목을 새 로컬 라이브러리로 대체합니다. e.g.:

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.gradlemavenLocal() 종속 항목이 있는지 확인합니다. 표준 LiteRT 종속 항목을 지원되는 종속 항목으로 대체합니다. 일부 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이 설치되어 있으면 앱 코드에 있는 LiteRT Java 추론 API