Google Play পরিষেবা জাভা API-এ LiteRT

নেটিভ এপিআই ছাড়াও জাভা API ব্যবহার করে Google Play পরিষেবাতে LiteRT অ্যাক্সেস করা যেতে পারে। বিশেষ করে, Google Play পরিষেবাগুলিতে LiteRT LiteRT ইন্টারপ্রেটার API এর মাধ্যমে উপলব্ধ।

ইন্টারপ্রেটার এপিআই ব্যবহার করে

টেনসরফ্লো রানটাইম দ্বারা প্রদত্ত LiteRT ইন্টারপ্রেটার এপিআই, এমএল মডেল তৈরি এবং চালানোর জন্য একটি সাধারণ-উদ্দেশ্য ইন্টারফেস প্রদান করে। Google Play পরিষেবার রানটাইমে TensorFlow Lite ব্যবহার করে ইন্টারপ্রেটার API-এর সাহায্যে অনুমান চালানোর জন্য নিম্নলিখিত ধাপগুলি ব্যবহার করুন।

1. প্রকল্প নির্ভরতা যোগ করুন

LiteRT এর জন্য Play পরিষেবা API অ্যাক্সেস করতে আপনার অ্যাপ প্রকল্প কোডে নিম্নলিখিত নির্ভরতা যোগ করুন:

dependencies {
...
    // LiteRT dependencies for Google Play services
    implementation 'com.google.android.gms:play-services-tflite-java:16.0.1'
    // Optional: include LiteRT Support Library
    implementation 'com.google.android.gms:play-services-tflite-support:16.0.1'
...
}

2. LiteRT এর সূচনা যোগ করুন

LiteRT API ব্যবহার করার আগে Google Play পরিষেবা API-এর LiteRT উপাদানটি শুরু করুন:

কোটলিন

val initializeTask: Task<Void> by lazy { TfLite.initialize(this) }

জাভা

Task<Void> initializeTask = TfLite.initialize(context);

3. একটি দোভাষী তৈরি করুন এবং রানটাইম বিকল্প সেট করুন

InterpreterApi.create() ব্যবহার করে একটি দোভাষী তৈরি করুন এবং InterpreterApi.Options.setRuntime() কল করে Google Play পরিষেবার রানটাইম ব্যবহার করার জন্য এটিকে কনফিগার করুন, নিম্নলিখিত উদাহরণ কোডে দেখানো হয়েছে:

কোটলিন

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private lateinit var interpreter: InterpreterApi
...
initializeTask.addOnSuccessListener {
  val interpreterOption =
    InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  interpreter = InterpreterApi.create(
    modelBuffer,
    interpreterOption
  )}
  .addOnFailureListener { e ->
    Log.e("Interpreter", "Cannot initialize interpreter", e)
  }

জাভা

import org.tensorflow.lite.InterpreterApi
import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime
...
private InterpreterApi interpreter;
...
initializeTask.addOnSuccessListener(a -> {
    interpreter = InterpreterApi.create(modelBuffer,
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY));
  })
  .addOnFailureListener(e -> {
    Log.e("Interpreter", String.format("Cannot initialize interpreter: %s",
          e.getMessage()));
  });

আপনার উপরের বাস্তবায়ন ব্যবহার করা উচিত কারণ এটি অ্যান্ড্রয়েড ব্যবহারকারী ইন্টারফেস থ্রেড ব্লক করা এড়ায়। আপনি যদি আরও ঘনিষ্ঠভাবে থ্রেড এক্সিকিউশন পরিচালনা করতে চান, আপনি দোভাষী তৈরিতে একটি Tasks.await() কল যোগ করতে পারেন:

কোটলিন

import androidx.lifecycle.lifecycleScope
...
lifecycleScope.launchWhenStarted { // uses coroutine
  initializeTask.await()
}

জাভা

@BackgroundThread
InterpreterApi initializeInterpreter() {
    Tasks.await(initializeTask);
    return InterpreterApi.create(...);
}

4. অনুমান চালান

আপনার তৈরি করা interpreter অবজেক্ট ব্যবহার করে, একটি অনুমান তৈরি করতে run() পদ্ধতিতে কল করুন।

কোটলিন

interpreter.run(inputBuffer, outputBuffer)

জাভা

interpreter.run(inputBuffer, outputBuffer);

হার্ডওয়্যার ত্বরণ

LiteRT আপনাকে বিশেষ হার্ডওয়্যার প্রসেসর, যেমন গ্রাফিক্স প্রসেসিং ইউনিট (GPUs) ব্যবহার করে আপনার মডেলের কর্মক্ষমতা ত্বরান্বিত করতে দেয়। আপনি ডেলিগেট নামক হার্ডওয়্যার ড্রাইভার ব্যবহার করে এই বিশেষায়িত প্রসেসরগুলির সুবিধা নিতে পারেন।

GPU প্রতিনিধি Google Play পরিষেবার মাধ্যমে সরবরাহ করা হয় এবং ইন্টারপ্রেটার API-এর প্লে পরিষেবা সংস্করণগুলির মতোই গতিশীলভাবে লোড করা হয়৷

ডিভাইসের সামঞ্জস্যতা পরীক্ষা করা হচ্ছে

সমস্ত ডিভাইস TFLite এর সাথে GPU হার্ডওয়্যার ত্বরণ সমর্থন করে না। ত্রুটি এবং সম্ভাব্য ক্র্যাশগুলি হ্রাস করার জন্য, একটি ডিভাইস GPU প্রতিনিধির সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করতে TfLiteGpu.isGpuDelegateAvailable পদ্ধতি ব্যবহার করুন৷

একটি ডিভাইস GPU এর সাথে সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করতে এই পদ্ধতিটি ব্যবহার করুন এবং GPU সমর্থিত না হলে একটি ফলব্যাক হিসাবে CPU ব্যবহার করুন৷

useGpuTask = TfLiteGpu.isGpuDelegateAvailable(context)

একবার আপনার কাছে useGpuTask এর মত একটি ভেরিয়েবল থাকলে, ডিভাইসগুলি GPU প্রতিনিধি ব্যবহার করে কিনা তা নির্ধারণ করতে আপনি এটি ব্যবহার করতে পারেন।

কোটলিন

val interpreterTask = useGpuTask.continueWith { task ->
  val interpreterOptions = InterpreterApi.Options()
      .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
  if (task.result) {
      interpreterOptions.addDelegateFactory(GpuDelegateFactory())
  }
  InterpreterApi.create(FileUtil.loadMappedFile(context, MODEL_PATH), interpreterOptions)
}
    

জাভা

Task<InterpreterApi.Options> interpreterOptionsTask = useGpuTask.continueWith({ task ->
  InterpreterApi.Options options =
      new InterpreterApi.Options().setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY);
  if (task.getResult()) {
     options.addDelegateFactory(new GpuDelegateFactory());
  }
  return options;
});
    

ইন্টারপ্রেটার API সহ GPU

ইন্টারপ্রেটার API-এর সাথে GPU প্রতিনিধি ব্যবহার করতে:

  1. প্লে পরিষেবাগুলি থেকে GPU প্রতিনিধি ব্যবহার করতে প্রকল্প নির্ভরতা আপডেট করুন:

    implementation 'com.google.android.gms:play-services-tflite-gpu:16.1.0'
    
  2. TFlite শুরুতে GPU প্রতিনিধি বিকল্পটি সক্ষম করুন:

    কোটলিন

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build())
        

    জাভা

        TfLite.initialize(context,
          TfLiteInitializationOptions.builder()
           .setEnableGpuDelegateSupport(true)
           .build());
        
  3. দোভাষী বিকল্পগুলিতে GPU প্রতিনিধি সক্ষম করুন: InterpreterApi.Options()` addDelegateFactory() within কল করে GpuDelegateFactory-তে প্রতিনিধি ফ্যাক্টরি সেট করুন:

    কোটলিন

    val interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY)
    .addDelegateFactory(GpuDelegateFactory())
    

    জাভা

    Options interpreterOption = InterpreterApi.Options()
    .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) .addDelegateFactory(new
    GpuDelegateFactory());
    

স্ট্যান্ড-অলোন LiteRT থেকে মাইগ্রেট করা

আপনি যদি আপনার অ্যাপটিকে স্ট্যান্ড-অলোন LiteRT থেকে Play পরিষেবা API-তে স্থানান্তর করার পরিকল্পনা করছেন, তাহলে আপনার অ্যাপ প্রকল্প কোড আপডেট করার জন্য নিম্নলিখিত অতিরিক্ত নির্দেশিকা পর্যালোচনা করুন:

  1. আপনার ব্যবহারের ক্ষেত্রে সমর্থিত তা নিশ্চিত করতে এই পৃষ্ঠার সীমাবদ্ধতা বিভাগটি পর্যালোচনা করুন।
  2. আপনার কোড আপডেট করার আগে, আপনার মডেলগুলির জন্য কর্মক্ষমতা এবং নির্ভুলতা পরীক্ষা করুন, বিশেষ করে যদি আপনি সংস্করণ 2.1 এর আগে LiteRT-এর সংস্করণগুলি ব্যবহার করেন, তাই নতুন বাস্তবায়নের সাথে তুলনা করার জন্য আপনার কাছে একটি বেসলাইন রয়েছে।
  3. আপনি যদি LiteRT-এর জন্য Play পরিষেবা API ব্যবহার করার জন্য আপনার সমস্ত কোড স্থানান্তরিত করে থাকেন, তাহলে আপনার build.gradle ফাইল থেকে আপনার বিদ্যমান LiteRT রানটাইম লাইব্রেরি নির্ভরতা ( org.tensorflow: tensorflow-lite :* এর সাথে এন্ট্রিগুলি) সরিয়ে ফেলা উচিত যাতে আপনি হ্রাস করতে পারেন আপনার অ্যাপের আকার।
  4. আপনার কোডে new Interpreter অবজেক্ট তৈরির সমস্ত ঘটনা শনাক্ত করুন এবং প্রত্যেকটিকে পরিবর্তন করুন যাতে এটি InterpreterApi.create() কল ব্যবহার করে। নতুন TfLite.initialize হল অ্যাসিঙ্ক্রোনাস, যার মানে বেশিরভাগ ক্ষেত্রে এটি একটি ড্রপ-ইন প্রতিস্থাপন নয়: কলটি সম্পূর্ণ হওয়ার জন্য আপনাকে অবশ্যই একজন শ্রোতা নিবন্ধন করতে হবে। ধাপ 3 কোডে কোড স্নিপেট পড়ুন।
  5. import org.tensorflow.lite.InterpreterApi; এবং import org.tensorflow.lite.InterpreterApi.Options.TfLiteRuntime; org.tensorflow.lite.Interpreter বা org.tensorflow.lite.InterpreterApi ক্লাস ব্যবহার করে যেকোন সোর্স ফাইলে।
  6. InterpreterApi.create() -এ যেকোনও কলে শুধুমাত্র একটি আর্গুমেন্ট থাকলে, আর্গুমেন্ট তালিকায় new InterpreterApi.Options() যোগ করুন।
  7. InterpreterApi.create() -এ যেকোনো কলের শেষ আর্গুমেন্টে .setRuntime(TfLiteRuntime.FROM_SYSTEM_ONLY) যোগ করুন।
  8. org.tensorflow.lite.Interpreter ক্লাসের অন্যান্য সমস্ত ঘটনাকে org.tensorflow.lite.InterpreterApi দিয়ে প্রতিস্থাপন করুন।

আপনি যদি স্ট্যান্ড-অলোন LiteRT এবং Play পরিষেবা API পাশাপাশি ব্যবহার করতে চান, তাহলে আপনাকে অবশ্যই LiteRT 2.9 (বা তার পরে) ব্যবহার করতে হবে। LiteRT 2.8 এবং আগের সংস্করণগুলি Play পরিষেবা API সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়৷