Использование графических процессоров (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)
- Обновите файл
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" }
...
- Добавьте зависимости проекта в
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);
Дополнительные сведения о запуске квантованных моделей с ускорением графического процессора см. в разделе Обзор делегатов графического процессора .