Kotlin-এর সাথে Android-এ LiteRT Next চালান

LiteRT নেক্সট APIগুলি কোটলিনে উপলব্ধ, যা Android ডেভেলপারদের উচ্চ-স্তরের APIগুলিতে অ্যাক্সেস সহ একটি নিরবচ্ছিন্ন বিকাশের অভিজ্ঞতা প্রদান করে৷

Kotlin-এ LiteRT Next অ্যাপ্লিকেশনের উদাহরণের জন্য, Kotlin ডেমো সহ চিত্র বিভাজন দেখুন।

শুরু করুন

আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনের পাশে LiteRT যুক্ত করতে নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করুন৷

Maven প্যাকেজ যোগ করুন

আপনার অ্যাপ্লিকেশনে LiteRT পরবর্তী নির্ভরতা যোগ করুন:

dependencies {
  ...
  implementation `com.google.ai.edge.litert:litert:2.0.0-alpha`
}

কম্পাইল করা মডেল তৈরি করুন

CompiledModel API ব্যবহার করে, একটি মডেল এবং আপনার পছন্দের হার্ডওয়্যার ত্বরণের সাথে রানটাইম শুরু করুন:

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite",
    CompiledModel.Options(Accelerator.CPU),
    env,
  )

ইনপুট এবং আউটপুট বাফার তৈরি করুন

ইনপুট ডেটা যা আপনি অনুমানের জন্য মডেলে ফিড করবেন এবং অনুমান চালানোর পরে মডেলটি যে আউটপুট ডেটা তৈরি করবে তা ধরে রাখতে প্রয়োজনীয় ডেটা স্ট্রাকচার (বাফার) তৈরি করুন।

val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

আপনি যদি CPU মেমরি ব্যবহার করেন, প্রথম ইনপুট বাফারে সরাসরি ডেটা লিখে ইনপুটগুলি পূরণ করুন।

inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

মডেল আহ্বান করুন

ইনপুট এবং আউটপুট বাফার প্রদান করে, কম্পাইল করা মডেল চালান।

model.run(inputBuffers, outputBuffers)

আউটপুট পুনরুদ্ধার করুন

মেমরি থেকে মডেল আউটপুট সরাসরি পড়ে আউটপুট পুনরুদ্ধার করুন।

val outputFloatArray = outputBuffers[0].readFloat()

মূল ধারণা এবং উপাদান

LiteRT Next Kotlin API-এর মূল ধারণা এবং উপাদানগুলির তথ্যের জন্য নিম্নলিখিত বিভাগগুলি পড়ুন।

বেসিক ইনফারেন্স (CPU)

নিম্নলিখিতটি LiteRT Next-এর সাথে অনুমানের একটি ঘনীভূত, সরলীকৃত বাস্তবায়ন।

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite"
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()

সংকলিত মডেল (সংকলিত মডেল)

কম্পাইলড মডেল এপিআই ( CompiledModel ) একটি মডেল লোড করা, হার্ডওয়্যার ত্বরণ প্রয়োগ, রানটাইম ইনস্ট্যান্ট করা, ইনপুট এবং আউটপুট বাফার তৈরি করা এবং অনুমান চালানোর জন্য দায়ী।

নিম্নলিখিত সরলীকৃত কোড স্নিপেট দেখায় কিভাবে কম্পাইল করা মডেল এপিআই একটি LiteRT মডেল ( .tflite ) নেয় এবং একটি সংকলিত মডেল তৈরি করে যা অনুমান চালানোর জন্য প্রস্তুত।

val  model =
  CompiledModel.create(
    context.assets,
    "mymodel.tflite"
  )

নিম্নলিখিত সরলীকৃত কোড স্নিপেট দেখায় কিভাবে CompiledModel API একটি ইনপুট এবং একটি আউটপুট বাফার নেয় এবং কম্পাইল করা মডেলের সাথে অনুমান চালায়।

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })
// Invoke
model.run(inputBuffers, outputBuffers)
// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

// Clean up buffers and model
inputBuffers.forEach { it.close() }
outputBuffers.forEach { it.close() }
model.close()

CompiledModel API কীভাবে প্রয়োগ করা হয় তার আরও সম্পূর্ণ দর্শনের জন্য, Model.kt- এ সোর্স কোড দেখুন।

টেনসর বাফার (টেনসরবাফার)

LiteRT Next I/O বাফার ইন্টারঅপারেবিলিটির জন্য অন্তর্নির্মিত সমর্থন প্রদান করে, Tensor Buffer API ( TensorBuffer ) ব্যবহার করে CompiledModel মধ্যে এবং বাইরে ডেটা প্রবাহ পরিচালনা করতে। টেনসর বাফার API ( Write<T>() ) এবং পড়তে ( Read<T>() ), এবং বাফার লক করার ক্ষমতা প্রদান করে।

Tensor Buffer API কীভাবে প্রয়োগ করা হয় তার আরও সম্পূর্ণ দর্শনের জন্য, TensorBuffer.kt- এ সোর্স কোড দেখুন।