Delegasi akselerasi GPU dengan Interpreter API

Menggunakan unit pemrosesan grafis (GPU) untuk menjalankan model machine learning (ML) dapat meningkatkan kinerja dan pengalaman pengguna secara signifikan aplikasi berkemampuan ML. Pada perangkat Android, Anda dapat mengaktifkan delegasikan dan salah satu API berikut:

  • Interpreter API - panduan ini
  • API Native (C/C++) - panduan

Halaman ini menjelaskan cara mengaktifkan akselerasi GPU untuk model LiteRT di Aplikasi Android yang menggunakan Interpreter API. Untuk informasi selengkapnya tentang penggunaan GPU delegasi untuk LiteRT, termasuk praktik terbaik dan teknik lanjutan, lihat halaman Delegasi GPU.

Menggunakan GPU dengan LiteRT dengan layanan Google Play

Penerjemah LiteRT API menyediakan serangkaian API tujuan umum untuk membangun aplikasi machine learning. Bagian ini menjelaskan cara menggunakan delegasi akselerator GPU dengan API ini dengan LiteRT dengan layanan Google Play.

LiteRT dengan layanan Google Play direkomendasikan untuk menggunakan LiteRT di Android. Jika aplikasi Anda menargetkan perangkat tidak menjalankan Google Play, lihat GPU dengan Interpreter API dan LiteRT.

Menambahkan dependensi project (dengan katalog versi .toml)

  1. Mengupdate file libs.versions.toml project Anda
[libraries]
...
tflite-gpu = { module = "com.google.ai.edge.litert:litert-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "com.google.ai.edge.litert:litert-gpu-api", version = "2.X.Y" }
...
  1. Menambahkan dependensi project di build.gradle.kts aplikasi
dependencies {
  ...
  implementation(libraries.tflite.gpu)
  implementation(libraries.tflite.gpu.api)
  ...
}

Menambahkan dependensi project

Untuk mengaktifkan akses ke delegasi GPU, tambahkan com.google.android.gms:play-services-tflite-gpu ke build.gradle aplikasi Anda file:

dependencies {
    ...
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
}

Aktifkan akselerasi GPU

Kemudian, inisialisasi LiteRT dengan layanan Google Play menggunakan dukungan GPU:

Kotlin

val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

val interpreterTask = useGpuTask.continueWith { useGpuTask ->
  TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
      .setEnableGpuDelegateSupport(useGpuTask.result)
      .build())
  }
        

Java

Task<boolean> useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

Task<Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  TfLite.initialize(context,
  TfLiteInitializationOptions.builder()
    .setEnableGpuDelegateSupport(true)
    .build());
});
        

Anda akhirnya dapat melakukan inisialisasi pada penafsir yang meneruskan GpuDelegateFactory sampai InterpreterApi.Options:

Kotlin

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

    val interpreter = InterpreterApi(model, options)

    // Run inference
    writeToInput(input)
    interpreter.run(input, output)
    readFromOutput(output)
      

Java

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

    Interpreter interpreter = new InterpreterApi(model, options);

    // Run inference
    writeToInput(input);
    interpreter.run(input, output);
    readFromOutput(output);
      

Delegasi GPU juga dapat digunakan dengan binding model ML di Android Studio. Sebagai informasi selengkapnya, lihat Membuat antarmuka model menggunakan metadata.

Menggunakan GPU dengan LiteRT mandiri

Jika aplikasi Anda menargetkan perangkat yang tidak menjalankan Google Play, dapat memaketkan delegasi GPU ke aplikasi Anda dan menggunakannya dengan versi mandiri dari LiteRT.

Menambahkan dependensi project

Untuk mengaktifkan akses ke delegasi GPU, tambahkan com.google.ai.edge.litert:litert-gpu-delegate-plugin ke aplikasi Anda File build.gradle:

dependencies {
    ...
    implementation 'org.tensorflow:tensorflow-lite'
    implementation 'com.google.ai.edge.litert:litert-gpu-delegate-plugin'
}

Aktifkan akselerasi GPU

Kemudian, jalankan LiteRT di GPU dengan TfLiteDelegate. Di Java, Anda bisa menentukan GpuDelegate sampai Interpreter.Options.

Kotlin

      import org.tensorflow.lite.Interpreter
      import org.tensorflow.lite.gpu.CompatibilityList
      import org.tensorflow.lite.gpu.GpuDelegate

      val compatList = CompatibilityList()

      val options = Interpreter.Options().apply{
          if(compatList.isDelegateSupportedOnThisDevice){
              // if the device has a supported GPU, add the GPU delegate
              val delegateOptions = compatList.bestOptionsForThisDevice
              this.addDelegate(GpuDelegate(delegateOptions))
          } else {
              // if the GPU is not supported, run on 4 threads
              this.setNumThreads(4)
          }
      }

      val interpreter = Interpreter(model, options)

      // Run inference
      writeToInput(input)
      interpreter.run(input, output)
      readFromOutput(output)
      

Java

      import org.tensorflow.lite.Interpreter;
      import org.tensorflow.lite.gpu.CompatibilityList;
      import org.tensorflow.lite.gpu.GpuDelegate;

      // Initialize interpreter with GPU delegate
      Interpreter.Options options = new Interpreter.Options();
      CompatibilityList compatList = CompatibilityList();

      if(compatList.isDelegateSupportedOnThisDevice()){
          // if the device has a supported GPU, add the GPU delegate
          GpuDelegate.Options delegateOptions = compatList.getBestOptionsForThisDevice();
          GpuDelegate gpuDelegate = new GpuDelegate(delegateOptions);
          options.addDelegate(gpuDelegate);
      } else {
          // if the GPU is not supported, run on 4 threads
          options.setNumThreads(4);
      }

      Interpreter interpreter = new Interpreter(model, options);

      // Run inference
      writeToInput(input);
      interpreter.run(input, output);
      readFromOutput(output);
      

Model terkuantisasi

Library delegasi GPU Android mendukung model terkuantisasi secara default. Anda tidak perlu harus membuat perubahan kode untuk menggunakan model terkuantisasi dengan delegasi GPU. Tujuan bagian berikut menjelaskan cara menonaktifkan dukungan terkuantisasi untuk pengujian atau tujuan eksperimental.

Menonaktifkan dukungan model terkuantisasi

Kode berikut menunjukkan cara menonaktifkan dukungan untuk model terkuantisasi.

Java

GpuDelegate delegate = new GpuDelegate(new GpuDelegate.Options().setQuantizedModelsAllowed(false));

Interpreter.Options options = (new Interpreter.Options()).addDelegate(delegate);
      

Untuk mengetahui informasi selengkapnya tentang menjalankan model terkuantisasi dengan akselerasi GPU, lihat Ringkasan delegasi GPU.