Android용 LiteRT 빌드

이 문서에서는 Android 기기에 LiteRT Android 라이브러리를 빌드하는 방법을 있습니다. 일반적으로 LiteRT 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 '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