টেনসরফ্লো লাইট হেক্সাগন প্রতিনিধি,টেনসরফ্লো লাইট হেক্সাগন প্রতিনিধি

এই নথিটি ব্যাখ্যা করে যে কীভাবে জাভা এবং/অথবা C API ব্যবহার করে আপনার অ্যাপ্লিকেশনে টেনসরফ্লো লাইট হেক্সাগন ডেলিগেট ব্যবহার করবেন। প্রতিনিধি ডিএসপিতে কোয়ান্টাইজড কার্নেল চালানোর জন্য কোয়ালকম হেক্সাগন লাইব্রেরি ব্যবহার করে। মনে রাখবেন যে প্রতিনিধিটি এনএনএপিআই কার্যকারিতা পরিপূরক করার উদ্দেশ্যে, বিশেষ করে এমন ডিভাইসগুলির জন্য যেখানে এনএনএপিআই ডিএসপি ত্বরণ অনুপলব্ধ (উদাহরণস্বরূপ, পুরানো ডিভাইসগুলিতে, বা যে ডিভাইসগুলিতে এখনও ডিএসপি এনএনএপিআই ড্রাইভার নেই)।

সমর্থিত ডিভাইসের:

বর্তমানে নিম্নলিখিত ষড়ভুজ স্থাপত্য সমর্থিত, যার মধ্যে রয়েছে কিন্তু সীমাবদ্ধ নয়:

  • ষড়ভুজ 680
    • SoC উদাহরণ: Snapdragon 821, 820, 660
  • ষড়ভুজ 682
    • SoC উদাহরণ: স্ন্যাপড্রাগন 835
  • ষড়ভুজ 685
    • SoC উদাহরণ: Snapdragon 845, Snapdragon 710, QCS410, QCS610, QCS605, QCS603
  • ষড়ভুজ 690
    • SoC উদাহরণ: Snapdragon 855, RB5

সমর্থিত মডেল:

হেক্সাগন প্রতিনিধি সমস্ত মডেলকে সমর্থন করে যেগুলি আমাদের 8-বিট সিমেট্রিক কোয়ান্টাইজেশন স্পেকের সাথে সঙ্গতিপূর্ণ, যার মধ্যে ট্রেনিং-পরবর্তী পূর্ণসংখ্যা কোয়ান্টাইজেশন ব্যবহার করে তৈরি করা হয়েছে৷ লিগ্যাসি কোয়ান্টাইজেশন-সচেতন প্রশিক্ষণ পথের সাথে প্রশিক্ষিত UInt8 মডেলগুলিও সমর্থিত, উদাহরণস্বরূপ, আমাদের হোস্ট করা মডেল পৃষ্ঠায় এই কোয়ান্টাইজড সংস্করণগুলি

হেক্সাগন প্রতিনিধি জাভা API

public class HexagonDelegate implements Delegate, Closeable {

  /*
   * Creates a new HexagonDelegate object given the current 'context'.
   * Throws UnsupportedOperationException if Hexagon DSP delegation is not
   * available on this device.
   */
  public HexagonDelegate(Context context) throws UnsupportedOperationException


  /**
   * Frees TFLite resources in C runtime.
   *
   * User is expected to call this method explicitly.
   */
  @Override
  public void close();
}

উদাহরণ ব্যবহার

ধাপ 1. রাত্রিকালীন হেক্সাগন প্রতিনিধি AAR ব্যবহার করতে app/build.gradle সম্পাদনা করুন

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
  implementation 'org.tensorflow:tensorflow-lite-hexagon:0.0.0-nightly-SNAPSHOT'
}

ধাপ 2. আপনার অ্যান্ড্রয়েড অ্যাপে হেক্সাগন লাইব্রেরি যোগ করুন

  • ডাউনলোড করুন এবং চালান hexagon_nn_skel.run। এটি 3টি ভিন্ন শেয়ার করা লাইব্রেরি "libhexagon_nn_skel.so", "libhexagon_nn_skel_v65.so", "libhexagon_nn_skel_v66.so" প্রদান করবে

ধাপ 3. একটি প্রতিনিধি তৈরি করুন এবং একটি টেনসরফ্লো লাইট ইন্টারপ্রেটার শুরু করুন

import org.tensorflow.lite.HexagonDelegate;

// Create the Delegate instance.
try {
  hexagonDelegate = new HexagonDelegate(activity);
  tfliteOptions.addDelegate(hexagonDelegate);
} catch (UnsupportedOperationException e) {
  // Hexagon delegate is not supported on this device.
}

tfliteInterpreter = new Interpreter(tfliteModel, tfliteOptions);

// Dispose after finished with inference.
tfliteInterpreter.close();
if (hexagonDelegate != null) {
  hexagonDelegate.close();
}

হেক্সাগন প্রতিনিধি C API

struct TfLiteHexagonDelegateOptions {
  // This corresponds to the debug level in the Hexagon SDK. 0 (default)
  // means no debug.
  int debug_level;
  // This corresponds to powersave_level in the Hexagon SDK.
  // where 0 (default) means high performance which means more power
  // consumption.
  int powersave_level;
  // If set to true, performance information about the graph will be dumped
  // to Standard output, this includes cpu cycles.
  // WARNING: Experimental and subject to change anytime.
  bool print_graph_profile;
  // If set to true, graph structure will be dumped to Standard output.
  // This is usually beneficial to see what actual nodes executed on
  // the DSP. Combining with 'debug_level' more information will be printed.
  // WARNING: Experimental and subject to change anytime.
  bool print_graph_debug;
};

// Return a delegate that uses Hexagon SDK for ops execution.
// Must outlive the interpreter.
TfLiteDelegate*
TfLiteHexagonDelegateCreate(const TfLiteHexagonDelegateOptions* options);

// Do any needed cleanup and delete 'delegate'.
void TfLiteHexagonDelegateDelete(TfLiteDelegate* delegate);

// Initializes the DSP connection.
// This should be called before doing any usage of the delegate.
// "lib_directory_path": Path to the directory which holds the
// shared libraries for the Hexagon NN libraries on the device.
void TfLiteHexagonInitWithPath(const char* lib_directory_path);

// Same as above method but doesn't accept the path params.
// Assumes the environment setup is already done. Only initialize Hexagon.
Void TfLiteHexagonInit();

// Clean up and switch off the DSP connection.
// This should be called after all processing is done and delegate is deleted.
Void TfLiteHexagonTearDown();

উদাহরণ ব্যবহার

ধাপ 1. রাত্রিকালীন হেক্সাগন প্রতিনিধি AAR ব্যবহার করতে app/build.gradle সম্পাদনা করুন

dependencies {
  ...
  implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
  implementation 'org.tensorflow:tensorflow-lite-hexagon:0.0.0-nightly-SNAPSHOT'
}

ধাপ 2. আপনার অ্যান্ড্রয়েড অ্যাপে হেক্সাগন লাইব্রেরি যোগ করুন

  • ডাউনলোড করুন এবং চালান hexagon_nn_skel.run। এটি 3টি ভিন্ন শেয়ার করা লাইব্রেরি "libhexagon_nn_skel.so", "libhexagon_nn_skel_v65.so", "libhexagon_nn_skel_v66.so" প্রদান করবে

ধাপ 3. C শিরোনাম অন্তর্ভুক্ত করুন

  • হেডার ফাইল "hexagon_delegate.h" গিটহাব থেকে ডাউনলোড করা যেতে পারে বা হেক্সাগন প্রতিনিধি AAR থেকে বের করা যেতে পারে।

ধাপ 4. একটি প্রতিনিধি তৈরি করুন এবং একটি টেনসরফ্লো লাইট ইন্টারপ্রেটার শুরু করুন

  • আপনার কোডে, নিশ্চিত করুন নেটিভ হেক্সাগন লাইব্রেরি লোড হয়েছে। System.loadLibrary("tensorflowlite_hexagon_jni");
    আপনার কার্যকলাপ বা জাভা এন্ট্রি-পয়েন্টে।

  • একটি প্রতিনিধি তৈরি করুন, উদাহরণ:

#include "tensorflow/lite/delegates/hexagon/hexagon_delegate.h"

// Assuming shared libraries are under "/data/local/tmp/"
// If files are packaged with native lib in android App then it
// will typically be equivalent to the path provided by
// "getContext().getApplicationInfo().nativeLibraryDir"
const char[] library_directory_path = "/data/local/tmp/";
TfLiteHexagonInitWithPath(library_directory_path);  // Needed once at startup.
::tflite::TfLiteHexagonDelegateOptions params = {0};
// 'delegate_ptr' Need to outlive the interpreter. For example,
// If your use case requires resizing the input or anything that can trigger
// re-applying delegates then 'delegate_ptr' must outlive the interpreter.
auto* delegate_ptr = ::tflite::TfLiteHexagonDelegateCreate(&params);
Interpreter::TfLiteDelegatePtr delegate(delegate_ptr,
  [](TfLiteDelegate* delegate) {
    ::tflite::TfLiteHexagonDelegateDelete(delegate);
  });
interpreter->ModifyGraphWithDelegate(delegate.get());
// After usage of delegate.
TfLiteHexagonTearDown();  // Needed once at end of app/DSP usage.

আপনার অ্যাপে শেয়ার করা লাইব্রেরি যোগ করুন

  • "app/src/main/jniLibs" ফোল্ডার তৈরি করুন এবং প্রতিটি টার্গেট আর্কিটেকচারের জন্য একটি ডিরেক্টরি তৈরি করুন। উদাহরণ স্বরূপ,
    • ARM 64-বিট: app/src/main/jniLibs/arm64-v8a
    • ARM 32-বিট: app/src/main/jniLibs/armeabi-v7a
  • আর্কিটেকচারের সাথে মেলে এমন ডিরেক্টরিতে আপনার .so দিন।

প্রতিক্রিয়া

সমস্যার জন্য, অনুগ্রহ করে ফোনের মডেল এবং ব্যবহৃত বোর্ড ( adb shell getprop ro.product.device এবং adb shell getprop ro.board.platform ) সহ সমস্ত প্রয়োজনীয় রিপ্রো বিবরণ সহ একটি GitHub সমস্যা তৈরি করুন।

FAQ

  • কোন অপ্স প্রতিনিধি দ্বারা সমর্থিত হয়?
  • আমি কিভাবে বলতে পারি যে মডেলটি ডিএসপি ব্যবহার করছে যখন আমি প্রতিনিধি সক্ষম করব?
    • আপনি যখন প্রতিনিধি সক্রিয় করবেন তখন দুটি লগ বার্তা প্রিন্ট করা হবে - একটি প্রতিনিধি তৈরি করা হয়েছে কিনা তা নির্দেশ করতে এবং অন্যটি প্রতিনিধি ব্যবহার করে কতগুলি নোড চলছে তা নির্দেশ করতে।
      Created TensorFlow Lite delegate for Hexagon.
      Hexagon delegate: X nodes delegated out of Y nodes.
  • ডেলিগেট চালানোর জন্য সমর্থিত মডেলের সমস্ত অপ্স কি আমার দরকার?
    • না, সমর্থিত অপ্সের উপর ভিত্তি করে মডেলটিকে সাবগ্রাফে বিভক্ত করা হবে। যেকোন অসমর্থিত অপারেশন CPU-তে চলবে।
  • আমি কিভাবে উৎস থেকে হেক্সাগন প্রতিনিধি AAR তৈরি করতে পারি?
    • bazel build -c opt --config=android_arm64 tensorflow/lite/delegates/hexagon/java:tensorflow-lite-hexagon ব্যবহার করুন।
  • কেন হেক্সাগন ডেলিগেট আরম্ভ করতে ব্যর্থ হয় যদিও আমার অ্যান্ড্রয়েড ডিভাইসে একটি সমর্থিত SoC আছে?
    • আপনার ডিভাইসে সত্যিই একটি সমর্থিত SoC আছে কিনা তা যাচাই করুন। চালান adb shell cat /proc/cpuinfo | grep Hardware এবং দেখুন এটি "হার্ডওয়্যার: কোয়ালকম টেকনোলজিস, ইনক এমএসএমএক্সএক্সএক্সএক্স" এর মতো কিছু দেয় কিনা।
    • কিছু ফোন নির্মাতা একই ফোন মডেলের জন্য বিভিন্ন SoC ব্যবহার করে। অতএব, হেক্সাগন প্রতিনিধি শুধুমাত্র কিছুতে কাজ করতে পারে কিন্তু একই ফোন মডেলের সমস্ত ডিভাইসে নয়।
    • কিছু ফোন প্রস্তুতকারক ইচ্ছাকৃতভাবে নন-সিস্টেম অ্যান্ড্রয়েড অ্যাপ থেকে হেক্সাগন ডিএসপি ব্যবহার সীমাবদ্ধ করে, যার ফলে হেক্সাগন প্রতিনিধি কাজ করতে অক্ষম।
  • আমার ফোন ডিএসপি অ্যাক্সেস লক করেছে। আমি ফোন রুট করেও ডেলিগেট চালাতে পারছি না, কী করব?
    • adb shell setenforce 0 চালিয়ে SELinux এনফোর্স অক্ষম করা নিশ্চিত করুন