그래픽 처리 장치 (GPU)를 사용하여 머신러닝 (ML) 모델 실행 광고의 실적과 사용자 환경을 ML 지원 애플리케이션입니다 Android 기기에서 GPU 가속을 사용 설정할 수 있습니다. 대리자 및 하나를 사용하여 모델 실행을 다음 API 중 하나입니다.
- Interpreter API - 가이드
- 네이티브 (C/C++) API - 이 가이드
이 가이드에서는 C API, C++ API 및 양자화 모델의 활용입니다. GPU 대리자를 사용하는 방법에 대한 자세한 내용은 권장사항 및 고급 기술이 포함된 LiteRT는 GPU 위임 페이지를 참조하세요.
GPU 가속 사용 설정
C 또는 C++에서 Android용 LiteRT GPU 대리자를 사용하려면
TfLiteGpuDelegateV2Create()
로 위임하고
TfLiteGpuDelegateV2Delete()
: 다음 코드 예에 나와 있습니다.
// Set up interpreter.
auto model = FlatBufferModel::BuildFromFile(model_path);
if (!model) return false;
ops::builtin::BuiltinOpResolver op_resolver;
std::unique_ptr<Interpreter> interpreter;
InterpreterBuilder(*model, op_resolver)(&interpreter);
// NEW: Prepare GPU delegate.
auto* delegate = TfLiteGpuDelegateV2Create(/*default options=*/nullptr);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
// Run inference.
WriteToInputTensor(interpreter->typed_input_tensor<float>(0));
if (interpreter->Invoke() != kTfLiteOk) return false;
ReadFromOutputTensor(interpreter->typed_output_tensor<float>(0));
// NEW: Clean up.
TfLiteGpuDelegateV2Delete(delegate);
TfLiteGpuDelegateOptionsV2
객체 코드를 검토하여 위임 인스턴스 빌드
사용할 수 있습니다 다음을 사용하여 기본 옵션을 초기화할 수 있습니다.
TfLiteGpuDelegateOptionsV2Default()
로 설정하고 필요에 따라 수정합니다.
C 또는 C++로 작성된 Android용 LiteRT GPU 대리자는 Bazel 빌드 시스템 다음을 사용하여 위임을 빌드할 수 있습니다. 다음 명령어를 실행합니다.
bazel build -c opt --config android_arm64 tensorflow/lite/delegates/gpu:delegate # for static library
bazel build -c opt --config android_arm64 tensorflow/lite/delegates/gpu:libtensorflowlite_gpu_delegate.so # for dynamic library
Interpreter::ModifyGraphWithDelegate()
또는
Interpreter::Invoke()
, 발신자는 현재 EGLContext
스레드와 Interpreter::Invoke()
는 동일한 EGLContext
에서 호출되어야 합니다. 만약
EGLContext
가 없는 경우 위임은 내부적으로 하나를 만들지만
Interpreter::Invoke()
가 항상 동일한
Interpreter::ModifyGraphWithDelegate()
가 호출된 스레드입니다.
Google Play 서비스에서 LiteRT 사용:
Google Play 서비스 C API에서 LiteRT를 사용하는 경우 Java/Kotlin API를 사용하여 GPU 대리자를 사용할 수 있는지 확인해야 합니다. 기기에 대한 캡션을 확인할 수 있습니다.
애플리케이션에 GPU 대리자 Gradle 종속 항목을 추가합니다.
implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'
그런 다음 GPU 가용성을 확인하고 검사에 문제가 있다면 TfLiteNative를 초기화합니다. 성공:
자바
Task<Void> tfLiteHandleTask = TfLiteGpu.isGpuDelegateAvailable(this) .onSuccessTask(gpuAvailable -> { TfLiteInitializationOptions options = TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(gpuAvailable).build(); return TfLiteNative.initialize(this, options); } );
Kotlin
val tfLiteHandleTask = TfLiteGpu.isGpuDelegateAvailable(this) .onSuccessTask { gpuAvailable -> val options = TfLiteInitializationOptions.Builder() .setEnableGpuDelegateSupport(gpuAvailable) .build() TfLiteNative.initialize(this, options) }
또한 다음을 포함하도록 CMake 구성을 업데이트해야 합니다.
TFLITE_USE_OPAQUE_DELEGATE
컴파일러 플래그:
add_compile_definitions(TFLITE_USE_OPAQUE_DELEGATE)
FlatBuffers 라이브러리는 광고 소재의 모든 속성을 구성하는 데 사용됩니다.
위임하므로 네이티브 코드의 종속 항목에 추가해야 합니다.
다음과 같이 공식 CMake
프로젝트 구성을 사용할 수 있습니다.
target_include_directories(tflite-jni PUBLIC
third_party/headers # flatbuffers
...)
헤더를 앱에 번들로 묶기만 할 수도 있습니다.
마지막으로 C 코드에서 GPU 추론을 사용하려면
TFLiteSettings
:
#include "flatbuffers/flatbuffers.h"
#include "tensorflow/lite/acceleration/configuration/configuration_generated.h"
flatbuffers::FlatBufferBuilder fbb;
tflite::TFLiteSettingsBuilder builder(fbb);
const tflite::TFLiteSettings* tflite_settings =
flatbuffers::GetTemporaryPointer(fbb, builder.Finish());
const TfLiteOpaqueDelegatePlugin* pluginCApi = TfLiteGpuDelegatePluginCApi();
TfLiteOpaqueDelegate* gpu_delegate = pluginCApi->create(tflite_settings);
양자화 모델
Android GPU 위임 라이브러리는 기본적으로 양자화 모델을 지원합니다. 부적절한 콘텐츠 GPU 대리자와 함께 양자화 모델을 사용하려면 코드를 변경해야 합니다. 이 다음 섹션에서는 테스트 또는 배포를 위해 양자화 지원을 중지하는 방법을 설명합니다. 있습니다.
양자화 모델 지원 사용 중지
다음 코드는 양자화 모델에 대한 지원을 사용 중지하는 방법을 보여줍니다.
C++
TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default(); options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_NONE; auto* delegate = TfLiteGpuDelegateV2Create(options); if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
GPU 가속으로 양자화 모델을 실행하는 방법에 관한 자세한 내용은 GPU 위임 개요