C/C++ API সহ GPU ত্বরণ প্রতিনিধি

আপনার মেশিন লার্নিং (ML) মডেলগুলি চালানোর জন্য গ্রাফিক্স প্রসেসিং ইউনিট (GPUs) ব্যবহার করা আপনার ML-সক্ষম অ্যাপ্লিকেশনগুলির কর্মক্ষমতা এবং ব্যবহারকারীর অভিজ্ঞতাকে নাটকীয়ভাবে উন্নত করতে পারে। অ্যান্ড্রয়েড ডিভাইসে, আপনি প্রতিনিধি এবং নিম্নলিখিত APIগুলির মধ্যে একটি ব্যবহার করে আপনার মডেলগুলির GPU-এক্সিলারেটেড এক্সিকিউশন সক্ষম করতে পারেন:

  • ইন্টারপ্রেটার API - গাইড
  • নেটিভ (C/C++) API - এই নির্দেশিকা

এই নির্দেশিকা C API, C++ API, এবং কোয়ান্টাইজড মডেলগুলির ব্যবহারের জন্য GPU প্রতিনিধির উন্নত ব্যবহারগুলি কভার করে। সেরা অনুশীলন এবং উন্নত কৌশল সহ LiteRT-এর জন্য GPU প্রতিনিধি ব্যবহার সম্পর্কে আরও তথ্যের জন্য, GPU প্রতিনিধি পৃষ্ঠাটি দেখুন।

GPU ত্বরণ সক্ষম করুন

TfLiteGpuDelegateV2Create() দিয়ে প্রতিনিধি তৈরি করে এবং TfLiteGpuDelegateV2Delete() দিয়ে ধ্বংস করে C বা C++ এ Android এর জন্য LiteRT GPU প্রতিনিধি ব্যবহার করুন, যেমনটি নিম্নলিখিত উদাহরণ কোডে দেখানো হয়েছে:

// 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() দিয়ে ডিফল্ট বিকল্পগুলি শুরু করতে পারেন এবং তারপরে প্রয়োজনে সেগুলি সংশোধন করতে পারেন।

C বা C++ এ Android এর জন্য LiteRT GPU প্রতিনিধি 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() বলা হয়েছিল।

Google Play পরিষেবাতে LiteRT সহ:

আপনি যদি Google Play পরিষেবা C API- এ LiteRT ব্যবহার করেন, তাহলে LiteRT রানটাইম শুরু করার আগে আপনার ডিভাইসের জন্য একটি GPU প্রতিনিধি উপলব্ধ কিনা তা পরীক্ষা করতে আপনাকে Java/Kotlin API ব্যবহার করতে হবে।

আপনার অ্যাপ্লিকেশনে GPU প্রতিনিধি গ্রেডেল নির্ভরতা যোগ করুন:

implementation 'com.google.android.gms:play-services-tflite-gpu:16.2.0'

তারপর, GPU প্রাপ্যতা পরীক্ষা করুন এবং চেক সফল হলে TfLiteNative শুরু করুন:

জাভা

Task<Void> tfLiteHandleTask =
TfLiteGpu.isGpuDelegateAvailable(this)
   .onSuccessTask(gpuAvailable -> {
      TfLiteInitializationOptions options =
        TfLiteInitializationOptions.builder()
          .setEnableGpuDelegateSupport(gpuAvailable).build();
        return TfLiteNative.initialize(this, options);
      }
    );
      

কোটলিন

val tfLiteHandleTask = TfLiteGpu.isGpuDelegateAvailable(this)
    .onSuccessTask { gpuAvailable ->
        val options = TfLiteInitializationOptions.Builder()
            .setEnableGpuDelegateSupport(gpuAvailable)
            .build()
        TfLiteNative.initialize(this, options)
    }
        

TFLITE_USE_OPAQUE_DELEGATE কম্পাইলার পতাকা অন্তর্ভুক্ত করার জন্য আপনাকে আপনার CMake কনফিগারেশন আপডেট করতে হবে:

add_compile_definitions(TFLITE_USE_OPAQUE_DELEGATE)

ফ্ল্যাটবাফারস লাইব্রেরি প্রতিনিধি প্লাগইন কনফিগার করতে ব্যবহৃত হয়, তাই আপনাকে এটি আপনার নেটিভ কোডের নির্ভরতাগুলিতে যুক্ত করতে হবে। আপনি নিম্নলিখিত হিসাবে অফিসিয়াল CMake প্রকল্প কনফিগারেশন ব্যবহার করতে পারেন:

target_include_directories(tflite-jni PUBLIC
        third_party/headers # flatbuffers
     ...)

আপনি আপনার অ্যাপে হেডারগুলিকে বান্ডিল করতে পারেন।

অবশেষে আপনার সি কোডে GPU অনুমান ব্যবহার করতে, TFLiteSettings ব্যবহার করে GPU প্রতিনিধি তৈরি করুন:

#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);

কোয়ান্টাইজড মডেল

অ্যান্ড্রয়েড জিপিইউ প্রতিনিধি লাইব্রেরিগুলি ডিফল্টরূপে কোয়ান্টাইজড মডেলগুলিকে সমর্থন করে। জিপিইউ প্রতিনিধির সাথে কোয়ান্টাইজড মডেল ব্যবহার করার জন্য আপনাকে কোনো কোড পরিবর্তন করতে হবে না। নিম্নলিখিত বিভাগটি ব্যাখ্যা করে কিভাবে পরীক্ষা বা পরীক্ষামূলক উদ্দেশ্যে কোয়ান্টাইজড সমর্থন অক্ষম করা যায়।

কোয়ান্টাইজড মডেল সমর্থন অক্ষম করুন

নিম্নোক্ত কোডটি দেখায় কিভাবে কোয়ান্টাইজড মডেলের জন্য সমর্থন অক্ষম করা যায়।

সি++

TfLiteGpuDelegateOptionsV2 options = TfLiteGpuDelegateOptionsV2Default();
options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_NONE;

auto* delegate = TfLiteGpuDelegateV2Create(options);
if (interpreter->ModifyGraphWithDelegate(delegate) != kTfLiteOk) return false;
      

GPU ত্বরণ সহ কোয়ান্টাইজড মডেল চালানোর বিষয়ে আরও তথ্যের জন্য, GPU প্রতিনিধি ওভারভিউ দেখুন।