Делегат ускорения графического процессора с API-интерфейсом Interpreter

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

  • API-интерпретатор — это руководство
  • Нативный (C/C++) API — руководство

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

Используйте графический процессор с LiteRT с сервисами Google Play.

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

LiteRT со службами Google Play — рекомендуемый вариант использования LiteRT на Android. Если ваше приложение предназначено для устройств, на которых не работает Google Play, см. раздел «Графический процессор с API-интерфейсом Interpreter и автономный LiteRT» .

Добавить зависимости проекта (с каталогом версий .toml)

  1. Обновите файл libs.versions.toml вашего проекта.
[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. Добавьте зависимости проекта в build.gradle.kts приложения.
dependencies {
  ...
  implementation(libraries.tflite.gpu)
  implementation(libraries.tflite.gpu.api)
  ...
}

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

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

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'
}

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

Затем инициализируйте LiteRT с помощью сервисов Google Play с поддержкой графического процессора:

Котлин

val useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

val interpreterTask = useGpuTask.continueWith { useGpuTask ->
  TfLite.initialize(context,
      TfLiteInitializationOptions.builder()
      .setEnableGpuDelegateSupport(useGpuTask.result)
      .build())
  }
        

Ява

Task<boolean> useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context);

Task<Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  TfLite.initialize(context,
  TfLiteInitializationOptions.builder()
    .setEnableGpuDelegateSupport(true)
    .build());
});
        

Наконец, вы можете инициализировать интерпретатор, передав GpuDelegateFactory через InterpreterApi.Options :

Котлин

    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)
      

Ява

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

Делегат GPU также можно использовать с привязкой модели ML в Android Studio. Дополнительные сведения см. в разделе Создание интерфейсов модели с использованием метаданных .

Используйте графический процессор с автономным LiteRT

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

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

Чтобы разрешить доступ к делегату графического процессора, добавьте com.google.ai.edge.litert:litert-gpu-delegate-plugin в файл build.gradle вашего приложения:

dependencies {
    ...
    implementation 'com.google.ai.edge.litert:litert'
    implementation 'com.google.ai.edge.litert:litert-gpu'
    implementation 'com.google.ai.edge.litert:litert-gpu-api'
}

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

Затем запустите LiteRT на графическом процессоре с помощью TfLiteDelegate . В Java вы можете указать GpuDelegate через Interpreter.Options .

Котлин

      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)
      

Ява

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

Квантованные модели

Библиотеки делегатов Android GPU по умолчанию поддерживают квантованные модели. Вам не нужно вносить какие-либо изменения в код, чтобы использовать квантованные модели с делегатом графического процессора. В следующем разделе объясняется, как отключить поддержку квантования для целей тестирования или экспериментов.

Отключить поддержку квантованной модели

Следующий код показывает, как отключить поддержку квантованных моделей.

Ява

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

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

Дополнительные сведения о запуске квантованных моделей с ускорением графического процессора см. в разделе Обзор делегатов графического процессора .