Delegat akceleracji GPU z biblioteką zadań

Używanie jednostek przetwarzania grafiki (GPU) do uruchamiania modeli uczenia maszynowego (ML) może radykalnie poprawić wydajność i komfort korzystania z aplikacji obsługujących technologię ML. Na urządzeniach z systemem Android możesz włączyć wykonywanie modeli przyspieszane przez procesor graficzny, korzystając z delegata i jednego z następujących interfejsów API:

  • Interpreter API - przewodnik
  • API biblioteki zadań – ten przewodnik
  • Natywne API (C/C++) – ten przewodnik

Na tej stronie opisano, jak włączyć akcelerację GPU dla modeli TensorFlow Lite w aplikacjach na Androida przy użyciu biblioteki zadań. Aby uzyskać więcej informacji na temat delegata procesora GPU dla TensorFlow Lite, w tym najlepszych praktyk i zaawansowanych technik, zobacz stronę delegatów procesora GPU .

Używaj procesora graficznego z TensorFlow Lite z usługami Google Play

Biblioteki zadań TensorFlow Lite zapewniają zestaw interfejsów API specyficznych dla zadań do tworzenia aplikacji do uczenia maszynowego. W tej sekcji opisano, jak używać delegata akceleratora GPU z tymi interfejsami API przy użyciu TensorFlow Lite z usługami Google Play.

TensorFlow Lite z usługami Google Play to zalecana ścieżka korzystania z TensorFlow Lite na Androidzie. Jeśli Twoja aplikacja jest przeznaczona dla urządzeń, na których nie działa Google Play, zobacz sekcję GPU z biblioteką zadań i samodzielnym TensorFlow Lite .

Dodaj zależności projektu

Aby umożliwić dostęp do delegata GPU za pomocą bibliotek zadań TensorFlow Lite przy użyciu usług Google Play, dodaj com.google.android.gms:play-services-tflite-gpu do zależności pliku build.gradle swojej aplikacji:

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

Włącz akcelerację GPU

Następnie sprawdź asynchronicznie, czy delegat procesora GPU jest dostępny dla urządzenia przy użyciu klasy TfLiteGpu i włącz opcję delegowania procesora GPU dla klasy modelu interfejsu API zadań za pomocą klasy BaseOptions . Na przykład możesz skonfigurować procesor graficzny w ObjectDetector , jak pokazano w poniższych przykładach kodu:

Kotlina

        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()
        }
      

Jawa

      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()
      });
      

Używaj procesora graficznego z samodzielnym TensorFlow Lite

Jeśli Twoja aplikacja jest przeznaczona dla urządzeń, na których nie działa Google Play, możliwe jest dołączenie delegata GPU do Twojej aplikacji i używanie go z samodzielną wersją TensorFlow Lite.

Dodaj zależności projektu

Aby umożliwić dostęp do delegata GPU za pomocą bibliotek zadań TensorFlow Lite przy użyciu samodzielnej wersji TensorFlow Lite, dodaj org.tensorflow:tensorflow-lite-gpu-delegate-plugin do zależności pliku build.gradle swojej aplikacji:

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

Włącz akcelerację GPU

Następnie włącz opcję delegowania procesora GPU dla klasy modelu interfejsu API zadań za pomocą klasy BaseOptions . Na przykład możesz skonfigurować procesor graficzny w ObjectDetector , jak pokazano w poniższych przykładach kodu:

Kotlina

    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)
      

Jawa

    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);