Makine öğrenimi (ML) modellerinizi çalıştırmak için grafik işlem birimlerini (GPU'lar) kullanma sitenizin performansını ve kullanıcı deneyimini önemli ölçüde iyileştirebilir. Makine öğrenimi özellikli uygulamalar. Android cihazlarda GPU ile hızlandırılmış cihazları etkinleştirebilirsiniz yetki verilmiş kullanıcı kullanarak şu API'lerden birini seçin:
- Çevirmen API'si - kılavuz
- Yerel (C/C++) API - bu kılavuz
Bu kılavuzda; C API, C++ API ve ve nicelikselleştirilmiş modellerin nasıl kullanıldığını gösterir. Daha fazla bilgi için En iyi uygulamaları ve gelişmiş teknikleri içeren LiteRT, bkz. GPU delegeler sayfası.
GPU hızlandırmayı etkinleştir
C veya C++'ta Android için LiteRT GPU yetkilendirmesini kullanarak
TfLiteGpuDelegateV2Create()
ile delege etmek ve onu imha etmek için
TfLiteGpuDelegateV2Delete()
, aşağıdaki örnek kodda gösterildiği gibi:
// 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);
Yetki verilmiş bir örnek oluşturmak için TfLiteGpuDelegateOptionsV2
nesne kodunu inceleyin
kullanabilirsiniz. Varsayılan seçenekleri şununla başlatabilirsiniz:
TfLiteGpuDelegateOptionsV2Default()
ve ardından gerekli değişiklikleri yapın.
C veya C++'ta Android için LiteRT GPU delegesi Bazel derleme sistemi. şu komutu kullanın:
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()
numaralı telefonu ararken veya
Interpreter::Invoke()
, arayanın geçerli içinde EGLContext
olması gerekir
ileti dizisi ve Interpreter::Invoke()
, aynı EGLContext
içinden çağrılmalıdır. Eğer
bir EGLContext
yoksa, yetki verilmiş kullanıcı dahili olarak bir tane oluşturur ancak daha sonra
Interpreter::Invoke()
öğesinin her zaman aynı
Interpreter::ModifyGraphWithDelegate()
çağrıldığı ileti dizisi.
Google Play Hizmetleri'nde LiteRT ile:
Google Play Hizmetleri C API'de LiteRT kullanıyorsanız GPU delegesi olup olmadığını kontrol etmek için Java/Kotlin API'yi kullanmanız gerekir gerekir.
GPU yetki yükseltmesi bağımlılıklarını uygulamanıza ekleyin:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'
Ardından, GPU kullanılabilirliğini kontrol edin ve denetim uygunsa TfLiteNative'i başlatın başarılı:
Java
Task<Void> tfLiteHandleTask = TfLiteGpu.isGpuDelegateAvailable(this) .onSuccessTask(gpuAvailable -> { TfLiteInitializationOptions options = TfLiteInitializationOptions.builder() .setEnableGpuDelegateSupport(gpuAvailable).build(); return TfLiteNative.initialize(this, options); } );
Kotlin
val tfLiteHandleTask = TfLiteGpu.isGpuDelegateAvailable(this) .onSuccessTask { gpuAvailable -> val options = TfLiteInitializationOptions.Builder() .setEnableGpuDelegateSupport(gpuAvailable) .build() TfLiteNative.initialize(this, options) }
Ayrıca, CMake yapılandırmanızı
TFLITE_USE_OPAQUE_DELEGATE
derleyici işareti:
add_compile_definitions(TFLITE_USE_OPAQUE_DELEGATE)
FlatBuffers kitaplığı,
eklentilere yetki vermeniz gerekir. Bu nedenle, bunu yerel kodunuzun bağımlılıklarına eklemeniz gerekir.
Resmi CMake
projesi yapılandırmasını aşağıdaki şekilde kullanabilirsiniz:
target_include_directories(tflite-jni PUBLIC
third_party/headers # flatbuffers
...)
İsterseniz üstbilgileri uygulamanıza göre gruplandırabilirsiniz.
Son olarak, C kodunuzda GPU çıkarımını kullanmak için
TFLiteSettings
:
#include "flatbuffers/flatbuffers.h"
#include "tensorflow/lite/acceleration/configuration/configuration_generated.h"
flatbuffers::FlatBufferBuilder fbb;
tflite::TFLiteSettingsBuilder builder(fbb);
const tflite::TFLiteSettings* tflite_settings =
flatbuffers::GetTemporaryPointer(fbb, builder.Finish());
const TfLiteOpaqueDelegatePlugin* pluginCApi = TfLiteGpuDelegatePluginCApi();
TfLiteOpaqueDelegate* gpu_delegate = pluginCApi->create(tflite_settings);
Nicel modeller
Android GPU yetki verme kitaplıkları, varsayılan olarak nicel modelleri destekler. Şunları yapmayın: GPU yetkisiyle nicelenmiş modelleri kullanmak için herhangi bir kod değişikliği yapmak zorunda kalırsınız. İlgili içeriği oluşturmak için kullanılan Bu bölümde, test veya destek için nicel desteğin nasıl devre dışı bırakılacağı açıklanmaktadır. .
Miktarı ölçülmüş model desteğini devre dışı bırak
Aşağıdaki kodda, miktarlandırılmış modeller için desteğin nasıl devre dışı bırakılacağı gösterilmektedir.
C++
TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default(); options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_NONE; auto* delegate = TfLiteGpuDelegateV2Create(options); if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
GPU hızlandırmalı olarak nicelenmiş modelleri çalıştırma hakkında daha fazla bilgi için bkz. GPU temsilcisine genel bakış.