Delegato dell'accelerazione GPU con l'API Interpreter

Utilizzo delle GPU (Graphics Processing Unit) per eseguire i modelli di machine learning (ML) migliorare notevolmente le prestazioni e l'esperienza utente del tuo abilitate per ML. Sui dispositivi Android, puoi attivare un delegate e una delle seguenti API:

  • Interpreter API - Questa guida
  • API Native (C/C++) - guida

In questa pagina viene descritto come attivare l'accelerazione GPU per i modelli LiteRT in App per Android che utilizzano l'API Interpreter. Per ulteriori informazioni sull'uso della GPU delega per LiteRT, che comprende best practice e tecniche avanzate, consulta la pagina Delegati GPU.

Usa GPU con LiteRT con Google Play Services

L'interprete di LiteRT dell'API fornisce un insieme le API generiche per creare applicazioni di machine learning. Questa sezione descrive come utilizzare il delegato dell'acceleratore GPU con queste API con LiteRT con Google Play Services.

L'opzione LiteRT con Google Play Services è la soluzione consigliata per utilizzare LiteRT su Android. Se la tua applicazione ha come target i dispositivi non esegue Google Play, consulta la GPU con API Interpreter e la versione LiteRT.

Aggiungi dipendenze del progetto (con catalogo delle versioni .toml)

  1. Aggiorna il file libs.versions.toml del progetto
[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. Aggiungi dipendenze del progetto nel file build.gradle.kts dell'app
dependencies {
  ...
  implementation(libraries.tflite.gpu)
  implementation(libraries.tflite.gpu.api)
  ...
}

Aggiungi dipendenze del progetto

Per abilitare l'accesso al delegato GPU, aggiungi com.google.android.gms:play-services-tflite-gpu al build.gradle della tua app 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'
}

Attiva l'accelerazione GPU

Quindi inizializza LiteRT con Google Play Services con il supporto 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());
});
        

Infine puoi inizializzare l'interprete che trasmette un GpuDelegateFactory a 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);
      

Il delegato GPU può essere utilizzato anche con l'associazione del modello ML in Android Studio. Per Per ulteriori informazioni, consulta Generare interfacce del modello utilizzando metadati.

Utilizza GPU con LiteRT autonomo

Se la tua applicazione ha come target dispositivi su cui non è in esecuzione Google Play, puoi raggruppare il delegato GPU per la tua applicazione e utilizzarlo con una versione autonoma di LiteRT.

Aggiungi dipendenze del progetto

Per abilitare l'accesso al delegato GPU, aggiungi com.google.ai.edge.litert:litert-gpu-delegate-plugin per la tua app build.gradle file:

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

Attiva l'accelerazione GPU

Poi esegui LiteRT su GPU con TfLiteDelegate. In Java, puoi specificare da GpuDelegate a 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);
      

Modelli quantificati

Le librerie delegati GPU Android supportano i modelli quantizzati per impostazione predefinita. Non devi eventuali modifiche al codice per usare modelli quantizzati con il delegato GPU. La la seguente sezione spiega come disattivare il supporto quantizzato per i test o a scopi sperimentali.

Disabilita il supporto dei modelli quantiizzati

Il seguente codice mostra come disattivare il supporto per i modelli quantizzati.

Java

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

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

Per ulteriori informazioni sull'esecuzione di modelli quantizzati con l'accelerazione GPU, consulta Panoramica dei delegati alle GPU.