Makine öğrenimi (ML) modellerinizi çalıştırmak için grafik işlem birimlerini (GPU'lar) kullanmak, ML özellikli uygulamalarınızın performansını ve kullanıcı deneyimini önemli ölçüde artırabilir. Android cihazlarda, bir temsilci ve aşağıdaki API'lerden birini kullanarak modellerinizin GPU hızlandırmalı yürütülmesini etkinleştirebilirsiniz:
Bu kılavuz, C API, C++ API için GPU temsilcisinin gelişmiş kullanımlarını ve nicelenmiş modellerin kullanımını kapsar. En iyi uygulamalar ve gelişmiş teknikler de dahil olmak üzere TensorFlow Lite için GPU temsilcisini kullanma hakkında daha fazla bilgi için GPU temsilcileri sayfasına bakın.
GPU hızlandırmayı etkinleştir
Aşağıdaki örnek kodda gösterildiği gibi, TfLiteGpuDelegateV2Create()
ile temsilci oluşturup TfLiteGpuDelegateV2Delete()
ile yok ederek C veya C++'da Android için TensorFlow Lite GPU temsilcisini 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şlatabilir ve ardından bunları gerektiği gibi değiştirebilirsiniz.
C veya C++'da 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, arayanın geçerli iş parçacığında bir EGLContext
olmalı ve Interpreter::Invoke()
aynı EGLContext
çağrılmalıdır. Bir EGLContext
mevcut değilse, temsilci dahili olarak bir tane oluşturur, ancak bu durumda Interpreter::Invoke()
her zaman Interpreter::ModifyGraphWithDelegate()
çağrıldığı aynı iş parçacığından çağrıldığından emin olmalısınız.
Google Play Hizmetlerinde TensorFlow Lite ile:
Google Play Hizmetleri C API'sinde TensorFlow Lite kullanıyorsanız, TensorFlow Lite çalışma zamanını başlatmadan önce cihazınız için bir GPU temsilcisinin mevcut olup olmadığını kontrol etmek için Java/Kotlin API'sini kullanmanız gerekecektir.
GPU temsilcisi gradle 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 kontrol başarılı olursa TfLiteNative'i başlatın:
Java
TasktfLiteHandleTask = 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 bayrağını içerecek şekilde güncellemeniz gerekir:
add_compile_definitions(TFLITE_USE_OPAQUE_DELEGATE)
FlatBuffers kitaplığı, temsilci eklentilerini yapılandırmak için kullanılır, bu nedenle onu yerel kodunuzun bağımlılıklarına eklemeniz gerekir. Resmi CMake
proje yapılandırmasını aşağıdaki gibi kullanabilirsiniz:
target_include_directories(tflite-jni PUBLIC
third_party/headers # flatbuffers
...)
Ayrıca başlıkları uygulamanıza da paketleyebilirsiniz.
Son olarak C kodunuzda GPU çıkarımını kullanmak için TFLiteSettings
kullanarak GPU temsilcisini 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);
Nicelenmiş modeller
Android GPU temsilci kitaplıkları varsayılan olarak nicelenmiş modelleri destekler. GPU temsilcisiyle nicelenmiş modelleri kullanmak için herhangi bir kod değişikliği yapmanız gerekmez. Aşağıdaki bölümde, test veya deneysel amaçlarla nicelenmiş desteğin nasıl devre dışı bırakılacağı açıklanmaktadır.
Nicelenmiş model desteğini devre dışı bırakın
Aşağıdaki kod, nicelenmiş modeller için desteğin nasıl devre dışı bırakılacağını gösterir.
C++
TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default(); options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_NONE; auto* delegate = TfLiteGpuDelegateV2Create(options); if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
Nicelenmiş modelleri GPU hızlandırmayla çalıştırma hakkında daha fazla bilgi için bkz. GPU temsilcisine genel bakış.