Использование графических процессоров (GPU) для запуска моделей машинного обучения (ML) может значительно повысить производительность и удобство работы пользователей с приложениями с поддержкой ML. На устройствах Android вы можете включить выполнение своих моделей с ускорением на графическом процессоре с помощью делегата и одного из следующих API:
- API интерпретатора — руководство
- API библиотеки задач — руководство
- Собственный (C/C++) API — это руководство
В этом руководстве рассказывается о расширенном использовании делегата графического процессора для C API, C++ API и использовании квантованных моделей. Дополнительные сведения об использовании делегата графического процессора для TensorFlow Lite, включая рекомендации и передовые методы, см. на странице делегатов графического процессора .
Включить ускорение графического процессора
Используйте делегат графического процессора TensorFlow Lite для Android на C или C++, создав делегат с помощью TfLiteGpuDelegateV2Create()
и уничтожив его с помощью TfLiteGpuDelegateV2Delete()
, как показано в следующем примере кода:
// Set up interpreter.
auto model = FlatBufferModel::BuildFromFile(model_path);
if (!model) return false;
ops::builtin::BuiltinOpResolver op_resolver;
std::unique_ptr<Interpreter> interpreter;
InterpreterBuilder(*model, op_resolver)(&interpreter);
// NEW: Prepare GPU delegate.
auto* delegate = TfLiteGpuDelegateV2Create(/*default options=*/nullptr);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
// Run inference.
WriteToInputTensor(interpreter->typed_input_tensor<float>(0));
if (interpreter->Invoke() != kTfLiteOk) return false;
ReadFromOutputTensor(interpreter->typed_output_tensor<float>(0));
// NEW: Clean up.
TfLiteGpuDelegateV2Delete(delegate);
Просмотрите код объекта TfLiteGpuDelegateOptionsV2
, чтобы создать экземпляр делегата с настраиваемыми параметрами. Вы можете инициализировать параметры по умолчанию с помощью TfLiteGpuDelegateOptionsV2Default()
, а затем изменить их по мере необходимости.
Делегат графического процессора TensorFlow Lite для Android на C или C++ использует систему сборки Bazel . Вы можете создать делегат с помощью следующей команды:
bazel build -c opt --config android_arm64 tensorflow/lite/delegates/gpu:delegate # for static library
bazel build -c opt --config android_arm64 tensorflow/lite/delegates/gpu:libtensorflowlite_gpu_delegate.so # for dynamic library
При вызове Interpreter::ModifyGraphWithDelegate()
или Interpreter::Invoke()
вызывающая сторона должна иметь EGLContext
в текущем потоке, а Interpreter::Invoke()
должен вызываться из того же EGLContext
. Если EGLContext
не существует, делегат создает его внутри, но тогда вы должны убедиться, что Interpreter::Invoke()
всегда вызывается из того же потока, в котором был вызван Interpreter::ModifyGraphWithDelegate()
.
Квантовые модели
Библиотеки делегатов графического процессора Android по умолчанию поддерживают квантованные модели. Вам не нужно вносить какие-либо изменения в код, чтобы использовать квантованные модели с делегатом графического процессора. В следующем разделе объясняется, как отключить поддержку квантования для тестирования или экспериментальных целей.
Отключить поддержку квантованной модели
Следующий код показывает, как отключить поддержку квантованных моделей.
С++
TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default(); options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_NONE; auto* delegate = TfLiteGpuDelegateV2Create(options); if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
Дополнительные сведения о выполнении квантованных моделей с ускорением графического процессора см. в разделе Обзор делегата графического процессора .