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.
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ı.
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.