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 ML özellikli Android uygulamanızın kullanıcı deneyimini önemli ölçüde artırabilir. Ancak kullanıcılarınızın sahip olabileceği donanım ve sürücülerin çeşitliliği göz önüne alındığında, her kullanıcının cihazı için en uygun donanım hızlandırma yapılandırmasını seçmek zor olabilir. Ayrıca, bir cihazda yanlış konfigürasyonun etkinleştirilmesi, yüksek gecikme veya bazı nadir durumlarda donanım uyumsuzluklarından kaynaklanan çalışma zamanı hataları veya doğruluk sorunları nedeniyle zayıf kullanıcı deneyimine neden olabilir.

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 aynı zamanda ç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ı çıkarım süresinden önce her kullanıcı cihazında bir kez çalıştırabilir, sonucu önbelleğe alabilir ve çıkarım sırasında kullanabilirsiniz. Bu kıyaslamalar süreç dışı çalıştırılı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; Hızlandırma Hizmeti, size donanım önerileri sağlamak için dahili bir TFLite çıkarım kıyaslaması çalıştıracaktır.

resim

Hızlandırma Hizmeti, Android'in özel ML yığınının bir parçasıdır ve Google Play hizmetlerinde TensorFlow Lite ile ç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'li 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çerken validateConfig() öğesini çağırın.

resim

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

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

Şu anda hızlandırma hizmeti, GPU yapılandırmalarını (yürütme süresi sırasında GPU temsilcisine dönüştürülen) GpuAccelerationConfig ve CPU çıkarımıyla ( CpuAccelerationConfig ile) değerlendirmenize olanak tanır. Gelecekte daha fazla delegenin diğer donanımlara erişmesini 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ığı.

Modelinizin iyi bir performans göstermesini 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. Altın örneklerinizin girişlerini setGoldenInputs() kullanarak iletin. setGoldenOutputs() ile iletilen giriş için beklenen çıktıyı sağlayın.

setInferenceTimeoutMillis() (varsayılan olarak 5000 ms) ile maksimum çıkarım süresini 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 durumunuza uygun bir doğrulama mantığı tanımladığınızdan emin olun.

Doğrulama verileri zaten modelinize 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 doğrulama yapılandırması oluşturduktan sonra bunları modeliniz için değerlendirebilirsiniz.

Aşağıdakileri çalıştırarak TensorFlow Lite with Play Services çalışma zamanının düzgün şekilde başlatıldığından ve 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.

Daha sonra validateConfig() öğesini çağırarak modelinize ilişkin 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);
});

validateConfigs() öğesini çağırıp parametre olarak bir Iterable<AccelerationConfig> nesnesini ileterek de birden çok yapılandırmayı doğrulayabilirsiniz.

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

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

Geri çağırmada döndürülen ValidatedAccelerationConfigResult geçerli olup olmadığını kontrol ettikten sonra, doğrulanmış yapılandırmayı, yorumlayıcınız için interpreterOptions.setAccelerationConfig() öğesini çağıran 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. Dolayısıyla, tatmin edici bir hızlandırma yapılandırması aldığınızda, bunu cihazda saklamalı ve uygulamanızın onu almasına izin vermelisiniz ve başka bir doğrulama çalıştırmak yerine sonraki oturumlarda InterpreterOptions oluşturmak için kullanmalısınız. ValidatedAccelerationConfigResult serialize() ve deserialize() yöntemleri, depolama ve alma işlemini 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 Hizmetinin mevcut aşağıdaki sınırlamaları vardır:

  • Ş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 paketli 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.
  • Hızlandırma Hizmeti SDK'sı 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'sinin kararlı sürümünü yayınlamadan önce, mevcut Beta'dan bazı farklılıklar gösterebilecek 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 gerekecektir. Bunu yapmamak, Beta SDK'nın bir süre sonra Google Play hizmetleriyle artık uyumlu olmayabileceğinden kesintilere neden olabilir.

  • Hızlandırma Hizmeti API'sindeki veya bir bütün olarak API'deki belirli bir özelliğin genel kullanıma sunulacağına dair bir garanti yoktur. Süresiz olarak Beta'da kalabilir, kapatılabilir veya diğer özelliklerle bir araya getirilerek belirli geliştirici kitlelerine yönelik tasarlanmış paketler oluşturulabilir. Hızlandırma Hizmeti API'sindeki bazı özellikler veya API'nin tamamı zamanla genel kullanıma sunulabilir, 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 aşamasındadır 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 performans göstermeyebileceğ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 giriş 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 bilgileri almak için zaman zaman Google sunucularıyla iletişim kurabilir. Hızlandırma Hizmeti API'leri aynı zamanda 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, hata ayıklamak, API'lerin bakımını yapmak ve geliştirmek ve kötüye kullanım veya kötüye kullanımı tespit etmek için kullanır.
Geçerli yasaların gerektirdiği şekilde Google'ın Hızlandırma Hizmeti metrik verilerini işlemesi konusunda uygulamanızın kullanıcılarını bilgilendirmek sizin sorumluluğunuzdadır.
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 ML 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, modeli indirme, 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 ölçümleri. 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 konfigürasyon ve kullanım analitiğinin çalıştırılması için kullanılır.
  • Ağ isteği gönderenin 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 Takibi aracılığıyla geri bildirimde bulunabilir ve destek alabilirsiniz. Lütfen Google Play hizmetlerinde TensorFlow Lite sorun şablonunu kullanarak sorunları ve destek isteklerini bildirin.