Makine öğrenimi (ML) modellerinizi çalıştırmak için grafik işleme birimlerini (GPU) kullanmak, makine öğrenimi özellikli uygulamalarınızın performansını ve kullanıcı deneyimini önemli ölçüde iyileştirebilir. Android cihazlarda, bir yetki verilmiş ve aşağıdaki API'lerden birini kullanarak modellerinizin GPU ile hızlandırılmış yürütülmesini etkinleştirebilirsiniz:
- Translateer API - kılavuz
- Yerel (C/C++) API'si - bu kılavuz
Bu kılavuz; C API, C++ API için GPU yetkilendirmesinin gelişmiş kullanımlarını ve ölçülmüş modellerin kullanımını kapsar. En iyi uygulamalar ve gelişmiş teknikler de dahil olmak üzere TensorFlow Lite için GPU yetkilendirmesini kullanma hakkında daha fazla bilgi edinmek için GPU yetkileri sayfasına bakın.
GPU hızlandırmayı etkinleştir
Aşağıdaki örnek kodda gösterildiği gibi, TfLiteGpuDelegateV2Create()
ile yetki oluşturup TfLiteGpuDelegateV2Delete()
ile kaldırarak C veya C++'ta Android için TensorFlow Lite GPU yetkilendirmesini kullanın:
// 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);
Özel seçeneklere sahip bir temsilci örneği oluşturmak için TfLiteGpuDelegateOptionsV2
nesne kodunu inceleyin. Varsayılan seçenekleri TfLiteGpuDelegateOptionsV2Default()
ile başlatıp daha sonra gereken şekilde değiştirebilirsiniz.
C veya C++'ta Android için TensorFlow Lite GPU temsilcisi Bazel derleme sistemini kullanır. Aşağıdaki komutu kullanarak temsilciyi oluşturabilirsiniz:
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()
veya Interpreter::Invoke()
çağrılırken, çağrıyı yapanın geçerli iş parçacığında EGLContext
bulundurması ve Interpreter::Invoke()
öğesinin aynı EGLContext
içinden çağrılması gerekir. EGLContext
mevcut değilse temsilci, dahili olarak bir tane oluşturur ancak Interpreter::Invoke()
öğesinin her zaman Interpreter::ModifyGraphWithDelegate()
öğesinin çağrıldığı iş parçacığından çağrıldığından emin olmanız gerekir.
Google Play Hizmetleri'nde TensorFlow Lite ile:
Google Play Hizmetleri C API'de TensorFlow Lite'ı kullanıyorsanız TensorFlow Lite çalışma zamanını başlatmadan önce cihazınız için bir GPU yetkilisinin kullanılıp kullanılamadığını kontrol etmek üzere Java/Kotlin API'yi kullanmanız gerekir.
Uygulamanıza GPU yetkilendirme gradle bağımlılıklarını ekleyin:
implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'
Ardından, GPU kullanılabilirliğini kontrol edin ve kontrol başarılı olursa TfLiteNative'i başlatın:
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) }
CMake yapılandırmanızı, TFLITE_USE_OPAQUE_DELEGATE
derleyici işaretini içerecek şekilde de güncellemeniz gerekir:
add_compile_definitions(TFLITE_USE_OPAQUE_DELEGATE)
FlatBuffers kitaplığı, yetki verilmiş eklentileri yapılandırmak için kullanılır. Bu nedenle, bu kitaplığı yerel kodunuzun bağımlılıklarına eklemeniz gerekir.
Resmi CMake
proje yapılandırmasını aşağıdaki şekilde kullanabilirsiniz:
target_include_directories(tflite-jni PUBLIC
third_party/headers # flatbuffers
...)
Ayrıca, başlıkları uygulamanızla birlikte gruplandırabilirsiniz.
Son olarak, C kodunuzda GPU çıkarımını kullanmak için TFLiteSettings
kullanarak GPU temsilcisi oluşturun:
#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 kitaplıkları, sayısallaştırılmış modelleri varsayılan olarak destekler. GPU temsilcisiyle ölçülmüş modelleri kullanmak için herhangi bir kod değişikliği yapmanız gerekmez. Aşağıdaki bölümde, test veya deneysel amaçlar için nicelenmiş desteğin nasıl devre dışı bırakılacağı açıklanmaktadır.
Nicelleştirilmiş model desteğini devre dışı bırak
Aşağıdaki kod, ölçülmüş modeller için desteğin nasıl devre dışı bırakılacağını göstermektedir.
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ırması ile nicelenmiş modelleri çalıştırma hakkında daha fazla bilgi için GPU yetkisi'ne genel bakış bölümüne bakın.