Делегат ускорения графического процессора с библиотекой задач

Использование графических процессоров (GPU) для запуска моделей машинного обучения (ML) может значительно повысить производительность и удобство работы пользователей с приложениями с поддержкой ML. На устройствах Android вы можете включить выполнение своих моделей с ускорением на графическом процессоре с помощью делегата и одного из следующих API:

На этой странице описывается, как включить ускорение графического процессора для моделей TensorFlow Lite в приложениях Android с помощью библиотеки задач. Дополнительные сведения о делегате графического процессора для TensorFlow Lite, включая рекомендации и передовые методы, см. на странице делегатов графического процессора .

Используйте GPU с TensorFlow Lite с сервисами Google Play

Библиотеки задач TensorFlow Lite предоставляют набор API-интерфейсов для конкретных задач для создания приложений машинного обучения. В этом разделе описывается, как использовать делегата ускорителя графического процессора с этими API, используя TensorFlow Lite со службами Google Play.

TensorFlow Lite с сервисами Google Play — рекомендуемый способ использования TensorFlow Lite на Android. Если ваше приложение предназначено для устройств, на которых не работает Google Play, см. раздел GPU с библиотекой задач и автономным TensorFlow Lite .

Добавить зависимости проекта

Чтобы включить доступ к делегату графического процессора с помощью библиотек задач TensorFlow Lite с помощью сервисов Google Play, добавьте com.google.android.gms:play-services-tflite-gpu в зависимости файла build.gradle вашего приложения:

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

Включить ускорение графического процессора

Затем асинхронно проверьте, доступен ли делегат графического процессора для устройства с помощью класса TfLiteGpu , и включите параметр делегата графического процессора для класса модели Task API с помощью класса BaseOptions . Например, вы можете настроить GPU в ObjectDetector , как показано в следующих примерах кода:

Котлин

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

Джава

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

Используйте GPU с автономным TensorFlow Lite

Если ваше приложение предназначено для устройств, на которых не работает Google Play, можно связать делегата графического процессора с вашим приложением и использовать его с автономной версией TensorFlow Lite.

Добавить зависимости проекта

Чтобы включить доступ к делегату графического процессора с библиотеками задач TensorFlow Lite с помощью автономной версии TensorFlow Lite, добавьте org.tensorflow:tensorflow-lite-gpu-delegate-plugin в зависимости файла build.gradle вашего приложения:

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

Включить ускорение графического процессора

Затем включите параметр делегата графического процессора для класса модели Task API с помощью класса BaseOptions . Например, вы можете настроить GPU в ObjectDetector , как показано в следующих примерах кода:

Котлин

    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)
      

Джава

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