LiteRT di Java API layanan Google Play

LiteRT di layanan Google Play juga dapat diakses menggunakan Java API, di selain Native API. Secara khusus, LiteRT di Google Play tersedia melalui Layanan Penerjemah LiteRT Google Cloud Platform.

Menggunakan Interpreter API

LiteRT Interpreter API, yang disediakan oleh TensorFlow runtime, menyediakan antarmuka tujuan umum untuk membangun dan menjalankan model ML. Gunakan mengikuti langkah-langkah berikut untuk menjalankan inferensi dengan Interpreter API menggunakan TensorFlow Lite di runtime layanan Google Play.

1. Menambahkan dependensi project

Tambahkan dependensi berikut ke kode project aplikasi Anda untuk mengakses Services API untuk LiteRT:

dependencies {
...
    // LiteRT dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include LiteRT Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. Menambahkan inisialisasi LiteRT

Melakukan inisialisasi komponen LiteRT API layanan Google Play sebelum menggunakan LiteRT API:

Kotlin

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

Java

Task<Void> initializeTask = TfLite.initialize(context);

3. Membuat penerjemah dan menetapkan opsi runtime

Membuat penafsir menggunakan InterpreterApi.create() dan mengonfigurasinya untuk digunakan Runtime layanan Google Play, dengan memanggil InterpreterApi.Options.setRuntime(), seperti yang ditunjukkan pada kode contoh berikut:

Kotlin

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

Java

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

Anda harus menggunakan implementasi di atas karena menghindari pemblokiran Android thread antarmuka pengguna. Jika Anda perlu mengelola eksekusi thread dengan lebih cermat, Anda dapat menambahkan panggilan Tasks.await() ke pembuatan penafsir:

Kotlin

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

Java

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. Menjalankan inferensi

Menggunakan objek interpreter yang Anda buat, panggil metode run() untuk membuat sebuah inferensi.

Kotlin

interpreter.run(inputBuffer, outputBuffer)

Java

interpreter.run(inputBuffer, outputBuffer);

Akselerasi hardware

Dengan LiteRT, Anda dapat mempercepat performa model menggunakan prosesor perangkat keras khusus, seperti unit pemrosesan grafis (GPU). Anda dapat memanfaatkan prosesor khusus ini dengan menggunakan {i>driver<i} perangkat keras yang disebut delegasi.

Delegasi GPU disediakan melalui layanan Google Play dan dimuat secara dinamis, seperti versi layanan Play dari Interpreter API.

Memeriksa kompatibilitas perangkat

Tidak semua perangkat mendukung akselerasi hardware GPU dengan TFLite. Untuk memitigasi error dan potensi error, menggunakan Metode TfLiteGpu.isGpuDelegateAvailable untuk memeriksa apakah perangkat kompatibel dengan delegasi GPU.

Gunakan metode ini untuk mengonfirmasi apakah perangkat kompatibel dengan GPU, dan menggunakan CPU sebagai pengganti ketika GPU tidak didukung.

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

Setelah memiliki variabel seperti useGpuTask, Anda dapat menggunakannya untuk menentukan apakah menggunakan delegasi GPU.

Kotlin

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

Java

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

GPU dengan Interpreter API

Untuk menggunakan delegasi GPU dengan Interpreter API:

  1. Update dependensi project untuk menggunakan delegasi GPU dari layanan Play:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. Aktifkan opsi delegasi GPU dalam inisialisasi TFlite:

    Kotlin

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    Java

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. Aktifkan delegasi GPU dalam opsi penafsir: setel factory delegasi ke GpuDelegateFactory dengan memanggil addDelegateFactory() withinInterpreterApi.Options()`:

    Kotlin

    val interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
    .addDelegateFactory(GpuDelegateFactory())
    

    Java

    Options interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new
    GpuDelegateFactory());
    

Bermigrasi dari LiteRT mandiri

Jika Anda berencana memigrasikan aplikasi dari LiteRT mandiri ke Play services API, tinjau panduan tambahan berikut untuk mengupdate kode proyek aplikasi:

  1. Tinjau bagian Batasan di halaman ini untuk memastikan kasus penggunaan kami didukung.
  2. Sebelum memperbarui kode, lakukan pemeriksaan performa dan akurasi khusus, terutama jika Anda sebelumnya menggunakan versi LiteRT dari versi 2.1, sehingga Anda memiliki dasar untuk dibandingkan dengan terlepas dari implementasi layanan.
  3. Jika Anda telah memigrasikan semua kode agar menggunakan Play Services API untuk LiteRT, Anda harus menghapus runtime LiteRT yang ada library (entri dengan org.tensorflow:tensorflow-lite:*) dari build.gradle sehingga Anda dapat mengurangi ukuran aplikasi.
  4. Identifikasi semua kemunculan pembuatan objek new Interpreter dalam kode Anda, dan memodifikasi masing-masing metode tersebut agar menggunakan panggilan InterpreterApi.create(). Tujuan TfLite.Initialize baru bersifat asinkron, yang berarti dalam kebanyakan kasus itu bukan pengganti langsung: Anda harus mendaftarkan pemroses saat panggilan selesai. Lihat cuplikan kode pada kode Langkah 3.
  5. Tambahkan import org.tensorflow.lite.InterpreterApi; dan import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; ke sumber mana pun menggunakan org.tensorflow.lite.Interpreter atau Class org.tensorflow.lite.InterpreterApi.
  6. Jika salah satu panggilan yang dihasilkan ke InterpreterApi.create() hanya memiliki argumen tunggal, tambahkan new InterpreterApi.Options() ke daftar argumen.
  7. Tambahkan .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) ke argumen terakhir semua panggilan ke InterpreterApi.create().
  8. Ganti semua kemunculan lainnya dari class org.tensorflow.lite.Interpreter dengan org.tensorflow.lite.InterpreterApi.

Jika Anda ingin menggunakan LiteRT mandiri dan API layanan Play berdampingan, Anda harus menggunakan LiteRT 2.9 (atau yang lebih baru). LiteRT 2.8 dan versi sebelumnya tidak kompatibel dengan versi API layanan Play.