Android için Hızlandırma Hizmeti (Beta)

Donanım hızlandırma için GPU'lar, NPU'lar veya DSP'ler gibi özel işlemcilerin kullanılması, çıkarım performansını (bazı durumlarda 10 kata kadar daha hızlı çıkarım) ve makine öğrenimi özellikli Android uygulamanızın kullanıcı deneyimini önemli ölçüde iyileştirebilir. Ancak, kullanıcılarınızın sahip olabileceği çeşitli donanım ve sürücüler göz önüne alındığında, her kullanıcının aygıtı için en uygun donanım hızlandırma yapılandırmasını seçmek zor olabilir. Ayrıca, bir cihazda yanlış yapılandırmanın etkinleştirilmesi, yüksek gecikme süresi veya bazı nadir durumlarda donanım uyumsuzluklarından kaynaklanan çalışma zamanı hataları veya doğruluk sorunları nedeniyle zayıf kullanıcı deneyimi oluşturabilir.

Android için Hızlandırma Hizmeti, belirli bir kullanıcı cihazı ve .tflite modeliniz için en uygun donanım hızlandırma yapılandırmasını seçmenize yardımcı olurken çalışma zamanı hatası veya doğruluk sorunları riskini en aza indirmenize yardımcı olan bir API'dir.

Hızlandırma Hizmeti, TensorFlow Lite modelinizle dahili çıkarım kıyaslamaları çalıştırarak kullanıcı cihazlarındaki farklı hızlandırma yapılandırmalarını değerlendirir. Bu test çalıştırmaları, modelinize bağlı olarak genellikle birkaç saniye içinde tamamlanır. Karşılaştırmaları her kullanıcı cihazında çıkarım süresinden önce bir kez çalıştırabilir, sonucu önbelleğe alabilir ve çıkarım sırasında kullanabilirsiniz. Bu kıyaslamalar süreç dışıdır; bu da uygulamanızın çökme riskini en aza indirir.

Modelinizi, veri örneklerinizi ve beklenen sonuçları ("altın" girişler ve çıkışlar) sağlayın ve Hızlandırma Hizmeti, size donanım önerileri sağlamak için dahili bir TFLite çıkarım kıyaslaması çalıştıracaktır.

görüntü

Hızlandırma Hizmeti, Android'in özel makine öğrenimi yığınının bir parçasıdır ve Google Play hizmetlerinde TensorFlow Lite ile birlikte çalışır.

Bağımlılıkları projenize ekleyin

Uygulamanızın build.gradle dosyasına aşağıdaki bağımlılıkları ekleyin:

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

Hızlandırma Hizmeti API'si, Google Play Hizmetlerinde TensorFlow Lite ile çalışır. Henüz Play Hizmetleri aracılığıyla sağlanan TensorFlow Lite çalışma zamanını kullanmıyorsanız, bağımlılıklarınızı güncellemeniz gerekecektir.

Hızlandırma Hizmeti API'si nasıl kullanılır?

Hızlandırma Hizmetini kullanmak için, modeliniz için değerlendirmek istediğiniz hızlandırma yapılandırmasını (örn. OpenGL ile GPU) oluşturarak başlayın. Ardından modelinizle, bazı örnek verilerle ve beklenen model çıktısıyla bir doğrulama yapılandırması oluşturun. Son olarak hem hızlandırma yapılandırmanızı hem de doğrulama yapılandırmanızı geçmek için validateConfig() öğesini çağırın.

görüntü

Hızlandırma yapılandırmaları oluşturun

Hızlandırma yapılandırmaları, yürütme süresi boyunca delegelere çevrilen donanım yapılandırmalarının temsilleridir. Hızlandırma Hizmeti daha sonra test çıkarımları gerçekleştirmek için bu yapılandırmaları dahili olarak kullanır.

Şu anda hızlandırma hizmeti, GpuAccelerationConfig ve CPU çıkarımı ( CpuAccelerationConfig ile) ile GPU yapılandırmalarını (yürütme süresi sırasında GPU temsilcisine dönüştürülür) değerlendirmenize olanak tanır. Gelecekte diğer donanımlara erişmek için daha fazla temsilciyi desteklemek için çalışıyoruz.

GPU hızlandırma yapılandırması

Aşağıdaki gibi bir GPU hızlandırma yapılandırması oluşturun:

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

Modelinizin setEnableQuantizedInference() ile niceleme kullanıp kullanmadığını belirtmeniz gerekir.

CPU hızlandırma yapılandırması

CPU hızlandırmasını aşağıdaki gibi oluşturun:

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

CPU çıkarımını değerlendirmek için kullanmak istediğiniz iş parçacığı sayısını tanımlamak için setNumThreads() yöntemini kullanın.

Doğrulama yapılandırmaları oluşturun

Doğrulama yapılandırmaları, Hızlandırma Hizmetinin çıkarımları nasıl değerlendirmesini istediğinizi tanımlamanıza olanak tanır. Bunları geçmek için kullanacaksınız:

  • giriş örnekleri,
  • beklenen çıktılar,
  • doğruluk doğrulama mantığı.

Modelinizden iyi performans beklediğiniz girdi örneklerini ("altın" örnekler olarak da bilinir) sağladığınızdan emin olun.

CustomValidationConfig.Builder ile aşağıdaki gibi bir ValidationConfig oluşturun:

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

setBatchSize() ile altın örneklerin sayısını belirtin. setGoldenInputs() kullanarak altın numunelerinizin girişlerini iletin. setGoldenOutputs() ile iletilen girdi için beklenen çıktıyı sağlayın.

setInferenceTimeoutMillis() (varsayılan olarak 5000 ms) ile bir maksimum çıkarım süresi tanımlayabilirsiniz. Çıkarım, tanımladığınız süreden uzun sürerse yapılandırma reddedilir.

İsteğe bağlı olarak, aşağıdaki gibi özel bir AccuracyValidator da oluşturabilirsiniz:

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;

   }
}

Kullanım durumunuz için çalışan bir doğrulama mantığı tanımladığınızdan emin olun.

Doğrulama verileri modelinize zaten katıştırılmışsa EmbeddedValidationConfig kullanabileceğinizi unutmayın.

Doğrulama çıktıları oluştur

Altın çıktılar isteğe bağlıdır ve altın girdiler sağladığınız sürece Hızlandırma Hizmeti altın çıktıları dahili olarak oluşturabilir. Bu altın çıktıları oluşturmak için kullanılan hızlandırma yapılandırmasını setGoldenConfig() öğesini çağırarak da tanımlayabilirsiniz:

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

Hızlandırma yapılandırmasını doğrulayın

Bir hızlandırma yapılandırması ve bir doğrulama yapılandırması oluşturduktan sonra, bunları modeliniz için değerlendirebilirsiniz.

TensorFlow Lite with Play Services çalışma zamanının düzgün bir şekilde başlatıldığından ve aşağıdakileri çalıştırarak GPU temsilcisinin cihaz için kullanılabilir olduğundan emin olun:

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

AccelerationService.create() öğesini çağırarak AccelerationService örneğini oluşturun.

Ardından, validateConfig() öğesini çağırarak modeliniz için hızlandırma yapılandırmanızı doğrulayabilirsiniz:

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

Ayrıca validateConfigs() öğesini çağırarak ve bir Iterable<AccelerationConfig> nesnesini parametre olarak ileterek birden çok yapılandırmayı doğrulayabilirsiniz.

validateConfig() eşzamansız görevleri etkinleştiren Google Play hizmetleri Task Api'den bir Task< ValidatedAccelerationConfigResult > döndürür.
Doğrulama çağrısının sonucunu almak için bir addOnSuccessListener() geri araması ekleyin.

Tercümanınızda doğrulanmış yapılandırmayı kullanın

Geri aramada döndürülen ValidatedAccelerationConfigResult öğesinin geçerli olup olmadığını interpreterOptions.setAccelerationConfig() ettikten sonra, doğrulanmış yapılandırmayı yorumlayıcınız için bir hızlandırma yapılandırması olarak ayarlayabilirsiniz.

Yapılandırma önbelleğe alma

Modeliniz için en uygun hızlanma yapılandırmasının cihazda değişmesi olası değildir. Bu nedenle, tatmin edici bir hızlandırma yapılandırması aldığınızda, bunu cihazda saklamalı ve uygulamanızın onu alıp sonraki oturumlarda başka bir doğrulama çalıştırmak yerine InterpreterOptions oluşturmak için kullanmasına izin vermelisiniz. ValidatedAccelerationConfigResult içindeki serialize() ve deserialize() yöntemleri, depolama ve alma sürecini kolaylaştırır.

Örnek uygulama

Hızlandırma Hizmetinin yerinde entegrasyonunu incelemek için örnek uygulamaya göz atın.

sınırlamalar

Hızlandırma Hizmeti şu anda aşağıdaki sınırlamalara sahiptir:

  • Şu anda yalnızca CPU ve GPU hızlandırma yapılandırmaları desteklenmektedir,
  • Yalnızca Google Play hizmetlerinde TensorFlow Lite'ı destekler ve TensorFlow Lite'ın paket sürümünü kullanıyorsanız bunu kullanamazsınız.
  • BaseOptions ValidatedAccelerationConfigResult nesnesiyle doğrudan başlatamayacağınız için TensorFlow Lite Görev Kitaplığını desteklemez.
  • Acceleration Service SDK yalnızca API düzeyi 22 ve üzerini destekler.

Uyarılar

Özellikle bu SDK'yı üretimde kullanmayı planlıyorsanız, lütfen aşağıdaki uyarıları dikkatlice inceleyin:

  • Beta'dan çıkmadan ve Hızlandırma Hizmeti API'si için kararlı sürümü yayınlamadan önce, mevcut Beta'dan bazı farklılıkları olabilecek yeni bir SDK yayınlayacağız. Hızlandırma Hizmetini kullanmaya devam etmek için bu yeni SDK'ya geçmeniz ve uygulamanıza zamanında bir güncelleme göndermeniz gerekecek. Bunu yapmamak, Beta SDK'nın bir süre sonra artık Google Play hizmetleriyle uyumlu olmayabileceği için kesintilere neden olabilir.

  • Acceleration Service API içindeki belirli bir özelliğin veya bir bütün olarak API'nin genel kullanıma sunulacağının garantisi yoktur. Süresiz olarak Beta'da kalabilir, kapatılabilir veya belirli geliştirici kitleleri için tasarlanmış paketler halinde diğer özelliklerle birleştirilebilir. Acceleration Service API'deki bazı özellikler veya tüm API'nin kendisi sonunda genel olarak kullanılabilir hale gelebilir, ancak bunun için sabit bir program yoktur.

Şartlar ve gizlilik

Kullanım Şartları

Hızlandırma Hizmeti API'lerinin kullanımı , Google API Hizmet Şartları'na tabidir.
Ek olarak, Hızlandırma Hizmeti API'leri şu anda beta sürümündedir ve bu nedenle, bunu kullanarak yukarıdaki Uyarılar bölümünde belirtilen olası sorunları kabul etmiş ve Hızlandırma Hizmetinin her zaman belirtildiği gibi çalışmayabileceğini kabul etmiş olursunuz.

Mahremiyet

Hızlandırma Hizmeti API'lerini kullandığınızda, giriş verilerinin (ör. resimler, video, metin) işlenmesi tamamen cihazda gerçekleşir ve Hızlandırma Hizmeti bu verileri Google sunucularına göndermez . Sonuç olarak, cihazdan çıkmaması gereken girdi verilerini işlemek için API'lerimizi kullanabilirsiniz.
Hızlandırma Hizmeti API'leri, hata düzeltmeleri, güncellenmiş modeller ve donanım hızlandırıcı uyumluluk bilgileri gibi şeyleri almak için zaman zaman Google sunucularıyla iletişim kurabilir. Hızlandırma Hizmeti API'leri, uygulamanızdaki API'lerin performansı ve kullanımına ilişkin ölçümleri de Google'a gönderir. Google bu metrik verilerini, Gizlilik Politikamızda daha ayrıntılı olarak açıklandığı gibi, performansı ölçmek, API'lerde hata ayıklamak, sürdürmek ve iyileştirmek ve kötüye kullanım veya kötüye kullanımı tespit etmek için kullanır.
Uygulamanızın kullanıcılarını, Google'ın Hızlandırma Hizmeti metrik verilerini yürürlükteki yasaların gerektirdiği şekilde işlemesi hakkında bilgilendirmekten siz sorumlusunuz.
Topladığımız veriler aşağıdakileri içerir:

  • Cihaz bilgileri (üretici, model, işletim sistemi sürümü ve yapısı gibi) ve mevcut makine öğrenimi donanım hızlandırıcıları (GPU ve DSP). Teşhis ve kullanım analitiği için kullanılır.
  • Uygulama bilgileri (paket adı / paket kimliği, uygulama sürümü). Teşhis ve kullanım analitiği için kullanılır.
  • API yapılandırması (görüntü formatı ve çözünürlük gibi). Teşhis ve kullanım analitiği için kullanılır.
  • Olay türü (başlatma, indirme modeli, güncelleme, çalıştırma, algılama gibi). Teşhis ve kullanım analitiği için kullanılır.
  • Hata kodları. Teşhis için kullanılır.
  • Performans metrikleri. Teşhis için kullanılır.
  • Bir kullanıcıyı veya fiziksel cihazı benzersiz şekilde tanımlamayan kurulum başına tanımlayıcılar. Uzaktan yapılandırma ve kullanım analitiğinin çalıştırılması için kullanılır.
  • Ağ isteği gönderen IP adresleri. Uzaktan yapılandırma teşhisi için kullanılır. Toplanan IP adresleri geçici olarak saklanır.

Destek ve geri bildirim

TensorFlow Sorun İzleyici aracılığıyla geri bildirimde bulunabilir ve destek alabilirsiniz. Lütfen Google Play hizmetlerinde TensorFlow Lite için sorun şablonunu kullanarak sorunları ve destek isteklerini bildirin.