Google Play 서비스 Java API의 LiteRT

Google Play 서비스의 LiteRT는 Java API를 사용하여 액세스할 수도 있습니다. 네이티브 API 외에도 특히 Google Play의 LiteRT는 LiteRT 통역 모드와 API를 참고하세요.

Interpreter API 사용

TensorFlow 런타임에서 제공하는 LiteRT Interpreter API ML 모델 빌드 및 실행을 위한 범용 인터페이스를 제공합니다. 사용 TensorFlow를 사용하여 Interpreter API로 추론을 실행하는 단계 Google Play 서비스 런타임의 Lite입니다.

1. 프로젝트 종속 항목 추가

앱 프로젝트 코드에 다음 종속 항목을 추가하여 Play 서비스 API:

dependencies {
...
    // LiteRT dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include LiteRT Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. LiteRT 초기화 추가

Google Play 서비스 API의 LiteRT 구성요소 초기화 LiteRT API를 사용하기 전에 다음을 확인하세요.

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

자바

Task<Void> initializeTask = TfLite.initialize(context);

3. 인터프리터 만들기 및 런타임 옵션 설정

InterpreterApi.create()를 사용하여 인터프리터를 만들고 다음을 사용하도록 구성 Google Play 서비스 런타임: InterpreterApi.Options.setRuntime() 호출 다음과 같습니다.

Kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

자바

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

위의 구현은 Android를 차단하지 않으므로 사용자 인터페이스 스레드입니다. 스레드 실행을 더욱 면밀하게 관리해야 한다면 Tasks.await() 호출을 추가하여 통역사를 만들 수 있습니다.

Kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

자바

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. 추론 실행

앞에서 만든 interpreter 객체를 사용해 run() 메서드를 호출하여 학습합니다.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

자바

interpreter.run(inputBuffer, outputBuffer);

하드웨어 가속

LiteRT를 사용하면 ML 모델을 학습시키기 위해 그래픽 처리 장치 (GPU)와 같은 특수 하드웨어 프로세서. 나 하드웨어 드라이버를 사용하여 이러한 특수 프로세서를 활용할 수 있습니다. 대리인입니다.

GPU 위임은 Google Play 서비스를 통해 제공됩니다. SDK의 Play 서비스 버전인 인터프리터 API.

기기 호환성 확인

일부 기기에서는 TFLite를 사용한 GPU 하드웨어 가속을 지원하지 않습니다. 목표: 오류 및 잠재적 비정상 종료를 완화하고 TfLiteGpu.isGpuDelegateAvailable 메서드를 사용하여 기기가 GPU 대리자와 호환됩니다.

이 메서드를 사용하여 기기가 GPU와 호환되는지 확인하고 CPU를 사용하세요. GPU가 지원되지 않는 경우에 대한 대안으로 사용할 수 있습니다.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

useGpuTask와 같은 변수가 있으면 이를 사용하여 GPU 대리자를 사용합니다

Kotlin

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

자바

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

인터프리터 API가 포함된 GPU

Interpreter API와 함께 GPU 위임을 사용하려면 다음 단계를 따르세요.

  1. Play 서비스의 GPU 대리자를 사용하도록 프로젝트 종속 항목을 업데이트합니다.

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. TFlite 초기화에서 GPU 위임 옵션을 사용 설정합니다.

    Kotlin

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    자바

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. 인터프리터 옵션에서 GPU 대리자 사용 설정: 대리자 팩토리를 다음과 같이 설정합니다. 다음과 같이 addDelegateFactory() withinInterpreterApi.Options()`를 호출하여 GpuDelegateFactory를 사용합니다.

    Kotlin

    val interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
    .addDelegateFactory(GpuDelegateFactory())
    

    자바

    Options interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new
    GpuDelegateFactory());
    

독립형 LiteRT에서 이전

앱을 독립형 LiteRT에서 Play 서비스 API를 사용하는 경우 앱 프로젝트 코드:

  1. 이 페이지의 제한사항 섹션을 검토하여 사용 사례만 지원됩니다
  2. 코드를 업데이트하기 전에 코드의 성능 및 정확성을 특히 이전 버전의 LiteRT를 사용하는 경우 새 버전과 비교할 기준이 생기므로 있습니다.
  3. Play 서비스 API를 사용하도록 모든 코드를 이전한 경우 기존 LiteRT 런타임을 삭제해야 함 라이브러리 종속 항목( org.tensorflow:tensorflow-lite:*) 파일 크기를 줄이면 앱 크기를 줄일 수 있습니다.
  4. 코드에서 new Interpreter 객체 생성의 모든 발생을 식별합니다. InterpreterApi.create() 호출을 사용하도록 각 객체를 수정합니다. 이 새로운 TfLite.initial은 비동기식이므로 대부분의 경우 삽입형 교체: 호출 시점에 리스너를 등록해야 함 나타냅니다. 3단계 코드의 코드 스니펫을 참고하세요.
  5. 모든 소스에 import org.tensorflow.lite.InterpreterApi;import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; 추가 org.tensorflow.lite.Interpreter 또는 org.tensorflow.lite.InterpreterApi 클래스.
  6. 결과로 반환되는 InterpreterApi.create() 호출에 단일 인수인 경우 인수 목록에 new InterpreterApi.Options()을 추가합니다.
  7. 다음 인수에 .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)을 추가합니다. InterpreterApi.create() 호출
  8. 다른 모든 org.tensorflow.lite.Interpreter 클래스 일치하는 항목 바꾸기 org.tensorflow.lite.InterpreterApi.

독립형 LiteRT 및 Play 서비스 API를 사용하려는 경우 LiteRT 2.9 이상을 사용해야 합니다. LiteRT 2.8 이전 버전은 Play 서비스 API 버전과 호환되지 않습니다.