Layanan Akselerasi untuk Android (Beta)

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.

gambar

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.

gambar

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.