Android용 가속 서비스 (베타)

하드웨어에 GPU, NPU 또는 DSP와 같은 특수 프로세서 사용 추론 성능을 크게 향상할 수 있습니다 (최대 10배 더 빠름). ML 지원 Android의 사용자 경험 애플리케이션입니다. 하지만 다양한 하드웨어와 드라이버를 고려할 때 사용자별로 최적의 하드웨어 가속 구성을 선택하여 어려운 문제일 수 있습니다 게다가 서버에서 잘못된 구성을 사용 설정하면 높은 지연 시간으로 인해 사용자 환경이 저하될 수 있으며, 정확성 문제를 해결할 수 있습니다.

Android용 Acceleration 서비스는 Android용 Acceleration Service를 선택하여 최적의 하드웨어 가속 구성을 .tflite 모델을 학습시키는 동시에 런타임 오류 또는 정확성 문제의 위험을 최소화합니다.

가속 서비스가 사용자에 대해 다른 가속 구성을 평가함 LiteRT로 내부 추론 벤치마크를 실행하여 기기 있습니다. 이러한 테스트는 일반적으로 몇 초 내에 완료되며 있습니다. 추론 전에 모든 사용자 기기에서 벤치마크를 한 번씩 실행할 수 있습니다. 결과를 캐시하고 추론 중에 사용할 수 있습니다. 이러한 벤치마크는 프로세스 외부 앱의 비정상 종료 위험을 최소화할 수 있습니다.

모델, 데이터 샘플, 예상 결과("최적의" 입력과 가속 서비스는 내부 TFLite 추론을 실행합니다. 벤치마크를 사용하여 하드웨어 권장사항을 제공합니다.

이미지

가속 서비스는 Android 커스텀 ML 스택의 일부이며 Google Play 서비스의 LiteRT

프로젝트에 종속 항목 추가

애플리케이션의 build.gradle 파일에 다음 종속 항목을 추가합니다.

implementation  "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"

Acceleration Service API는 Google Play의 LiteRT와 연동됩니다. '서비스'로 이동합니다. 만약 Play 서비스를 통해 제공되는 LiteRT 런타임을 아직 사용하지 않는다면 dependencies을 업데이트해야 합니다.

Acceleration Service API 사용 방법

Acceleration 서비스를 사용하려면 먼저 가속 구성을 만드세요. 평가하려는 모델 (예: OpenGL을 사용한 GPU)을 선택합니다. 그런 다음 모델, 일부 샘플 데이터, 예상되는 모델 출력을 생성합니다 마지막으로 validateConfig()를 호출하여 가속 구성 및 유효성 검사 구성이 포함됩니다.

이미지

가속 구성 만들기

가속 구성은 하드웨어 구성의 표현 이는 실행 시간 동안 대리자로 변환됩니다. 그러면 Acceleration Service는 이러한 구성을 내부적으로 사용합니다. 테스트 추론을 수행합니다.

현재 가속 서비스를 사용하면 GPU를 평가할 수 있습니다. 구성 (실행 시간 동안 GPU 대리자로 변환됨) 다음 코드로 교체합니다. GpuAccelerationConfig CPU 추론( CpuAccelerationConfig) Google은 더 많은 대리인이 있습니다.

GPU 가속 구성

다음과 같이 GPU 가속 구성을 만듭니다.

AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
  .setEnableQuantizedInference(false)
  .build();

모델이 양자화를 사용하는지 여부를 지정해야 합니다. setEnableQuantizedInference()

CPU 가속 구성

다음과 같이 CPU 가속을 만듭니다.

AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
  .setNumThreads(2)
  .build();

사용 setNumThreads() 드림 메서드를 사용하여 CPU를 평가하는 데 사용할 스레드 수를 정의합니다. 제공합니다.

검증 구성 만들기

검증 구성을 통해 목표 달성 가속화 방법 정의 가능 추론을 평가하는 서비스. 이를 사용하여 다음을 전달합니다.

  • 입력 샘플
  • 예상 출력,
  • 정확성 검사 로직

우수한 성능이 예상되는 입력 샘플을 제공해야 합니다. '골든' 샘플이라고도 합니다.

만들기 ValidationConfig 드림 다음 코드로 교체합니다. CustomValidationConfig.Builder 방법은 다음과 같습니다.

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenOutputs(outputBuffer)
   .setAccuracyValidator(new MyCustomAccuracyValidator())
   .build();

골든 샘플의 수 지정 setBatchSize() 다음을 사용하여 골든 샘플의 입력 전달 setGoldenInputs() 전달된 입력의 예상 출력 제공 setGoldenOutputs()

setInferenceTimeoutMillis()로 최대 추론 시간을 정의할 수 있습니다. (기본값: 5000ms). 추론이 정의된 시간보다 오래 걸리는 경우 구성이 거부됩니다

필요한 경우 맞춤 AccuracyValidator을 만들 수도 있습니다. 방법은 다음과 같습니다.

class MyCustomAccuracyValidator implements AccuracyValidator {
   boolean validate(
      BenchmarkResult benchmarkResult,
      ByteBuffer[] goldenOutput) {
        for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
            if (!goldenOutputs[i]
               .equals(benchmarkResult.actualOutput().get(i).getValue())) {
               return false;
            }
         }
         return true;

   }
}

사용 사례에 적합한 유효성 검사 로직을 정의해야 합니다.

검증 데이터가 이미 모델에 삽입된 경우 EmbeddedValidationConfig

검증 출력 생성

골든 출력은 선택 사항이며 골든 입력을 제공하는 한 가속 서비스는 내부적으로 골든 출력을 생성할 수 있습니다. 그 외에 이러한 골든 출력을 생성하는 데 사용되는 가속 구성을 setGoldenConfig() 호출:

ValidationConfig validationConfig = new CustomValidationConfig.Builder()
   .setBatchSize(5)
   .setGoldenInputs(inputs)
   .setGoldenConfig(customCpuAccelerationConfig)
   [...]
   .build();

가속 구성 검증

가속 구성과 유효성 검사 구성을 만든 후에는 평가하게 될 것입니다

LiteRT with Play 서비스 런타임이 제대로 작동하는지 확인 다음을 실행하여 기기에서 GPU 대리자를 사용할 수 있는지 확인합니다.

TfLiteGpu.isGpuDelegateAvailable(context)
   .onSuccessTask(gpuAvailable -> TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
        .setEnableGpuDelegateSupport(gpuAvailable)
        .build()
      )
   );

AccelerationService 인스턴스화 AccelerationService.create() 호출

그런 다음 다음을 호출하여 모델의 가속 구성을 검증할 수 있습니다. validateConfig():

InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
   .validateConfig(model, accelerationConfig, validationConfig)
   .addOnSuccessListener(validatedConfig -> {
      if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
         interpreterOptions.setAccelerationConfig(validatedConfig);
         interpreter = InterpreterApi.create(model, interpreterOptions);
});

다음을 호출하여 여러 구성의 유효성을 검사할 수도 있습니다. validateConfigs() 드림 Iterable<AccelerationConfig> 객체를 매개변수로 전달합니다.

validateConfig()다음을 반환합니다. Task<ValidatedAccelerationConfigResult> Google Play 서비스로부터 Task API를 통해 비동기 작업을 수행합니다
유효성 검사 호출에서 결과를 가져오려면 addOnSuccessListener() 있습니다.

인터프리터에서 검증된 구성 사용

ValidatedAccelerationConfigResult가 콜백이 유효하면 검증된 구성을 가속 구성으로 설정할 수 있습니다. interpreterOptions.setAccelerationConfig()에 전화를 거는 통역사가 있습니다.

구성 캐싱

모델에 대한 최적의 가속 구성은 다음 날짜에 변경될 가능성이 낮습니다. 있습니다. 따라서 만족스러운 가속 구성을 받으면 기기에 저장하고 애플리케이션이 이를 검색하여 사용하도록 해야 하며, 다음 세션에서 InterpreterOptions이(가) 생성되도록 하세요 다른 유효성 검사를 실행합니다 serialize()deserialize() 메서드 ValidatedAccelerationConfigResult: 저장 및 가져오기 프로세스 수행 더 쉽게 만들 수 있습니다

샘플 애플리케이션

Acceleration 서비스의 현장 통합을 검토하려면 샘플 앱을 참고하세요.

제한사항

현재 Acceleration 서비스에는 다음과 같은 제한사항이 있습니다.

  • 현재는 CPU 및 GPU 가속 구성만 지원됩니다.
  • Google Play 서비스에서만 LiteRT를 지원하며 LiteRT 번들 버전을 사용 중인 경우에 사용하세요.
  • Acceleration 서비스 SDK는 API 수준 22 이상만 지원합니다.

주의사항

다음 주의사항을 주의 깊게 검토하시기 바랍니다. 특히 프로덕션에서 이 SDK를 사용하려면 다음 단계를 따르세요.

  • 베타를 종료하고 SDK의 정식 버전을 출시하기 전 Acceleration Service API를 출시하는 과정에서 현재 베타 버전과의 차이점에 대해 살펴보겠습니다. 계속해서 Acceleration Service를 사용하려면 이 새 SDK로 마이그레이션하고 적시에 앱을 업데이트해야 합니다. 그렇게 하지 않으면 베타 SDK가 더 이상 Google Play 서비스와 호환되지 않을 수 있으며 있습니다.

  • Acceleration에 포함된 특정 기능이 사용된다고 보장할 수는 없습니다. 서비스 API 또는 API 전체는 정식 버전으로 출시될 예정입니다. 그것은 베타 버전으로 무기한 유지되거나 종료되거나 다른 서비스와 통합될 수 있음 기능을 특정 개발자 잠재고객을 위해 설계된 패키지로 통합합니다. 다소 유용함 Acceleration Service API 또는 전체 API 자체에서 기능을 사용할 수 있는 경우 결국 정식 버전으로 출시되기는 하지만, 있습니다.

약관 및 개인정보 보호

서비스 약관

Acceleration Service API 사용 시 Google API 이용약관 서비스를 제공합니다.
또한 Acceleration Service API는 현재 베타 버전입니다. 이를 통해 귀하는 위의 주의사항 섹션을 통해 Acceleration Service는 항상 지정된 대로 수행됩니다.

개인 정보 보호

Acceleration Service API를 사용하는 경우 입력 데이터 (예: 이미지, 동영상, 텍스트)이 온디바이스 내에서 완전히 이루어지며, 가속 서비스 해당 데이터를 Google 서버로 전송하지 않습니다. 따라서 Google의 API를 사용하여 입력 데이터를 처리하기 위한 용도로 사용됩니다.
Acceleration Service API는 버그 수정, 업데이트된 모델, 하드웨어 가속기 등을 받기 위해 호환성 정보를 확인할 수 있습니다. Acceleration Service API는 또한 Google에 앱 API의 성능과 활용에 관한 정보를 제공합니다 Google은 성능 측정, 디버그, 유지 관리, API 개선을 위한 측정항목 데이터 개인정보 보호 정책을 참조하세요.
개발자는 앱 사용자에게 Google의 데이터 처리 관련 정보를 제공할 책임이 있습니다. 관련 법률에서 요구하는 Acceleration 서비스 측정항목 데이터 수집
Google에서 수집하는 데이터에는 다음이 포함됩니다.

  • 기기 정보 (예: 제조업체, 모델, OS 버전, 빌드) ML 하드웨어 가속기 (GPU 및 DSP)를 사용하는 것이 좋습니다 진단 및 사용 분석
  • 앱 정보 (패키지 이름 / 번들 ID, 앱 버전) 용도 사용할 수 있습니다.
  • API 구성 (예: 이미지 형식 및 해상도) 용도 사용할 수 있습니다.
  • 이벤트 유형 (예: 초기화, 모델 다운로드, 업데이트, 실행, 감지) 진단 및 사용 분석에 사용됩니다.
  • 오류 코드. 진단에 사용됩니다.
  • 성능 측정항목 진단에 사용됩니다.
  • 사용자 또는 사용자를 고유하게 식별하지 않는 설치당 식별자 가상 머신을 실행하는 것입니다. 원격 구성 및 사용 운영에 사용됨 분석.
  • 네트워크 요청 발신자 IP 주소입니다. 원격 구성에 사용됨 있습니다. 수집된 IP 주소는 일시적으로 보관됩니다.

지원 및 의견

TensorFlow Issue Tracker를 통해 의견을 제공하고 지원을 받을 수 있습니다. 문제 및 지원 요청을 보고하려면 문제 템플릿 (Google Play 서비스의 LiteRT)