Penggunaan unit pemrosesan grafis (GPU) untuk menjalankan model machine learning (ML) dapat secara signifikan meningkatkan performa dan pengalaman pengguna pada aplikasi berkemampuan ML. Di perangkat Android, Anda dapat mengaktifkan delegasi dan salah satu API berikut:
- Interpreter API - panduan ini
- API Native (C/C++) - panduan
Halaman ini menjelaskan cara mengaktifkan akselerasi GPU untuk model TensorFlow Lite di aplikasi Android menggunakan Interpreter API. Untuk mengetahui informasi selengkapnya tentang penggunaan delegasi GPU untuk TensorFlow Lite, termasuk praktik terbaik dan teknik lanjutan, lihat halaman Delegasi GPU.
Menggunakan GPU dengan TensorFlow Lite dengan layanan Google Play
Interpreter API TensorFlow Lite menyediakan serangkaian API tujuan umum untuk mem-build aplikasi machine learning. Bagian ini menjelaskan cara menggunakan delegasi akselerator GPU dengan API ini bersama TensorFlow Lite dengan layanan Google Play.
TensorFlow Lite dengan layanan Google Play adalah jalur yang direkomendasikan untuk menggunakan TensorFlow Lite di Android. Jika aplikasi Anda menargetkan perangkat yang tidak menjalankan Google Play, lihat bagian GPU dengan Interpreter API dan TensorFlow Lite mandiri.
Menambahkan dependensi project (dengan katalog versi .toml)
- Update file
libs.versions.toml
project Anda
[libraries]
...
tflite-gpu = { module = "org.tensorflow:tensorflow-lite-gpu", version = "2.X.Y" }
tflite-gpu-api = { module = "org.tensorflow:tensorflow-lite-gpu-api", version = "2.X.Y" }
...
- 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 file build.gradle
aplikasi Anda:
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'
}
Mengaktifkan akselerasi GPU
Kemudian, inisialisasi TensorFlow Lite dengan layanan Google Play dengan 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 menginisialisasi penafsir yang meneruskan GpuDelegateFactory
melalui 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. Untuk mengetahui informasi selengkapnya, lihat Membuat antarmuka model menggunakan metadata.
Menggunakan GPU dengan TensorFlow Lite mandiri
Jika aplikasi Anda menargetkan perangkat yang tidak menjalankan Google Play, Anda dapat memaketkan delegasi GPU ke aplikasi Anda dan menggunakannya dengan TensorFlow Lite versi mandiri.
Menambahkan dependensi project
Untuk mengaktifkan akses ke delegasi GPU, tambahkan
org.tensorflow:tensorflow-lite-gpu-delegate-plugin
ke file
build.gradle
aplikasi Anda:
dependencies {
...
implementation 'org.tensorflow:tensorflow-lite'
implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}
Mengaktifkan akselerasi GPU
Kemudian, jalankan TensorFlow Lite di GPU dengan TfLiteDelegate
. Di Java, Anda dapat menentukan
GpuDelegate
hingga 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 membuat perubahan kode untuk menggunakan model terkuantisasi dengan delegasi GPU. Bagian berikut menjelaskan cara menonaktifkan dukungan terkuantisasi untuk tujuan pengujian atau 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.