Android용 가속 서비스(베타)

하드웨어 가속을 위해 GPU, NPU 또는 DSP와 같은 특수 프로세서를 사용하면 추론 성능(경우에 따라 최대 10배 더 빠른 추론)과 ML 지원 Android 애플리케이션의 사용자 경험을 크게 향상시킬 수 있습니다. 그러나 사용자가 가지고 있는 다양한 하드웨어 및 드라이버를 고려할 때 각 사용자 장치에 대한 최적의 하드웨어 가속 구성을 선택하는 것은 어려울 수 있습니다. 또한 장치에서 잘못된 구성을 활성화하면 대기 시간이 길어지거나 드물지만 하드웨어 비호환성으로 인한 런타임 오류 또는 정확도 문제로 인해 사용자 경험이 저하될 수 있습니다.

Acceleration Service for Android는 지정된 사용자 장치 및 .tflite 모델에 대한 최적의 하드웨어 가속 구성을 선택하는 동시에 런타임 오류 또는 정확도 문제의 위험을 최소화하는 데 도움이 되는 API입니다.

Acceleration Service는 TensorFlow Lite 모델로 내부 추론 벤치마크를 실행하여 사용자 장치에서 다양한 가속 구성을 평가합니다. 이러한 테스트 실행은 모델에 따라 일반적으로 몇 초 안에 완료됩니다. 추론 시간 전에 모든 사용자 장치에서 벤치마크를 한 번 실행하고 결과를 캐시하고 추론 중에 사용할 수 있습니다. 이러한 벤치마크는 out-of-process로 실행됩니다. 앱 충돌 위험을 최소화합니다.

모델, 데이터 샘플 및 예상 결과("골든" 입력 및 출력)를 제공하면 Acceleration Service가 내부 TFLite 추론 벤치마크를 실행하여 하드웨어 권장 사항을 제공합니다.

영상

가속 서비스는 Android 맞춤 ML 스택의 일부이며 Google Play 서비스의 TensorFlow Lite와 함께 작동합니다.

프로젝트에 종속성 추가

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

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

가속 서비스 API는 Google Play 서비스의 TensorFlow Lite 와 함께 작동합니다. Play 서비스를 통해 제공되는 TensorFlow Lite 런타임을 아직 사용하지 않는 경우 종속 항목을 업데이트해야 합니다.

가속 서비스 API를 사용하는 방법

가속 서비스를 사용하려면 모델(예: OpenGL이 있는 GPU)에 대해 평가하려는 가속 구성을 생성하여 시작합니다. 그런 다음 모델, 일부 샘플 데이터 및 예상되는 모델 출력으로 유효성 검사 구성을 만듭니다. 마지막으로 가속 구성과 유효성 검사 구성을 모두 전달할 때 validateConfig() 호출합니다.

영상

가속 구성 만들기

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

현재 가속 서비스를 사용하면 GpuAccelerationConfig 및 CPU 추론( CpuAccelerationConfig 사용)을 사용하여 GPU 구성(실행 시간 동안 GPU 대리자로 변환됨)을 평가할 수 있습니다. 우리는 앞으로 더 많은 대리인이 다른 하드웨어에 액세스할 수 있도록 지원하기 위해 노력하고 있습니다.

GPU 가속 구성

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

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

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

CPU 가속 구성

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

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

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

유효성 검사 구성 만들기

유효성 검사 구성을 사용하면 가속 서비스가 추론을 평가하는 방법을 정의할 수 있습니다. 다음을 통과하는 데 사용할 것입니다.

  • 입력 샘플,
  • 예상 출력,
  • 정확도 검증 논리.

모델의 우수한 성능을 기대하는 입력 샘플("골든" 샘플이라고도 함)을 제공해야 합니다.

다음과 같이 CustomValidationConfig.Builder 사용하여 ValidationConfig 만듭니다.

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();

가속 구성 유효성 검사

가속 구성 및 유효성 검사 구성을 만든 후에는 모델에 대해 평가할 수 있습니다.

다음을 실행하여 TensorFlow Lite with Play Services 런타임이 제대로 초기화되고 장치에서 GPU 대리자를 사용할 수 있는지 확인하십시오.

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

AccelerationService.create() 호출하여 AccelerationService 인스턴스화합니다.

그런 다음 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() 비동기 작업을 가능하게 하는 Google Play 서비스 Task Api 에서 Task< ValidatedAccelerationConfigResult > 를 반환합니다.
유효성 검사 호출에서 결과를 얻으려면 addOnSuccessListener() 콜백을 추가합니다.

해석기에서 검증된 구성 사용

콜백에 반환된 ValidatedAccelerationConfigResult 유효한지 확인한 후 interpreterOptions.setAccelerationConfig() 호출하는 인터프리터에 대한 가속 구성으로 검증된 구성을 설정할 수 있습니다.

구성 캐싱

모델에 대한 최적의 가속 구성은 기기에서 변경될 가능성이 없습니다. 따라서 만족스러운 가속 구성을 수신한 후에는 장치에 저장하고 응용 프로그램이 이를 검색하여 다른 유효성 검사를 실행하는 대신 다음 세션 중에 InterpreterOptions 만드는 데 사용하도록 해야 합니다. ValidatedAccelerationConfigResultserialize()deserialize() 메서드는 저장 및 검색 프로세스를 더 쉽게 만듭니다.

샘플 애플리케이션

가속 서비스의 현장 통합을 검토하려면 샘플 앱 을 살펴보십시오.

제한 사항

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

  • 현재 CPU 및 GPU 가속 구성만 지원되며,
  • Google Play 서비스에서만 TensorFlow Lite를 지원하며 번들 버전의 TensorFlow Lite를 사용하는 경우 사용할 수 없습니다.
  • ValidatedAccelerationConfigResult 개체로 BaseOptions 직접 초기화할 수 없으므로 TensorFlow Lite 작업 라이브러리를 지원하지 않습니다.
  • 가속 서비스 SDK는 API 레벨 22 이상만 지원합니다.

주의 사항

특히 프로덕션에서 이 SDK를 사용할 계획이라면 다음 주의 사항을 주의 깊게 검토하십시오.

  • 베타를 종료하고 Acceleration Service API의 안정적인 버전을 출시하기 전에 현재 베타 버전과 약간 다를 수 있는 새 SDK를 게시할 예정입니다. Acceleration Service를 계속 사용하려면 이 새로운 SDK로 마이그레이션하고 적시에 앱에 업데이트를 푸시해야 합니다. 그렇게 하지 않으면 베타 SDK가 일정 시간이 지나면 더 이상 Google Play 서비스와 호환되지 않을 수 있으므로 중단될 수 있습니다.

  • Acceleration Service API 내의 특정 기능 또는 API 전체가 일반적으로 사용 가능하게 될 것이라는 보장은 없습니다. 무기한 베타 상태로 남아 있거나 종료되거나 특정 개발자 대상을 위해 설계된 패키지로 다른 기능과 결합될 수 있습니다. Acceleration Service API 또는 전체 API 자체의 일부 기능은 결국 일반 공급될 수 있지만 이에 대한 고정된 일정은 없습니다.

약관 및 개인정보 보호

서비스 약관

가속 서비스 API 사용에는 Google API 서비스 약관이 적용됩니다.
또한 가속 서비스 API는 현재 베타 버전이므로 이를 사용함으로써 위의 주의 사항 섹션에 요약된 잠재적인 문제를 인정하고 가속 서비스가 항상 지정된 대로 작동하지 않을 수 있음을 인정하는 것입니다.

은둔

Acceleration Service API를 사용하면 입력 데이터(예: 이미지, 동영상, 텍스트) 처리가 완전히 기기에서 이루어지며 Acceleration Service는 해당 데이터를 Google 서버로 보내지 않습니다 . 결과적으로 장치를 떠나서는 안 되는 입력 데이터를 처리하기 위해 API를 사용할 수 있습니다.
Acceleration Service API는 버그 수정, 업데이트된 모델, 하드웨어 가속기 호환성 정보 등을 받기 위해 때때로 Google 서버에 접속할 수 있습니다. 또한 Acceleration Service API는 앱에 있는 API의 성능 및 활용도에 대한 측정항목을 Google에 보냅니다. Google은 이 측정항목 데이터를 사용하여 성능을 측정하고 API를 디버그, 유지 관리 및 개선하고 개인 정보 보호정책 에 자세히 설명된 대로 오용 또는 남용을 감지합니다.
귀하는 해당 법률에서 요구하는 대로 Google의 가속 서비스 측정항목 데이터 처리에 대해 앱 사용자에게 알릴 책임이 있습니다.
당사가 수집하는 데이터에는 다음이 포함됩니다.

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

지원 및 피드백

TensorFlow Issue Tracker를 통해 피드백을 제공하고 지원을 받을 수 있습니다. Google Play 서비스의 TensorFlow Lite용 문제 템플릿을 사용하여 문제를 보고하고 요청을 지원하세요.