TensorFlow 연산자 선택

LiteRT 내장 연산자 라이브러리는 제한된 TensorFlow 연산자 수가 많으며 모든 모델을 변환할 수 있는 것은 아닙니다. 자세한 내용은 연산자 호환성을 참조하세요.

전환을 원하는 사용자는 특정 TensorFlow를 사용 설정해야 합니다. 작업을 지원합니다. 그러나 TensorFlow 작업이 포함된 LiteRT 모델은 핵심 TensorFlow 런타임: LiteRT 인터프리터 바이너리 크기를 늘립니다. Android의 경우 필요한 TensorFlow만 선택적으로 빌드하면 이를 방지할 수 있습니다. op를 사용할 수 있습니다. 자세한 내용은 바이너리 줄이기 크기를 선택합니다.

이 문서에서는 변환실행 선택할 수 있습니다 또한 성능 및 크기 측정항목알려진 제한사항에 대해 알아보세요.

모델 변환

다음 예시에서는 select를 사용하여 LiteRT 모델을 생성하는 방법을 보여줍니다. TensorFlow 작업

import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
  tf.lite.OpsSet.TFLITE_BUILTINS, # enable LiteRT ops.
  tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)

추론 실행

일부 TensorFlow 작업을 실행하는 경우 클라이언트는 필요한 TensorFlow 작업 라이브러리가 포함되어 있습니다.

Android AAR

바이너리 크기를 줄이려면 아래의 안내에 따라 맞춤 AAR 파일을 빌드하세요. 다음 섹션을 참조하세요. 바이너리 크기가 우려가 있으므로 사전 빌드된 AAR을 TensorFlow Ops와 함께 호스팅: MavenCentral.

build.gradle 종속 항목에 이를 함께 추가하여 지정할 수 있습니다. 다음과 같이 표준 LiteRT AAR을 사용하세요.

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}

야간 스냅샷을 사용하려면 Sonatype 스냅샷을 추가해야 합니다. 저장소를 사용합니다.

종속 항목을 추가한 후에는 그래프의 TensorFlow 작업은 있습니다.

참고: TensorFlow Ops 종속 항목은 상대적으로 크기 때문에 다음과 같이 설정하여 .gradle 파일에서 불필요한 x86 ABI를 필터링하려는 경우 내 abiFilters.

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

Android AAR 빌드

바이너리 크기 또는 기타 고급 사례를 줄이기 위해 수동으로 라이브러리를 복사합니다. 작동하는 LiteRT 빌드 가정 환경에서 다음과 같이 선택한 TensorFlow Ops를 사용하여 Android AAR을 빌드합니다. 다음과 같습니다.

sh tensorflow/lite/tools/build_aar.sh \
  --input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
  --target_archs=x86,x86_64,arm64-v8a,armeabi-v7a

그러면 다음에 대해 AAR 파일 bazel-bin/tmp/tensorflow-lite.aar이 생성됩니다. LiteRT 기본 제공 및 커스텀 작업 AAR 파일 생성 TensorFlow 작업의 경우 bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar 만약 작동하는 빌드 환경이 없는 경우 다음을 사용하여 위의 파일을 빌드할 수도 있습니다. Docker 컨테이너를 설치합니다.

AAR 파일을 프로젝트로 직접 가져오거나 맞춤 AAR 파일을 로컬 Maven 저장소에 게시합니다.

mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
  -Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
  -DgroupId=org.tensorflow \
  -DartifactId=tensorflow-lite-select-tf-ops -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'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}

iOS

CocoaPods 사용

LiteRT는 야간에 사전 빌드된 arm64용 TF 작업 CocoaPods를 제공합니다. 이는 TensorFlowLiteSwift 또는 TensorFlowLiteObjC CocoaPods

참고: x86_64 시뮬레이터에서 일부 TF 작업을 사용해야 하는 경우 다음과 같이 빌드할 수 있습니다. 선택 운영 프레임워크를 직접 살펴보겠습니다 Bazel + Xcode 사용을 참고하세요. 섹션을 참조하세요.

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

pod install를 실행한 후에는 다음 항목에 추가 링커 플래그를 제공해야 합니다. 선택된 TF 작업 프레임워크를 프로젝트에 강제 로드합니다. Xcode 프로젝트에서 다음 단계를 따르세요. Build Settings(으)로 이동 -> Other Linker Flags하고 다음을 추가합니다.

버전 2.9.0 이상:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

버전 < 2.9.0:

-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps

그러면 다음에서 SELECT_TF_OPS로 변환된 모든 모델을 실행할 수 있습니다. 있습니다. 예를 들어 이미지 분류 iOS 앱 tf.ops 선택 기능을 테스트합니다.

  • 모델 파일을 SELECT_TF_OPS가 사용 설정된 상태로 변환된 파일로 바꿉니다.
  • 안내에 따라 TensorFlowLiteSelectTfOps 종속 항목을 Podfile에 추가합니다.
  • 위와 같이 추가 링커 플래그를 추가합니다.
  • 예시 앱을 실행하고 모델이 올바르게 작동하는지 확인합니다.

Bazel + Xcode 사용

iOS용 일부 TensorFlow 작업이 포함된 LiteRT는 Bazel을 사용하여 빌드할 수 있습니다. 먼저 iOS 빌드 안내에 따라 Bazel 작업공간 및 .bazelrc 파일이 올바르게 작동합니다.

iOS 지원이 사용 설정된 작업공간을 구성한 후에는 다음 명령어를 사용하여 선택된 TF 작업 부가기능 프레임워크를 빌드합니다. 일반 TensorFlowLiteC.framework 외에 select TF op는 i386 아키텍처용으로 빌드할 수 없으므로 명시적으로 i386를 제외한 대상 아키텍처 목록을 제공합니다.

bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
  //tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework

이렇게 하면 bazel-bin/tensorflow/lite/ios/ 아래에 프레임워크가 생성됩니다. 디렉터리 다음 단계에 따라 Xcode 프로젝트에 이 새 프레임워크를 추가할 수 있습니다. Xcode 프로젝트 설정 섹션에 있는 iOS 빌드 가이드를 참조하세요.

앱 프로젝트에 프레임워크를 추가한 후 추가 링커 플래그 선택한 TF 작업을 강제 로드하도록 앱 프로젝트에 지정해야 함 프레임워크입니다 Xcode 프로젝트에서 Build Settings로 이동합니다. -> Other Linker Flags하고 다음을 추가합니다.

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

C/C++

Bazel 또는 CMake를 사용하여 LiteRT를 빌드하는 경우 LiteRT Flex를 연결하여 Flex 위임을 사용 설정할 수 있습니다. 권한을 위임할 수 있습니다. Bazel을 사용하여 다음 명령어로 빌드할 수 있습니다.

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

이 명령어는 bazel-bin/tensorflow/lite/delegates/flex

플랫폼 도서관 이름
Linux libtensorflowlite_flex.so
macOS libtensorflowlite_flex.dylib
Windows tensorflowlite_flex.dll

다음 경우에 필요한 TfLiteDelegate가 자동으로 설치됩니다. 인터프리터를 만듭니다. 그것은 은 일반적으로 사용하는 것처럼 대리자 인스턴스를 명시적으로 설치할 필요가 없습니다. 필수사항입니다.

참고: 이 기능은 버전 2.7부터 사용할 수 있습니다.

Python

일부 TensorFlow 작업이 포함된 LiteRT는 TensorFlow pip 패키지. 다음을 수행할 수 있습니다. LiteRT 통역사 pip만 설치하면 패키지를 참고하세요.

측정항목

성능

기본 제공 및 선택 TensorFlow 작업을 함께 사용하는 경우 LiteRT 최적화 및 최적화된 내장 작업을 사용할 수 있으며 사용할 수 있는 경우에 해당합니다

다음 표에서는 추론을 실행하는 데 걸린 평균 시간을 설명합니다. Pixel 2의 MobileNet 표시된 시간은 평균 100회 실행입니다. 이러한 대상은 --config=android_arm64 -c opt 플래그를 사용하여 Android용으로 빌드되었습니다.

빌드 시간 (밀리초)
기본 제공 작업만 (TFLITE_BUILTIN) 260.7
TF 작업만 사용 (SELECT_TF_OPS) 264.5

바이너리 크기

다음 표에서는 각 빌드에 대한 LiteRT의 바이너리 크기를 설명합니다. 이러한 타겟은 --config=android_arm -c opt를 사용하여 Android용으로 빌드되었습니다.

빌드 C++ 바이너리 크기 Android APK 크기
기본 제공 작업만 796 KB 561 KB
기본 제공 작업 + TF 작업 23.0 MB 8.0 MB
기본 제공 작업 + TF 작업 (1개) 4.1 MB 1.8 MB

(1) 이 라이브러리는 i3d-kinastics-400에 맞게 선택적으로 구축됩니다. 모델 8개의 TFLite 내장 작업과 3개의 TensorFlow 작업을 포함합니다. 자세한 내용은 LiteRT 바이너리 크기 줄이기 섹션

알려진 제한사항

  • 지원되지 않는 유형: 일부 TensorFlow 작업은 입력/출력 유형이 있습니다.

업데이트

  • 버전 2.6 <ph type="x-smartling-placeholder">
      </ph>
    • GraphDef 속성 기반 연산자 및 HashTable 리소스를 지원합니다. 초기화가 개선되었습니다.
  • 버전 2.5 <ph type="x-smartling-placeholder">
  • 버전 2.4 <ph type="x-smartling-placeholder">
      </ph>
    • 하드웨어 가속 위임과의 호환성 개선