Delegato dell'accelerazione GPU con libreria Task

L'utilizzo di unità di elaborazione grafica (GPU) per eseguire i modelli di machine learning (ML) può migliorare notevolmente le prestazioni e l'esperienza utente delle tue applicazioni abilitate per ML. Sui dispositivi Android, puoi abilitare l'esecuzione accelerata dalla GPU dei tuoi modelli utilizzando un delegato e una delle seguenti API:

  • API interprete - guida
  • API della libreria attività: questa guida
  • API nativa (C/C++): questa guida

Questa pagina descrive come abilitare l'accelerazione GPU per i modelli TensorFlow Lite nelle app Android utilizzando la libreria Attività. Per ulteriori informazioni sul delegato GPU per TensorFlow Lite, incluse best practice e tecniche avanzate, consulta la pagina dei delegati GPU .

Utilizza GPU con TensorFlow Lite con i servizi Google Play

Le librerie di attività TensorFlow Lite forniscono una serie di API specifiche per attività per la creazione di applicazioni di machine learning. Questa sezione descrive come utilizzare il delegato dell'acceleratore GPU con queste API utilizzando TensorFlow Lite con i servizi Google Play.

TensorFlow Lite con i servizi Google Play è il percorso consigliato per utilizzare TensorFlow Lite su Android. Se la tua applicazione è destinata a dispositivi che non eseguono Google Play, consulta la sezione GPU con libreria attività e TensorFlow Lite autonomo .

Aggiungi dipendenze del progetto

Per abilitare l'accesso al delegato GPU con le librerie di attività TensorFlow Lite utilizzando i servizi Google Play, aggiungi com.google.android.gms:play-services-tflite-gpu alle dipendenze del file build.gradle della tua app:

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

Abilita l'accelerazione GPU

Verifica quindi in modo asincrono che il delegato GPU sia disponibile per il dispositivo utilizzando la classe TfLiteGpu e abilita l'opzione delegato GPU per la classe del modello API Task con la classe BaseOptions . Ad esempio, puoi configurare la GPU in ObjectDetector come mostrato nei seguenti esempi di codice:

Kotlin

        val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

        lateinit val optionsTask = useGpuTask.continueWith { task ->
          val baseOptionsBuilder = BaseOptions.builder()
          if (task.result) {
            baseOptionsBuilder.useGpu()
          }
        ObjectDetectorOptions.builder()
                  .setBaseOptions(baseOptionsBuilder.build())
                  .setMaxResults(1)
                  .build()
        }
      

Giava

      Task useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

      Task optionsTask = useGpuTask.continueWith({ task ->
        BaseOptions baseOptionsBuilder = BaseOptions.builder();
        if (task.getResult()) {
          baseOptionsBuilder.useGpu();
        }
        return ObjectDetectorOptions.builder()
                .setBaseOptions(baseOptionsBuilder.build())
                .setMaxResults(1)
                .build()
      });
      

Utilizza la GPU con TensorFlow Lite autonomo

Se la tua applicazione è destinata a dispositivi che non eseguono Google Play, è possibile raggruppare il delegato GPU nella tua applicazione e utilizzarlo con la versione standalone di TensorFlow Lite.

Aggiungi dipendenze del progetto

Per abilitare l'accesso al delegato GPU con le librerie di attività TensorFlow Lite utilizzando la versione standalone di TensorFlow Lite, aggiungi org.tensorflow:tensorflow-lite-gpu-delegate-plugin alle dipendenze del file build.gradle della tua app:

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite'
  implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin'
}

Abilita l'accelerazione GPU

Quindi abilita l'opzione delegato GPU per la classe del modello API Task con la classe BaseOptions . Ad esempio, puoi configurare la GPU in ObjectDetector come mostrato nei seguenti esempi di codice:

Kotlin

    import org.tensorflow.lite.task.core.BaseOptions
    import org.tensorflow.lite.task.gms.vision.detector.ObjectDetector

    val baseOptions = BaseOptions.builder().useGpu().build()

    val options =
        ObjectDetector.ObjectDetectorOptions.builder()
            .setBaseOptions(baseOptions)
            .setMaxResults(1)
            .build()

    val objectDetector = ObjectDetector.createFromFileAndOptions(
      context, model, options)
      

Giava

    import org.tensorflow.lite.task.core.BaseOptions
    import org.tensorflow.lite.task.gms.vision.detector.ObjectDetector

    BaseOptions baseOptions = BaseOptions.builder().useGpu().build();

    ObjectDetectorOptions options =
        ObjectDetectorOptions.builder()
            .setBaseOptions(baseOptions)
            .setMaxResults(1)
            .build();

    val objectDetector = ObjectDetector.createFromFileAndOptions(
      context, model, options);