হার্ডওয়্যার ত্বরণের জন্য বিশেষায়িত প্রসেসর যেমন GPUs, NPUs বা DSPs এর ব্যবহার নাটকীয়ভাবে অনুমান কার্যক্ষমতা (কিছু ক্ষেত্রে 10x দ্রুততর অনুমান পর্যন্ত) এবং আপনার ML-সক্ষম অ্যান্ড্রয়েড অ্যাপ্লিকেশনের ব্যবহারকারীর অভিজ্ঞতাকে উন্নত করতে পারে। যাইহোক, আপনার ব্যবহারকারীদের বিভিন্ন ধরণের হার্ডওয়্যার এবং ড্রাইভার থাকতে পারে, প্রতিটি ব্যবহারকারীর ডিভাইসের জন্য সর্বোত্তম হার্ডওয়্যার ত্বরণ কনফিগারেশন বাছাই করা চ্যালেঞ্জিং হতে পারে। অধিকন্তু, একটি ডিভাইসে ভুল কনফিগারেশন সক্ষম করা উচ্চ বিলম্বের কারণে বা, কিছু বিরল ক্ষেত্রে, হার্ডওয়্যার অসামঞ্জস্যতার কারণে রানটাইম ত্রুটি বা নির্ভুলতার সমস্যাগুলির কারণে দুর্বল ব্যবহারকারীর অভিজ্ঞতা তৈরি করতে পারে।
অ্যান্ড্রয়েডের জন্য ত্বরণ পরিষেবা হল একটি API যা আপনাকে একটি প্রদত্ত ব্যবহারকারী ডিভাইস এবং আপনার .tflite
মডেলের জন্য সর্বোত্তম হার্ডওয়্যার ত্বরণ কনফিগারেশন বাছাই করতে সাহায্য করে, যখন রানটাইম ত্রুটি বা নির্ভুলতার সমস্যাগুলির ঝুঁকি কমিয়ে দেয়৷
ত্বরণ পরিষেবা আপনার LiteRT মডেলের সাথে অভ্যন্তরীণ অনুমান বেঞ্চমার্কগুলি চালিয়ে ব্যবহারকারীর ডিভাইসে বিভিন্ন ত্বরণ কনফিগারেশন মূল্যায়ন করে। আপনার মডেলের উপর নির্ভর করে এই পরীক্ষাগুলি সাধারণত কয়েক সেকেন্ডের মধ্যে সম্পন্ন হয়। আপনি অনুমান সময়ের আগে প্রতিটি ব্যবহারকারীর ডিভাইসে একবার বেঞ্চমার্ক চালাতে পারেন, ফলাফলটি ক্যাশে করতে পারেন এবং অনুমানের সময় এটি ব্যবহার করতে পারেন। এই বেঞ্চমার্কগুলি প্রক্রিয়ার বাইরে চলে গেছে; যা আপনার অ্যাপে ক্র্যাশ হওয়ার ঝুঁকি কমিয়ে দেয়।
আপনার মডেল, ডেটা নমুনা এবং প্রত্যাশিত ফলাফল ("সোনালি" ইনপুট এবং আউটপুট) প্রদান করুন এবং ত্বরণ পরিষেবা আপনাকে হার্ডওয়্যার সুপারিশ প্রদান করার জন্য একটি অভ্যন্তরীণ TFLite অনুমান বেঞ্চমার্ক চালাবে।
ত্বরণ পরিষেবা Android এর কাস্টম ML স্ট্যাকের অংশ এবং Google Play পরিষেবাগুলিতে LiteRT এর সাথে কাজ করে৷
আপনার প্রকল্পে নির্ভরতা যোগ করুন
আপনার অ্যাপ্লিকেশনের build.gradle ফাইলে নিম্নলিখিত নির্ভরতা যোগ করুন:
implementation "com.google.android.gms:play-services-tflite-
acceleration-service:16.0.0-beta01"
অ্যাক্সিলারেশন সার্ভিস API Google Play পরিষেবাগুলিতে LiteRT-এর সাথে কাজ করে। আপনি যদি এখনও Play পরিষেবার মাধ্যমে প্রদত্ত LiteRT রানটাইম ব্যবহার না করে থাকেন, তাহলে আপনাকে আপনার নির্ভরতা আপডেট করতে হবে।
কিভাবে Acceleration Service API ব্যবহার করবেন
ত্বরণ পরিষেবা ব্যবহার করতে, আপনি যে ত্বরণ কনফিগারেশনটি আপনার মডেলের জন্য মূল্যায়ন করতে চান তা তৈরি করে শুরু করুন (যেমন OpenGL সহ GPU)। তারপর আপনার মডেল, কিছু নমুনা ডেটা এবং প্রত্যাশিত মডেল আউটপুট সহ একটি বৈধতা কনফিগারেশন তৈরি করুন। অবশেষে আপনার ত্বরণ কনফিগারেশন এবং বৈধতা কনফিগারেশন উভয় পাস করার জন্য validateConfig()
কল করুন।
ত্বরণ কনফিগারেশন তৈরি করুন
এক্সিলারেশন কনফিগারেশন হল হার্ডওয়্যার কনফিগারেশনের উপস্থাপনা যা এক্সিকিউশনের সময় প্রতিনিধিদের মধ্যে অনুবাদ করা হয়। ত্বরণ পরিষেবা তারপর এই কনফিগারেশনগুলি অভ্যন্তরীণভাবে পরীক্ষা অনুমান সম্পাদন করতে ব্যবহার করবে।
এই মুহুর্তে ত্বরণ পরিষেবা আপনাকে GpuAccelerationConfig এবং CPU অনুমানের সাথে ( CpuAccelerationConfig এর সাথে) GPU কনফিগারেশন (নির্বাহের সময় GPU প্রতিনিধিতে রূপান্তরিত) মূল্যায়ন করতে সক্ষম করে। আমরা ভবিষ্যতে অন্যান্য হার্ডওয়্যার অ্যাক্সেস করার জন্য আরও প্রতিনিধিদের সমর্থন করার জন্য কাজ করছি।
GPU ত্বরণ কনফিগারেশন
নিম্নলিখিত হিসাবে একটি GPU ত্বরণ কনফিগারেশন তৈরি করুন:
AccelerationConfig accelerationConfig = new GpuAccelerationConfig.Builder()
.setEnableQuantizedInference(false)
.build();
আপনার মডেল setEnableQuantizedInference()
এর সাথে কোয়ান্টাইজেশন ব্যবহার করছে কিনা তা আপনাকে অবশ্যই উল্লেখ করতে হবে।
CPU ত্বরণ কনফিগারেশন
নিম্নলিখিত হিসাবে CPU ত্বরণ তৈরি করুন:
AccelerationConfig accelerationConfig = new CpuAccelerationConfig.Builder()
.setNumThreads(2)
.build();
CPU অনুমান মূল্যায়ন করতে আপনি যে থ্রেডগুলি ব্যবহার করতে চান তার সংখ্যা নির্ধারণ করতে setNumThreads()
পদ্ধতিটি ব্যবহার করুন।
যাচাইকরণ কনফিগারেশন তৈরি করুন
বৈধকরণ কনফিগারেশন আপনাকে সংজ্ঞায়িত করতে সক্ষম করে যে আপনি কীভাবে ত্বরণ পরিষেবাকে অনুমানগুলি মূল্যায়ন করতে চান। আপনি পাস করতে তাদের ব্যবহার করবেন:
- ইনপুট নমুনা,
- প্রত্যাশিত ফলাফল,
- নির্ভুলতা বৈধতা যুক্তি.
ইনপুট নমুনা প্রদান করা নিশ্চিত করুন যার জন্য আপনি আপনার মডেলের ভাল পারফরম্যান্স আশা করেন ("সোনালি" নমুনা হিসাবেও পরিচিত)।
অনুসরণ করে CustomValidationConfig.Builder
দিয়ে একটি ValidationConfig
তৈরি করুন:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenOutputs(outputBuffer)
.setAccuracyValidator(new MyCustomAccuracyValidator())
.build();
setBatchSize()
দিয়ে সোনালি নমুনার সংখ্যা উল্লেখ করুন। setGoldenInputs()
ব্যবহার করে আপনার সোনার নমুনার ইনপুট পাস করুন। setGoldenOutputs()
দিয়ে পাস করা ইনপুটের জন্য প্রত্যাশিত আউটপুট প্রদান করুন।
আপনি setInferenceTimeoutMillis()
(ডিফল্টরূপে 5000 ms) দিয়ে সর্বাধিক অনুমান সময় নির্ধারণ করতে পারেন। যদি অনুমানটি আপনার সংজ্ঞায়িত সময়ের চেয়ে বেশি সময় নেয় তবে কনফিগারেশনটি প্রত্যাখ্যান করা হবে।
ঐচ্ছিকভাবে, আপনি অনুসরণ করে একটি কাস্টম AccuracyValidator
তৈরি করতে পারেন:
class MyCustomAccuracyValidator implements AccuracyValidator {
boolean validate(
BenchmarkResult benchmarkResult,
ByteBuffer[] goldenOutput) {
for (int i = 0; i < benchmarkResult.actualOutput().size(); i++) {
if (!goldenOutputs[i]
.equals(benchmarkResult.actualOutput().get(i).getValue())) {
return false;
}
}
return true;
}
}
আপনার ব্যবহারের ক্ষেত্রে কাজ করে এমন একটি বৈধতা যুক্তি সংজ্ঞায়িত করতে ভুলবেন না।
মনে রাখবেন যে যদি আপনার মডেলে যাচাইকরণের ডেটা ইতিমধ্যেই এম্বেড করা থাকে, আপনি EmbeddedValidationConfig
ব্যবহার করতে পারেন।
বৈধতা আউটপুট তৈরি করুন
গোল্ডেন আউটপুটগুলি ঐচ্ছিক এবং যতক্ষণ পর্যন্ত আপনি গোল্ডেন ইনপুটগুলি প্রদান করেন, ততক্ষণ ত্বরণ পরিষেবা অভ্যন্তরীণভাবে সোনালী আউটপুট তৈরি করতে পারে। আপনি setGoldenConfig()
কল করে এই সোনালী আউটপুটগুলি তৈরি করতে ব্যবহৃত ত্বরণ কনফিগারেশনটিও সংজ্ঞায়িত করতে পারেন:
ValidationConfig validationConfig = new CustomValidationConfig.Builder()
.setBatchSize(5)
.setGoldenInputs(inputs)
.setGoldenConfig(customCpuAccelerationConfig)
[...]
.build();
ত্বরণ কনফিগারেশন যাচাই করুন
একবার আপনি একটি ত্বরণ কনফিগারেশন এবং একটি বৈধতা কনফিগারেশন তৈরি করলে আপনি আপনার মডেলের জন্য সেগুলি মূল্যায়ন করতে পারেন।
প্লে সার্ভিসের রানটাইম সহ LiteRT সঠিকভাবে শুরু করা হয়েছে এবং GPU প্রতিনিধি ডিভাইসের জন্য রান করার মাধ্যমে উপলব্ধ রয়েছে তা নিশ্চিত করুন:
TfLiteGpu.isGpuDelegateAvailable(context)
.onSuccessTask(gpuAvailable -> TfLite.initialize(context,
TfLiteInitializationOptions.builder()
.setEnableGpuDelegateSupport(gpuAvailable)
.build()
)
);
AccelerationService.create()
কল করে AccelerationService
চালু করুন।
আপনি তারপর validateConfig()
কল করে আপনার মডেলের জন্য আপনার ত্বরণ কনফিগারেশন যাচাই করতে পারেন:
InterpreterApi interpreter;
InterpreterOptions interpreterOptions = InterpreterApi.Options();
AccelerationService.create(context)
.validateConfig(model, accelerationConfig, validationConfig)
.addOnSuccessListener(validatedConfig -> {
if (validatedConfig.isValid() && validatedConfig.benchmarkResult().hasPassedAccuracyTest()) {
interpreterOptions.setAccelerationConfig(validatedConfig);
interpreter = InterpreterApi.create(model, interpreterOptions);
});
আপনি validateConfigs()
কল করে এবং একটি পরামিতি হিসাবে একটি Iterable<AccelerationConfig>
অবজেক্ট পাস করে একাধিক কনফিগারেশন যাচাই করতে পারেন।
validateConfig()
Google Play পরিষেবা Task Api থেকে একটি Task<
ValidatedAccelerationConfigResult
>
ফেরত দেবে যা অ্যাসিঙ্ক্রোনাস কাজগুলিকে সক্ষম করে।
বৈধকরণ কল থেকে ফলাফল পেতে, একটি addOnSuccessListener()
কলব্যাক যোগ করুন।
আপনার দোভাষীতে বৈধ কনফিগারেশন ব্যবহার করুন
কলব্যাকে ফিরে আসা ValidatedAccelerationConfigResult
বৈধ কিনা তা পরীক্ষা করার পরে, আপনি আপনার ইন্টারপ্রেটার কলিং interpreterOptions.setAccelerationConfig()
এর জন্য একটি ত্বরণ কনফিগারেশন হিসাবে যাচাইকৃত কনফিগারেশন সেট করতে পারেন।
কনফিগারেশন ক্যাশিং
আপনার মডেলের জন্য সর্বোত্তম ত্বরণ কনফিগারেশন ডিভাইসে পরিবর্তন হওয়ার সম্ভাবনা কম। তাই একবার আপনি একটি সন্তোষজনক ত্বরণ কনফিগারেশন পেয়ে গেলে, আপনার এটিকে ডিভাইসে সংরক্ষণ করা উচিত এবং আপনার অ্যাপ্লিকেশনটিকে এটি পুনরুদ্ধার করতে দেওয়া উচিত এবং অন্য একটি বৈধতা চালানোর পরিবর্তে নিম্নলিখিত সেশনগুলিতে আপনার InterpreterOptions
তৈরি করতে এটি ব্যবহার করা উচিত। ValidatedAccelerationConfigResult
এ serialize()
এবং deserialize()
পদ্ধতি স্টোরেজ এবং পুনরুদ্ধার প্রক্রিয়া সহজ করে তোলে।
নমুনা আবেদন
অ্যাক্সিলারেশন পরিষেবার একটি ইন-সিটু ইন্টিগ্রেশন পর্যালোচনা করতে, নমুনা অ্যাপটি দেখুন।
সীমাবদ্ধতা
ত্বরণ পরিষেবার বর্তমান নিম্নলিখিত সীমাবদ্ধতা রয়েছে:
- এই মুহূর্তে শুধুমাত্র CPU এবং GPU ত্বরণ কনফিগারেশন সমর্থিত।
- এটি শুধুমাত্র Google Play পরিষেবাগুলিতে LiteRT সমর্থন করে এবং আপনি যদি LiteRT-এর বান্ডিল সংস্করণ ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারবেন না।
- ত্বরণ পরিষেবা SDK শুধুমাত্র API স্তর 22 এবং তার উপরে সমর্থন করে৷
সতর্কতা
অনুগ্রহ করে নিম্নলিখিত সতর্কতাগুলি সাবধানে পর্যালোচনা করুন, বিশেষ করে যদি আপনি এই SDK উৎপাদনে ব্যবহার করার পরিকল্পনা করছেন:
বিটা থেকে প্রস্থান করার আগে এবং অ্যাক্সিলারেশন সার্ভিস API-এর জন্য স্থিতিশীল সংস্করণ প্রকাশ করার আগে, আমরা একটি নতুন SDK প্রকাশ করব যার বর্তমান বিটা এক থেকে কিছু পার্থক্য থাকতে পারে। ত্বরণ পরিষেবা ব্যবহার চালিয়ে যাওয়ার জন্য, আপনাকে এই নতুন SDK-এ স্থানান্তর করতে হবে এবং একটি সময়মত আপনার অ্যাপে একটি আপডেট করতে হবে৷ এটি না করলে বিচ্ছেদের কারণ হতে পারে কারণ বিটা SDK কিছু সময়ের পরে Google Play পরিষেবাগুলির সাথে আর সামঞ্জস্যপূর্ণ নাও হতে পারে৷
অ্যাক্সিলারেশন সার্ভিস API বা সামগ্রিকভাবে API-এর মধ্যে একটি নির্দিষ্ট বৈশিষ্ট্য যে কখনও সাধারণভাবে উপলব্ধ হবে তার কোনো নিশ্চয়তা নেই। এটি অনির্দিষ্টকালের জন্য বিটাতে থাকতে পারে, বন্ধ হতে পারে বা নির্দিষ্ট বিকাশকারী দর্শকদের জন্য ডিজাইন করা প্যাকেজে অন্যান্য বৈশিষ্ট্যের সাথে একত্রিত হতে পারে। ত্বরণ পরিষেবা API বা সম্পূর্ণ API-এর সাথে কিছু বৈশিষ্ট্য অবশেষে সাধারণভাবে উপলব্ধ হতে পারে, তবে এর জন্য কোনও নির্দিষ্ট সময়সূচী নেই।
শর্তাবলী এবং গোপনীয়তা
পরিষেবার শর্তাবলী
অ্যাক্সিলারেশন সার্ভিস API-এর ব্যবহার Google API-এর পরিষেবার শর্তাবলীর সাপেক্ষে।
উপরন্তু, ত্বরণ পরিষেবা APIগুলি বর্তমানে বিটাতে রয়েছে এবং, যেমন, এটি ব্যবহার করে আপনি উপরে Caveats বিভাগে বর্ণিত সম্ভাব্য সমস্যাগুলি স্বীকার করেন এবং স্বীকার করেন যে ত্বরণ পরিষেবা সর্বদা নির্দিষ্ট হিসাবে কাজ নাও করতে পারে৷
গোপনীয়তা
আপনি যখন অ্যাক্সিলারেশন সার্ভিস API ব্যবহার করেন, তখন ইনপুট ডেটার প্রক্রিয়াকরণ (যেমন ছবি, ভিডিও, পাঠ্য) সম্পূর্ণরূপে ডিভাইসে হয় এবং অ্যাক্সিলারেশন পরিষেবা Google সার্ভারে সেই ডেটা পাঠায় না । ফলস্বরূপ, আপনি ইনপুট ডেটা প্রক্রিয়াকরণের জন্য আমাদের APIগুলি ব্যবহার করতে পারেন যা ডিভাইসটি ছেড়ে যাবে না৷
এক্সিলারেশন সার্ভিস এপিআইগুলি বাগ ফিক্স, আপডেট করা মডেল এবং হার্ডওয়্যার এক্সিলারেটর সামঞ্জস্যের তথ্যের মতো জিনিসগুলি পাওয়ার জন্য সময়ে সময়ে Google সার্ভারের সাথে যোগাযোগ করতে পারে। অ্যাক্সিলারেশন সার্ভিস APIগুলি আপনার অ্যাপের APIগুলির কার্যকারিতা এবং ব্যবহার সম্পর্কে মেট্রিক্স Google-এ পাঠায়৷ Google এই মেট্রিক্স ডেটা ব্যবহার করে পারফরম্যান্স পরিমাপ, ডিবাগ, রক্ষণাবেক্ষণ এবং APIগুলি উন্নত করতে এবং অপব্যবহার বা অপব্যবহার শনাক্ত করতে, যেমন আমাদের গোপনীয়তা নীতিতে আরও বর্ণিত হয়েছে৷
প্রযোজ্য আইনের প্রয়োজন অনুসারে আপনার অ্যাপের ব্যবহারকারীদের Google-এর প্রসেসিং অ্যাক্সিলারেশন সার্ভিস মেট্রিক্স ডেটা সম্পর্কে জানানোর জন্য আপনি দায়ী৷
আমরা যে ডেটা সংগ্রহ করি তার মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:
- ডিভাইস তথ্য (যেমন প্রস্তুতকারক, মডেল, OS সংস্করণ এবং বিল্ড) এবং উপলব্ধ ML হার্ডওয়্যার এক্সিলারেটর (GPU এবং DSP)। ডায়াগনস্টিকস এবং ব্যবহার বিশ্লেষণের জন্য ব্যবহৃত হয়।
- অ্যাপের তথ্য (প্যাকেজের নাম/বান্ডেল আইডি, অ্যাপ সংস্করণ)। ডায়াগনস্টিকস এবং ব্যবহার বিশ্লেষণের জন্য ব্যবহৃত হয়।
- API কনফিগারেশন (যেমন চিত্র বিন্যাস এবং রেজোলিউশন)। ডায়াগনস্টিকস এবং ব্যবহার বিশ্লেষণের জন্য ব্যবহৃত হয়।
- ইভেন্টের ধরন (যেমন আরম্ভ, ডাউনলোড মডেল, আপডেট, রান, সনাক্তকরণ)। ডায়াগনস্টিকস এবং ব্যবহার বিশ্লেষণের জন্য ব্যবহৃত হয়।
- ত্রুটি কোড. ডায়াগনস্টিকস জন্য ব্যবহৃত.
- কর্মক্ষমতা মেট্রিক্স। ডায়াগনস্টিকস জন্য ব্যবহৃত.
- প্রতি-ইন্সটলেশন শনাক্তকারী যা একটি ব্যবহারকারী বা শারীরিক ডিভাইসকে স্বতন্ত্রভাবে সনাক্ত করে না। দূরবর্তী কনফিগারেশন এবং ব্যবহার বিশ্লেষণের জন্য ব্যবহৃত হয়।
- নেটওয়ার্ক অনুরোধ প্রেরক আইপি ঠিকানা. দূরবর্তী কনফিগারেশন ডায়গনিস্টিক জন্য ব্যবহৃত. সংগৃহীত আইপি ঠিকানাগুলি সাময়িকভাবে রাখা হয়।
সমর্থন এবং প্রতিক্রিয়া
আপনি টেনসরফ্লো ইস্যু ট্র্যাকারের মাধ্যমে প্রতিক্রিয়া জানাতে এবং সমর্থন পেতে পারেন। Google Play পরিষেবাতে LiteRT-এর ইস্যু টেমপ্লেট ব্যবহার করে অনুগ্রহ করে সমস্যা এবং সহায়তার অনুরোধ জানান।