Penggunaan prosesor khusus seperti GPU, NPU, atau DSP untuk perangkat keras akselerasi dapat meningkatkan performa inferensi secara signifikan (hingga 10x lebih cepat inferensi dalam beberapa kasus) dan pengalaman pengguna aplikasi Android berkemampuan ML aplikasi. Namun, mengingat keragaman perangkat keras dan {i>driver<i} yang mungkin miliki, memilih konfigurasi akselerasi perangkat keras yang optimal untuk setiap perangkat Anda bukanlah hal yang mudah. Selain itu, mengaktifkan konfigurasi yang salah pada dapat menyebabkan pengalaman pengguna yang buruk karena latensi yang tinggi atau, dalam beberapa kasus, kesalahan {i>runtime<i}, atau masalah akurasi yang disebabkan oleh inkompatibilitas perangkat keras.
Acceleration Service for Android adalah API yang membantu Anda memilih
konfigurasi akselerasi perangkat keras yang optimal
untuk perangkat pengguna tertentu dan
model .tflite
, sekaligus meminimalkan risiko error runtime atau masalah akurasi.
Acceleration Service mengevaluasi berbagai konfigurasi akselerasi pada pengguna perangkat dengan menjalankan tolok ukur inferensi internal dengan LiteRT Anda model transformer. Pengujian ini biasanya selesai dalam beberapa detik, bergantung pada model transformer. Anda dapat menjalankan benchmark sekali pada setiap perangkat pengguna sebelum inferensi waktu, meng-cache hasilnya, dan menggunakannya selama inferensi. {i>Benchmark<i} ini dijalankan di luar proses; yang meminimalkan risiko error pada aplikasi Anda.
Berikan model Anda, sampel data, dan hasil yang diharapkan, {i>input<i} ("emas" dan output) dan Acceleration Service akan menjalankan inferensi TFLite internal untuk memberi Anda rekomendasi hardware.
Acceleration Service adalah bagian dari stack ML kustom Android dan berfungsi dengan LiteRT di layanan Google Play.
Menambahkan dependensi ke project
Tambahkan dependensi berikut ke file build.gradle aplikasi Anda:
implementation "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"
Acceleration Service API berfungsi dengan LiteRT di Google Play Layanan. Jika Anda belum menggunakan runtime LiteRT yang disediakan melalui Layanan Play, harus memperbarui dependencies Anda.
Cara menggunakan Acceleration Service API
Untuk menggunakan Acceleration Service, mulai dengan membuat konfigurasi akselerasi
yang ingin Anda evaluasi untuk modelnya (mis.GPU dengan OpenGL). Kemudian buat
konfigurasi validasi dengan model, beberapa data sampel, dan model
output model. Terakhir, panggil validateConfig()
dalam meneruskan
konfigurasi akselerasi, dan konfigurasi validasi.
Membuat konfigurasi akselerasi
Konfigurasi akselerasi adalah representasi dari konfigurasi hardware yang diterjemahkan menjadi delegasi selama waktu eksekusi. Acceleration Service kemudian akan menggunakan konfigurasi ini secara internal melakukan inferensi pengujian.
Saat ini, layanan akselerasi memungkinkan Anda mengevaluasi konfigurasi (dikonversi ke delegasi GPU selama waktu eksekusi) dengan GpuAccelerationConfig dan inferensi CPU (dengan CpuAccelerationConfig). Kami berupaya untuk mendukung lebih banyak delegasi guna mengakses perangkat keras lain di masa depan.
Konfigurasi akselerasi GPU
Buat konfigurasi akselerasi GPU sebagai berikut:
AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
.setEnableQuantizedInference(false)
.build();
Anda harus menentukan apakah model Anda menggunakan kuantisasi dengan
setEnableQuantizedInference()
Konfigurasi akselerasi CPU
Buat akselerasi CPU sebagai berikut:
AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
.setNumThreads(2)
.build();
Gunakan
setNumThreads()
untuk menentukan jumlah thread yang ingin Anda gunakan untuk mengevaluasi CPU
inferensi.
Membuat konfigurasi validasi
Konfigurasi validasi memungkinkan Anda menentukan cara Akselerasi yang diinginkan Layanan untuk mengevaluasi inferensi. Anda akan menggunakannya untuk meneruskan:
- sampel input,
- {i>output<i} yang diharapkan,
- logika validasi akurasi.
Pastikan untuk memberikan sampel input yang performanya menurut Anda bagus model Anda (juga dikenal sebagai sampel "emas").
Buat
ValidationConfig
dengan
CustomValidationConfig.Builder
sebagai berikut:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenOutputs(outputBuffer)
.setAccuracyValidator(new MyCustomAccuracyValidator())
.build();
Tentukan jumlah sampel emas
setBatchSize()
Teruskan input sampel emas Anda menggunakan
setGoldenInputs()
Berikan output yang diharapkan untuk input yang diteruskan dengan
setGoldenOutputs()
Anda dapat menentukan waktu inferensi maksimum dengan setInferenceTimeoutMillis()
(5.000 md secara default). Jika inferensi memakan waktu lebih lama
dari waktu yang Anda tentukan,
konfigurasi akan ditolak.
Jika ingin, Anda juga dapat membuat AccuracyValidator
kustom
sebagai berikut:
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;
}
}
Pastikan untuk menentukan logika validasi yang sesuai untuk kasus penggunaan Anda.
Perhatikan bahwa jika data validasi sudah disematkan dalam model, Anda bisa menggunakan
EmbeddedValidationConfig
Membuat output validasi
Output emas bersifat opsional dan selama Anda memberikan input emas,
Acceleration Service dapat menghasilkan output emas secara internal. Anda juga dapat
menentukan konfigurasi akselerasi yang digunakan
untuk menghasilkan {i>output<i} emas ini dengan
memanggil setGoldenConfig()
:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenConfig(customCpuAccelerationConfig)
[...]
.build();
Memvalidasi konfigurasi Akselerasi
Setelah membuat konfigurasi akselerasi dan konfigurasi validasi, Anda dapat mengevaluasinya untuk model Anda.
Memastikan LiteRT dengan runtime Layanan Play berjalan dengan benar diinisialisasi dan bahwa delegasi GPU tersedia untuk perangkat dengan menjalankan:
TfLiteGpu.isGpuDelegateAvailable(context)
.onSuccessTask(gpuAvailable -> TfLite.initialize(context,
TfLiteInitializationOptions.builder()
.setEnableGpuDelegateSupport(gpuAvailable)
.build()
)
);
Membuat instance AccelerationService
dengan memanggil AccelerationService.create()
.
Kemudian, Anda bisa memvalidasi konfigurasi akselerasi untuk model Anda dengan memanggil
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);
});
Anda juga bisa memvalidasi beberapa konfigurasi dengan memanggil
validateConfigs()
dan meneruskan objek Iterable<AccelerationConfig>
sebagai parameter.
validateConfig()
akan menampilkan
Task<
ValidatedAccelerationConfigResult
>
dari layanan Google Play
Task Api yang memungkinkan
dan asinkron.
Untuk mendapatkan hasil dari panggilan validasi, tambahkan
addOnSuccessListener()
.
Gunakan konfigurasi yang divalidasi di penerjemah Anda
Setelah memeriksa apakah ValidatedAccelerationConfigResult
ditampilkan di
Jika callback ini valid, Anda dapat menetapkan konfigurasi yang divalidasi sebagai konfigurasi akselerasi
untuk penerjemah Anda yang memanggil interpreterOptions.setAccelerationConfig()
.
Penyimpanan cache konfigurasi
Konfigurasi akselerasi optimal untuk model Anda kemungkinan tidak akan berubah pada
perangkat. Jadi setelah Anda menerima konfigurasi
akselerasi yang memuaskan, Anda
harus menyimpannya di perangkat dan membiarkan aplikasi
Anda mengambilnya dan menggunakannya untuk
membuat InterpreterOptions
Anda selama sesi berikut, bukan
menjalankan
validasi yang lain. Metode serialize()
dan deserialize()
di
ValidatedAccelerationConfigResult
membuat proses penyimpanan dan pengambilan
semuanya.
Contoh aplikasi
Untuk meninjau integrasi in-situ dari Layanan Akselerasi, lihat aplikasi contoh.
Batasan
Layanan Akselerasi memiliki batasan berikut saat ini:
- Hanya konfigurasi akselerasi CPU dan GPU yang didukung saat ini.
- Alat ini hanya mendukung LiteRT di layanan Google Play dan Anda tidak dapat gunakan jika Anda menggunakan paket LiteRT.
- Acceleration Service SDK hanya mendukung API level 22 dan yang lebih tinggi.
Peringatan
Harap tinjau peringatan berikut dengan cermat, terutama jika Anda sedang merencanakan untuk menggunakan SDK ini dalam produksi:
Sebelum keluar dari Beta dan merilis versi stabil untuk Acceleration Service API, kami akan menerbitkan SDK baru yang mungkin memiliki beberapa berbeda dengan versi Beta saat ini. Untuk terus menggunakan Layanan Akselerasi, Anda harus bermigrasi ke SDK baru ini dan mengirimkan mengupdate aplikasi Anda pada waktu yang tepat. Jika tidak dilakukan dapat menyebabkan kerusakan SDK Beta mungkin tidak lagi kompatibel dengan layanan Google Play setelah beberapa saat.
Tidak ada jaminan bahwa fitur tertentu dalam Akselerasi API Layanan atau API secara keseluruhan akan tersedia secara umum. Ini dapat tetap dalam versi Beta tanpa batas waktu, akan dimatikan, atau digabungkan dengan fitur ke dalam paket yang didesain untuk audiens developer tertentu. Agak besar di Acceleration Service API atau seluruh API itu sendiri akhirnya akan tersedia secara umum, tetapi tidak ada jadwal tetap untuk ini.
Persyaratan dan privasi
Persyaratan Layanan
Penggunaan Acceleration Service API tunduk pada Persyaratan Layanan Google API
Layanan.
Selain itu, Acceleration Service API saat ini masih dalam versi beta
sehingga dengan menggunakannya, Anda memahami potensi masalah yang diuraikan dalam
Peringatan di atas dan mengonfirmasi bahwa Layanan Akselerasi mungkin tidak
selalu berjalan seperti
yang ditentukan.
Privasi
Saat Anda menggunakan Acceleration Service API, pemrosesan data input (mis.
gambar, video, teks) sepenuhnya terjadi di perangkat, dan Service Acceleration Service
tidak akan mengirim data tersebut ke server Google. Oleh karena itu, Anda dapat menggunakan API kami
untuk memproses data input yang seharusnya berada di luar perangkat.
Acceleration Service API dapat menghubungi server Google dari waktu ke waktu di
untuk menerima hal seperti perbaikan bug, model yang diperbarui, dan akselerator hardware
informasi kompatibilitas. Acceleration Service API juga
mengirim metrik tentang
performa dan penggunaan API di aplikasi Anda untuk Google. Google menggunakan
data metrik ini untuk mengukur performa, men-debug, memelihara, dan meningkatkan API,
dan mendeteksi penyalahgunaan atau penyalahgunaan, sebagaimana dijelaskan lebih lanjut dalam artikel Privasi
Kebijakan kami.
Anda bertanggung jawab untuk memberi tahu pengguna aplikasi Anda tentang pemrosesan Google
data metrik Acceleration Service sebagaimana diwajibkan oleh hukum yang berlaku.
Data yang kami kumpulkan meliputi:
- Informasi perangkat (seperti produsen, model, versi OS, dan build) serta akselerator hardware ML yang tersedia (GPU dan DSP). Digunakan untuk diagnostik dan analisis penggunaan Anda.
- Informasi aplikasi (nama paket / ID paket, versi aplikasi). Digunakan untuk diagnostik dan analisis penggunaan.
- Konfigurasi API (seperti format dan resolusi gambar). Digunakan untuk diagnostik dan analisis penggunaan.
- Jenis peristiwa (seperti inisialisasi, model download, update, jalankan, deteksi). Digunakan untuk diagnostik dan analisis penggunaan.
- Kode error. Digunakan untuk diagnostik.
- Metrik performa. Digunakan untuk diagnostik.
- ID per penginstalan yang tidak mengidentifikasi pengguna atau perangkat fisik. Digunakan untuk pengoperasian konfigurasi dan penggunaan jarak jauh Analytics.
- Alamat IP pengirim permintaan jaringan. Digunakan untuk konfigurasi jarak jauh diagnostik. Alamat IP yang dikumpulkan akan dipertahankan untuk sementara.
Dukungan dan masukan
Anda dapat memberikan masukan dan mendapatkan dukungan melalui TensorFlow Issue Tracker. Laporkan masalah dan permintaan dukungan menggunakan template masalah untuk LiteRT di layanan Google Play.