Penggunaan prosesor khusus seperti GPU, NPU, atau DSP untuk akselerasi hardware dapat secara signifikan meningkatkan performa inferensi (dalam beberapa kasus inferensi hingga 10x lebih cepat ) dan pengalaman pengguna pada aplikasi Android Anda yang mendukung ML. Namun, mengingat keragaman hardware dan driver yang mungkin dimiliki pengguna Anda, memilih konfigurasi akselerasi hardware yang optimal untuk setiap perangkat pengguna bisa menjadi tantangan tersendiri. Selain itu, mengaktifkan konfigurasi yang salah di perangkat dapat menyebabkan pengalaman pengguna yang buruk karena latensi yang tinggi atau, dalam beberapa kasus yang jarang terjadi, error runtime atau masalah akurasi yang disebabkan oleh inkompatibilitas hardware.
Acceleration Service untuk Android adalah API yang membantu Anda memilih
konfigurasi akselerasi hardware yang optimal untuk perangkat pengguna tertentu dan model
.tflite
, sekaligus meminimalkan risiko error runtime atau masalah akurasi.
Acceleration Service mengevaluasi berbagai konfigurasi akselerasi pada perangkat pengguna dengan menjalankan tolok ukur inferensi internal dengan model TensorFlow Lite Anda. Pengujian ini biasanya selesai dalam beberapa detik, bergantung pada model Anda. Anda dapat menjalankan benchmark sekali pada setiap perangkat pengguna sebelum waktu inferensi, meng-cache hasil, dan menggunakannya selama inferensi. Benchmark ini dijalankan di luar proses; yang meminimalkan risiko error pada aplikasi Anda.
Berikan model, sampel data, serta hasil yang diharapkan (input dan output "emas"), lalu Acceleration Service akan menjalankan benchmark inferensi TFLite internal untuk memberi Anda rekomendasi hardware.
Acceleration Service adalah bagian dari stack ML kustom Android dan berfungsi dengan TensorFlow Lite di layanan Google Play.
Menambahkan dependensi ke project Anda
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 TensorFlow Lite di Layanan Google Play. Jika belum menggunakan runtime TensorFlow Lite yang disediakan melalui Layanan Play, Anda harus mengupdate dependensi.
Cara menggunakan Acceleration Service API
Untuk menggunakan Acceleration Service, mulailah dengan membuat konfigurasi akselerasi
yang ingin Anda evaluasi untuk model Anda (misalnya GPU dengan OpenGL). Kemudian, buat konfigurasi validasi dengan model Anda, beberapa data sampel, dan output model yang diharapkan. Terakhir, panggil validateConfig()
untuk meneruskan konfigurasi akselerasi dan konfigurasi validasi Anda.
Membuat konfigurasi akselerasi
Konfigurasi akselerasi adalah representasi konfigurasi hardware yang diterjemahkan menjadi delegasi selama waktu eksekusi. Kemudian, Acceleration Service akan menggunakan konfigurasi ini secara internal untuk melakukan inferensi pengujian.
Saat ini, layanan akselerasi memungkinkan Anda mengevaluasi konfigurasi GPU (dikonversi menjadi delegasi GPU selama waktu eksekusi) dengan GpuAccelerationConfig dan inferensi CPU (dengan CpuAccelerationConfig). Kami sedang berupaya mendukung lebih banyak delegasi untuk mengakses hardware lain pada masa mendatang.
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()
atau tidak.
Konfigurasi akselerasi CPU
Buat akselerasi CPU sebagai berikut:
AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
.setNumThreads(2)
.build();
Gunakan
metode setNumThreads()
untuk menentukan jumlah thread yang ingin Anda gunakan untuk mengevaluasi inferensi
CPU.
Membuat konfigurasi validasi
Konfigurasi validasi memungkinkan Anda menentukan cara yang Anda inginkan agar Acceleration Service mengevaluasi inferensi. Anda akan menggunakannya untuk lulus:
- sampel input,
- {i>output<i} yang diharapkan,
- logika validasi akurasi.
Pastikan untuk memberikan contoh input yang Anda harapkan memiliki performa model yang baik (juga dikenal sebagai sampel “keemasan”).
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 dengan
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 memerlukan waktu lebih lama dari waktu yang Anda tentukan, konfigurasi akan ditolak.
Secara opsional, 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 berfungsi untuk kasus penggunaan Anda.
Perhatikan bahwa jika data validasi sudah disematkan dalam model, Anda dapat 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 output emas ini dengan
memanggil setGoldenConfig()
:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenConfig(customCpuAccelerationConfig)
[...]
.build();
Validasi konfigurasi Akselerasi
Setelah membuat konfigurasi akselerasi dan konfigurasi validasi, Anda dapat mengevaluasinya untuk model Anda.
Pastikan runtime TensorFlow Lite dengan Layanan Play diinisialisasi dengan benar dan delegasi GPU tersedia untuk perangkat dengan menjalankan:
TfLiteGpu.isGpuDelegateAvailable(context)
.onSuccessTask(gpuAvailable -> TfLite.initialize(context,
TfLiteInitializationOptions.builder()
.setEnableGpuDelegateSupport(gpuAvailable)
.build()
)
);
Buat instance AccelerationService
dengan memanggil AccelerationService.create()
.
Anda kemudian dapat memvalidasi konfigurasi akselerasi untuk model 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 dapat memvalidasi beberapa konfigurasi dengan memanggil
validateConfigs()
dan meneruskan objek Iterable<AccelerationConfig>
sebagai parameter.
validateConfig()
akan menampilkan
Task<
ValidatedAccelerationConfigResult
>
dari Task Api layanan Google Play
yang memungkinkan tugas asinkron.
Untuk mendapatkan hasil dari panggilan validasi, tambahkan
callback
addOnSuccessListener()
.
Menggunakan konfigurasi yang divalidasi dalam penafsir Anda
Setelah memeriksa apakah ValidatedAccelerationConfigResult
yang ditampilkan dalam callback valid, Anda dapat menetapkan konfigurasi yang divalidasi sebagai konfigurasi akselerasi untuk penafsir Anda yang memanggil interpreterOptions.setAccelerationConfig()
.
Penyimpanan dalam cache konfigurasi
Konfigurasi akselerasi yang optimal untuk model Anda cenderung tidak berubah pada
perangkat. Jadi, setelah menerima konfigurasi akselerasi yang memuaskan, Anda
harus menyimpannya di perangkat dan membiarkan aplikasi mengambilnya serta menggunakannya untuk
membuat InterpreterOptions
selama sesi berikut, bukan
menjalankan validasi lain. Metode serialize()
dan deserialize()
di
ValidatedAccelerationConfigResult
mempermudah proses penyimpanan dan
pengambilan.
Contoh aplikasi
Untuk meninjau integrasi in-situ dari Acceleration Service, lihat aplikasi contoh.
Batasan
Acceleration Service memiliki batasan saat ini sebagai berikut:
- Hanya konfigurasi akselerasi CPU dan GPU yang didukung saat ini.
- Platform ini hanya mendukung TensorFlow Lite di layanan Google Play dan Anda tidak dapat menggunakannya jika menggunakan TensorFlow Lite versi paket.
- Acceleration Service SDK hanya mendukung API level 22 dan yang lebih baru.
Peringatan
Tinjau peringatan berikut dengan cermat, terutama jika Anda berencana menggunakan SDK ini dalam produksi:
Sebelum keluar dari Beta dan merilis versi stabil untuk Acceleration Service API, kami akan memublikasikan SDK baru yang mungkin memiliki beberapa perbedaan dengan SDK versi Beta saat ini. Untuk terus menggunakan Layanan Akselerasi, Anda harus bermigrasi ke SDK baru ini dan mengirim update ke aplikasi Anda secara tepat waktu. Jika tidak dilakukan, mungkin akan terjadi kerusakan karena SDK Beta mungkin tidak lagi kompatibel dengan layanan Google Play setelah beberapa waktu.
Tidak ada jaminan bahwa fitur tertentu dalam Acceleration Service API atau API secara keseluruhan akan tersedia secara umum. Fitur ini dapat tetap dalam versi Beta tanpa batas waktu, dinonaktifkan, atau digabungkan dengan fitur lain ke dalam paket yang dirancang untuk audiens developer tertentu. Beberapa fitur dengan Acceleration Service API atau seluruh API itu sendiri mungkin pada akhirnya akan tersedia secara umum, tetapi tidak ada jadwal tetap untuk hal ini.
Persyaratan dan privasi
Persyaratan Layanan
Penggunaan Acceleration Service API tunduk pada Persyaratan
Layanan Google API.
Selain itu, Acceleration Service API saat ini masih dalam versi beta, sehingga dengan menggunakannya, Anda mengetahui potensi masalah yang diuraikan di
bagian Peringatan di atas dan memahami bahwa Acceleration Service mungkin tidak selalu
berfungsi seperti yang ditentukan.
Privasi
Saat Anda menggunakan Acceleration Service API, pemrosesan data input (misalnya,
gambar, video, teks) sepenuhnya terjadi di perangkat, dan Aceleration Service
tidak mengirimkan data tersebut ke server Google. Oleh karena itu, Anda dapat menggunakan API
untuk memproses data input yang tidak boleh dikirim ke luar perangkat.
Acceleration Service API dapat menghubungi server Google dari waktu ke waktu untuk
menerima hal-hal seperti perbaikan bug, model terbaru, dan informasi kompatibilitas
akselerator hardware. Acceleration Service API juga mengirimkan metrik tentang
performa dan penggunaan API di aplikasi Anda ke Google. Google menggunakan
data metrik ini untuk mengukur performa, men-debug, mengelola, dan meningkatkan API,
serta mendeteksi penyalahgunaan atau penyalahgunaan, seperti yang dijelaskan lebih lanjut dalam Kebijakan
Privasi kami.
Anda bertanggung jawab untuk memberi tahu pengguna aplikasi Anda tentang pemrosesan
data metrik Acceleration Service oleh Google 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.
- 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 secara unik mengidentifikasi pengguna atau perangkat fisik. Digunakan untuk operasi konfigurasi jarak jauh dan analisis penggunaan.
- Alamat IP pengirim permintaan jaringan. Digunakan untuk diagnostik konfigurasi jarak jauh. Alamat IP yang dikumpulkan akan dipertahankan untuk sementara.
Dukungan dan masukan
Anda dapat memberikan masukan dan mendapatkan dukungan melalui TensorFlow Issue Tracker. Harap laporkan masalah dan permintaan dukungan menggunakan template masalah untuk TensorFlow Lite di layanan Google Play.