C/C++ API ile GPU hızlandırma yetkisi

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ış.