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

Donanım için GPU'lar, NPU'lar veya DSP'ler gibi özel işlemcilerin kullanımı hızlanma, çıkarım performansını önemli ölçüde iyileştirebilir (10 kata kadar daha hızlı çıkarımını görebilirsiniz) ve makine öğrenimi özellikli Android'inizin kullanıcı deneyimini bir uygulamadır. Ancak, kullanıcılarınızın sahip olabileceği donanım ve sürücülerin çeşitliliği her kullanıcının işlevi için en uygun donanım hızlandırma yapılandırmasını seçmek zorlayıcı olabiliyor. Ayrıca, yüksek gecikme nedeniyle kötü bir kullanıcı deneyimi sunabilir, durumları, çalışma zamanı hataları veya donanım uyumsuzluklarından kaynaklanan doğruluk sorunları gibi.

Android için Acceleration Service, için en uygun donanım hızlandırma yapılandırmasını ve .tflite modeli kullanarak çalışma zamanı hatası veya doğruluk sorunları riskini en aza indirir.

Acceleration Service, kullanıcı cihazında farklı hızlandırma yapılandırmalarını değerlendirir LiteRT'inizle dahili çıkarım karşılaştırmaları çalıştırarak cihazlar modeli. Bu test çalıştırmaları, bağlı olduğunuz işletme birimine bağlı olarak genellikle birkaç saniye içinde modeli. Çıkarım yapmadan önce karşılaştırmaları her kullanıcı cihazında bir kez çalıştırabilirsiniz sonucu önbelleğe alır ve çıkarım sırasında kullanır. Bu karşılaştırmalar Süreç dışı, Bu da uygulamanızın kilitlenme riskini en aza indirir.

Modelinizi, veri örneklerini ve beklenen sonuçları ("altın" girişler ve çıkışları) ve Acceleration Service, dahili bir TFLite çıkarımı çalıştırır karşılaştırma özelliğini kullanabilirsiniz.

resim

Acceleration Service, Android'in özel makine öğrenimi yığınının bir parçasıdır ve Google Play Hizmetleri'nde LiteRT

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"

Acceleration Service API, Google Play'de LiteRT ile çalışır Hizmetler. Şu durumda: henüz Play Hizmetleri aracılığıyla sağlanan LiteRT çalışma zamanını kullanmıyorsanız dependencies güncellemeniz gerekir.

Acceleration Service API'yi kullanma

Hızlandırma Hizmeti'ni kullanmak için öncelikle hızlandırma yapılandırmasını oluşturun modeliniz için değerlendirmek istiyorsunuz (ör.OpenGL'li GPU). Daha sonra, yeni bir doğrulama yapılandırmasını modelle, bazı örnek verileri ve model çıkışı. Son olarak,validateConfig() hızlandırma yapılandırması ve doğrulama yapılandırması.

resim

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

Hızlandırma yapılandırmaları, donanım yapılandırmalarını temsil eder Bunlar yürütme süresinde delegelere dönüştürülür. Ardından Hızlandırma Hizmeti bu yapılandırmaları dahili olarak kullanır kullanarak çıkarımları yapabilirsiniz.

Şu anda hızlandırma hizmeti, GPU'yu değerlendirmenize olanak tanır yapılandırmaları (yürütme süresi sırasında GPU yetkilendirmesine dönüştürülür) şununla: GpuAccelerationConfig ve CPU çıkarımı ( CpuAccelerationConfig). Diğer donanımlara erişim konusunda yetki verilmiş kullanıcı sayısını desteklemek için çalışıyoruz. duymuş olabilirsiniz.

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

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

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

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

Şunu kullanın: setNumThreads() CPU'yu değerlendirmek için kullanmak istediğiniz iş parçacığı sayısını tanımlamak üzere çıkarım.

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

Doğrulama yapılandırmaları, Hızlandırmanın nasıl etkinleştirileceğini tanımlamanıza olanak tanır. Çıkarımları değerlendirme hizmeti. Bu kartları, şu durumlarda kullanabilirsiniz:

  • giriş örnekleri
  • ve beklenen çıkışları
  • mantığıyla başlayalım.

İyi performans beklediğiniz giriş örnekleri sağladığınızdan emin olun. ("altın" örnekler olarak da bilinir).

Bir metin oluştur: ValidationConfig şununla: CustomValidationConfig.Builder şu şekildedir:

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

Altın örneklem sayısını belirtin setBatchSize(). Altın örneklemlerinizin girişlerini setGoldenInputs(). Şununla aktarılan giriş için beklenen çıkışı sağlayın: setGoldenOutputs().

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

İsteğe bağlı olarak, özel bir AccuracyValidator da oluşturabilirsiniz. şu şekildedir:

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 alanınız için uygun bir doğrulama mantığı tanımladığınızdan emin olun.

Doğrulama verileri modelinize zaten yerleştirilmişse doğrulama verilerini EmbeddedValidationConfig.

Doğrulama çıkışları oluşturma

Altın çıkışlar isteğe bağlıdır ve altın giriş sağladığınız sürece Acceleration Service, altın çıktıları dahili olarak oluşturabilir. Ayrıca transkriptinizi bu altın çıktıları oluşturmak için kullanılan ivme yapılandırmasını setGoldenConfig() aranıyor:

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

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

Bir hızlandırma yapılandırması ve doğrulama yapılandırması oluşturduktan sonra ne kadar iyi değerlendirebileceğinizi öğreneceksiniz.

Play Hizmetleri ile LiteRT çalışma zamanının düzgün olduğundan emin olun başlatıldığını ve GPU yetkilendirmesinin cihaz için şu şekilde kullanılabilir olduğunu doğrulayın:

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

AccelerationService'ı örneklendirme AccelerationService.create() numaralı telefonu arayarak.

Ardından, şunu çağırarak modeliniz için hızlandırma yapılandırmanızı doğrulayabilirsiniz: 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);
});

Ayrıca, birden çok yapılandırmayı doğrulamak için validateConfigs() ve parametre olarak bir Iterable<AccelerationConfig> nesnesinin iletilmesini sağlar.

validateConfig()şu değeri döndürür: Task<ValidatedAccelerationConfigResult> Google Play Hizmetleri'nden Görev API eş zamanlı olarak yürütülür.
. Doğrulama çağrısının sonucunu almak için addOnSuccessListener() geri arama.

Çevirmeninizde doğrulanmış yapılandırmayı kullanın

ValidatedAccelerationConfigResult öğesinin geri çağırma geçerliyse doğrulanmış yapılandırmayı bir hızlandırma yapılandırması olarak ayarlayabilirsiniz interpreterOptions.setAccelerationConfig() arayan çevirmeniniz için.

Yapılandırmayı önbelleğe alma

Modeliniz için optimum hızlanma yapılandırmasının için geçerlidir. Dolayısıyla, tatmin edici bir ivme yapılandırması aldığınızda, saklamalı ve uygulamanızın bu verileri almasına ve şu oturumlarda InterpreterOptions oluşturun: başka bir doğrulama işlemi gerçekleştirir. Şuradaki serialize() ve deserialize() yöntemleri: Depolama ve alma işlemini ValidatedAccelerationConfigResult yapar daha kolay olur.

Örnek uygulama

Acceleration Service'in yerinde entegrasyonunu incelemek için şuraya bakın: örnek uygulama.

Sınırlamalar

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

  • Şu anda yalnızca CPU ve GPU hızlandırma yapılandırmaları desteklenmektedir.
  • Google Play Hizmetleri'nde yalnızca LiteRT'yi destekler ve şu anda LiteRT'in paket halinde sunulan sürümünü kullanıyorsanız bu sürümü kullanın.
  • Acceleration Service SDK'sı yalnızca API düzeyi 22 ve üstünü destekler.

Uyarılar

Özellikle 2023'ten 2023'e kadar uzanmayı düşündüğünüzde, şu SDK'yı üretimde kullanmak için:

  • Beta'dan çıkmadan ve Acceleration Service API'de ise bazı özellikler içeren yeni bir SDK yayınlayacağız. Beta sürümünden farklar var. Acceleration Service için bu yeni SDK'ya geçmeniz ve zamanında güncellemeniz gerekir. Aksi takdirde, Beta SDK, şu tarihten sonra Google Play Hizmetleri ile uyumlu olmayabilir: biraz zaman alabilir.

  • Hızlandırma programındaki belirli bir özelliğin, Service API veya bir bütün olarak API genel kullanıma sunulacaktır. Google süresiz olarak Beta sürümünde kalabilir, kapatılabilir veya özel geliştirici kitleleri için tasarlanmış paketler hâlinde sunulmaktadır. Biraz API'nin kendisinin veya Acceleration Service API'nin kendisininki bir süre sonra genel kullanıma sunulmasına rağmen bu.

Şartlar ve gizlilik

Hizmet Şartları

Acceleration Service API'lerinin kullanımı, Google API'leri Hizmet.
. Ayrıca Acceleration Service API'leri şu anda beta sürümündedir. ve bu şekilde, bu belgeyi kullanarak Google Yardım Forumu'nda belirtilen olası sorunları Yukarıdaki Uyarılar bölümüne gidin ve Hızlandırma Hizmeti'nin her zaman belirtildiği gibi performans gösterir.

Gizlilik

Acceleration Service API'lerini kullandığınızda giriş verilerinin (ör. resimler, video, metin) tamamen cihazda gerçekleşir ve Hızlandırma Hizmeti bu verileri Google sunucularına göndermez. Bu nedenle, API'lerimizi kullanabilirsiniz. giriş verilerini işlemek için kullanılabilir.
. Acceleration Service API'leri zaman zaman Google sunucularıyla iletişim kurabilir. hata düzeltmeleri, güncellenmiş modeller ve donanım hızlandırıcı gibi şeyler almak için uyumluluk bilgilerinden de faydalanabilirsiniz. Acceleration Service API'leri ayrıca uygulamanızdaki API'lerin performansını ve kullanımını Google'a bildirin. Google performans ölçümü, hata ayıklama, bakım ve iyileştirme yapmak için ve kötüye kullanımı tespit etme ile ilgili bu bilgilere Gizlilik Politika.
. Kullanıcıları uygulamanızı Google'ın işleme süreci hakkında bilgilendirmek sizin sorumluluğunuzdadır Acceleration Service metrik verilerinin, yürürlükteki yasaların gerektirdiği şekilde.
. Topladığımız veriler arasında şunlar bulunur:

  • Cihaz bilgileri (üretici, model, OS sürümü ve derleme gibi) ve kullanılabilir makine öğrenimi donanım hızlandırıcıları (GPU ve DSP). Teşhis ve ölçüm için kullanılır Analytics'ten yararlanın.
  • Uygulama bilgileri (paket adı / paket kimliği, uygulama sürümü). Kullanım alanı teşhis ve kullanım analizi.
  • API yapılandırması (resim biçimi ve çözünürlük gibi). Kullanım alanı teşhis ve kullanım analizi.
  • Etkinlik türü (ör. başlatma, indirme modeli, güncelleme, çalıştırma, algılama). Teşhis ve kullanım analizi 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 bir cihaz. Uzak yapılandırma ve kullanım işlemi için kullanılır Analytics'ten ulaşabilirsiniz.
  • Ağ isteğini gönderen IP adresleri. Uzak yapılandırma için kullanılır teşhis'e dokunun. Toplanan IP adresleri geçici olarak saklanır.

Destek ve geri bildirim

TensorFlow Sorun Takip Aracı üzerinden geri bildirimde bulunabilir ve destek alabilirsiniz. Lütfen sorunları ve destek isteklerini sorun şablonu Google Play Hizmetleri'nde LiteRT'i kullanabilirsiniz.