অ্যান্ড্রয়েড ১৭ এবং এর পরবর্তী সংস্করণগুলো নিউরাল প্রসেসিং ইউনিট (NPU) ম্যানেজার ( com.android.npumanager ) সমর্থন করে, যা সিস্টেম পরিষেবা এবং অ্যাপ্লিকেশন ওয়ার্কলোড জুড়ে NPU রিসোর্সের বরাদ্দ এবং সময়সূচী সমন্বয় করে। কাস্টম ভেন্ডর ডেমন থেকে অ্যান্ড্রয়েড প্ল্যাটফর্মে রিসোর্স আরবিট্রেশন স্থানান্তর করার মাধ্যমে, NPU ম্যানেজার পূর্বাভাসযোগ্যতা বৃদ্ধি করে, রিসোর্সের অভাব প্রতিরোধ করে, তাপীয় সীমা পরিচালনা করে এবং ডিভাইসের সামগ্রিক কর্মক্ষমতা উন্নত করে।
পটভূমি এবং প্রেরণা
এনপিইউ ম্যানেজারের আগে, অ্যাপ এবং সিস্টেম মডিউলগুলো সরাসরি ভেন্ডর ড্রাইভার বা নিজস্ব সার্ভিসগুলোতে ওয়ার্কলোড জমা দিত। এই পদ্ধতির বেশ কিছু অসুবিধা ছিল:
- অদক্ষ রিসোর্স প্রতিযোগিতা: ভারী মেশিন লার্নিং ওয়ার্কলোড (যেমন লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) ইনফারেন্স ইঞ্জিন বা অন-ডিভাইস ভিশন সিস্টেম) সীমিত NPU রিসোর্সের (যেমন SRAM, ওয়েটস মেমরি এবং এক্সিকিউশন চ্যানেল) জন্য অন্যান্য উচ্চ-অগ্রাধিকার সম্পন্ন সিস্টেমের সাথে সরাসরি প্রতিযোগিতা করত।
- সিস্টেমের অস্থিতিশীলতা: হার্ডওয়্যারের ধারণক্ষমতার চেয়ে কাজের চাপ বেশি হলে, সমন্বয়হীন ওয়ার্কলোড থার্মাল থ্রটলিং, মেমরি পেজ ফল্ট, বা লো মেমরি কিলার ডেমন (LMKD) সক্রিয় করতে পারে।
- অদক্ষ অগ্রাধিকার নির্ধারণ: সিস্টেম সার্ভার পারিপার্শ্বিক অবস্থার পরিবর্তনের প্রতিক্রিয়ায় এনপিইউ (NPU) অগ্রাধিকার সমন্বয় করতে পারে না; যেমন, যখন ফোরগ্রাউন্ডে ল্যাটেন্সি-সংবেদনশীল ক্যামেরা পাইপলাইন বা ইউজার অ্যাসিস্ট্যান্ট সক্রিয় থাকে, তখন ব্যাকগ্রাউন্ডে কোনো টাস্ক একটি বিশাল মডেল লোড করতে থাকলে।
এনপিইউ ম্যানেজার একটি সিস্টেম-স্তরের নিয়ন্ত্রক হিসেবে কাজ করে এই চ্যালেঞ্জগুলো মোকাবেলা করে, যা ডিভাইসের বর্তমান অবস্থা এবং অ্যাপের অবস্থার উপর ভিত্তি করে মডেল লোডিং নিয়ন্ত্রণ করে এবং কার্য সম্পাদনের অগ্রাধিকার গতিশীলভাবে সমন্বয় করে।
সিস্টেম আর্কিটেকচার
এনপিইউ ম্যানেজারকে অ্যান্ড্রয়েড ফ্রেমওয়ার্কের মধ্যে চলমান npu নামক একটি সিস্টেম সার্ভিস হিসেবে বাস্তবায়ন করা হয়। এনপিইউ ম্যানেজার শিডিউলিং পলিসিগুলোর উচ্চ-স্তরের সমন্বয়কে নিম্ন-স্তরের ভেন্ডর ড্রাইভার বাস্তবায়ন থেকে পৃথক রাখে।
নিম্নলিখিত ডায়াগ্রামটি এনপিইউ ম্যানেজার এনভায়রনমেন্ট লেয়ারগুলো চিত্রিত করে:

চিত্র ১. এনপিইউ ম্যানেজার পরিবেশের স্তরসমূহ।
মূল উপাদান
- ফ্রেমওয়ার্ক এপিআই ক্লায়েন্ট (
android.npumanager.NpuManager): মডেল লোড রিজার্ভেশনের অনুরোধ জানাতে ক্লায়েন্টদের ব্যবহৃত প্রবেশপথ - সিস্টেম সার্ভিস (
npu): একটি সিস্টেম সার্ভিস যা শিডিউলিং অগ্রাধিকার নিয়মের উপর ভিত্তি করে মডেল লোড অনুমোদন নিয়ন্ত্রণ করে এবং প্রিএম্পশন কমান্ড পরিচালনা করে। - এনপিইউ শিডিউলিং এইচএএল (
android.hardware.npu): একটি এআইডিএল-ভিত্তিক ইন্টারফেস যা ফ্রেমওয়ার্ক এবং ড্রাইভারের মধ্যে অ্যান্ড্রয়েড অ্যাপের অগ্রাধিকার সংক্রান্ত কলব্যাকগুলো আদান-প্রদান করে। - ভেন্ডর ড্রাইভার: একটি নিম্ন-স্তরের ড্রাইভার যা হার্ডওয়্যার এক্সিকিউশন ব্লকগুলো নিয়ন্ত্রণ করে এবং নিম্ন-স্তরের অগ্রাধিকার নির্ধারণ পদ্ধতি প্রয়োগ করে।
এসডিকে এবং ফ্রেমওয়ার্ক এপিআই
নিম্ন-স্তরের নিউরাল নেটওয়ার্ক লাইব্রেরি কল করার বা মডেল ফাইল লোড করার আগে, ফ্রেমওয়ার্ক ক্লায়েন্টদের অবশ্যই NpuManager সার্ভিসের সাথে যোগাযোগ করতে হয়। এটি করার জন্য, ক্লায়েন্টরা প্রথমে একটি মডেল লোড রিকোয়েস্ট নির্ধারণ করে এবং তারপরে অনুরোধ ও অনুমোদন প্রক্রিয়াটি সম্পাদন করে।
মডেল লোড অনুরোধ
একটি মডেল লোড অনুরোধকে ModelLoadRequest দ্বারা প্রকাশ করা হয়। এই অবজেক্টটিতে রয়েছে:
- অনন্য অনুরোধ আইডি
- আনুমানিক মডেল সাইজ ক্লাস, যেমন
NPU_MODEL_SIZE_LESS_THAN_1GBঅথবাNPU_MODEL_SIZE_GREATER_THAN_2G - উদ্দিষ্ট অগ্রাধিকার, যেমন
NPU_MODEL_PRIORITY_BACKGROUND,NPU_MODEL_PRIORITY_NORMAL, অথবাNPU_MODEL_PRIORITY_OPPORTUNISTIC
নিম্নলিখিত কোড উদাহরণটি ২ জিবির বেশি আকারের সীমা এবং সাধারণ এক্সিকিউশন প্রায়োরিটি সহ একটি ModelLoadRequest তৈরি করে:
ModelLoadRequest request = new ModelLoadRequest.Builder(requestId)
.setSize(NPU_MODEL_SIZE_GREATER_THAN_2G)
.setPriority(NPU_MODEL_PRIORITY_NORMAL)
.build();
অনুরোধ এবং অনুমোদন প্রবাহ
ক্লায়েন্টরা অ্যাসিঙ্ক্রোনাসভাবে requestCanLoadModel কল করে:
npuManager.requestCanLoadModel(request, callback, executor);
যখন NPU রিসোর্স উপলব্ধ থাকে, তখন ফ্রেমওয়ার্কটি ModelLoadRequestCallback ব্যবহার করে নিম্নলিখিত ইভেন্টগুলির মাধ্যমে সাড়া দেয়:
-
onCanLoadModel(request, status, listener): অনুরোধটি অনুমোদিত হলে এটি কার্যকর হয়। ক্লায়েন্ট একটিNpuManager.ModelLoadStatusListenerটোকেন পায়। ক্লায়েন্ট ড্রাইভার মেমরিতে মডেলটি সম্পূর্ণরূপে লোড করার পরে, তাকে অবশ্যইlistener.notifyModelLoaded(request)কল করতে হবে। -
onRequestUnloadModel(request)অথবাonRequestUnloadModel(request, reason): যখন সিস্টেম রিসোর্সের উপর চাপ অনুভব করে (যেমন একটি আগত ফোরগ্রাউন্ড অনুরোধ বা থার্মাল স্পাইক) এবং ক্লায়েন্টকে তার মডেলটি ছেড়ে দেওয়ার প্রয়োজন হয়, তখন এটি ট্রিগার হয়। NPU রিসোর্স পুনরুদ্ধার করার পরে, ক্লায়েন্টlistener.notifyModelUnloaded(request)কল করে। -
onModelLoadRequestComplete(request, status): অনুরোধের জীবনচক্রের চূড়ান্ত পরিবর্তন, যেমন বাতিলকরণ, সম্পর্কে ক্লায়েন্টকে অবহিত করে।
ক্লায়েন্টরা cancelModelLoad(request) ব্যবহার করে অপেক্ষমান আমন্ত্রণ বাতিল করতে পারেন।
এইচএএল এবং বিক্রেতা একীকরণ
NPU ম্যানেজারকে সমর্থন করার জন্য, ডিভাইস-নির্দিষ্ট ভেন্ডর ইমপ্লিমেন্টেশনগুলোকে অবশ্যই android.hardware.npu AIDL সার্ভিস ইন্টারফেসগুলো মেনে চলতে হবে।
সময়সূচী কনফিগারেশন
সিস্টেমটি IScheduling.aidl এ সংজ্ঞায়িত SchedulingConfig AIDL কাঠামো ব্যবহার করে অ্যাপের অগ্রাধিকার প্রেরণ করে:
package android.hardware.npu;
@VintfStability
parcelable SchedulingConfig {
int minPriority;
int maxPriority;
int uid;
int appPriority;
boolean hasDirectAccess;
boolean canAttributeOtherUid;
}
এই কাঠামো ব্যবহার করে, এনপিইউ ম্যানেজার অগ্রাধিকারের সমন্বয় সাধন করে। উদাহরণস্বরূপ, যদি কোনো ব্যাকগ্রাউন্ড অ্যাপ একটি উচ্চ-অগ্রাধিকারের কাজ জমা দেয়, তবে ফোরগ্রাউন্ড গ্রাফিক্সের সাথে যাতে কোনো হস্তক্ষেপ না ঘটে, সেজন্য অগ্রাধিকার কমিয়ে আনা হয়।
কাজের অবস্থা এবং প্রোফাইলিং
ভেন্ডর ড্রাইভারদের অবশ্যই ম্যানেজারকে এনপিইউ এক্সিকিউশন গ্রুপগুলির লাইফসাইকেল স্ট্যাটাস রিপোর্ট করতে হবে। WorkInfo নিম্নলিখিত টাস্কগুলি ট্র্যাক করে (যা WorkInfo.aidl এ সংজ্ঞায়িত):
package android.hardware.npu;
import android.hardware.npu.NpuUuid;
@VintfStability
parcelable WorkInfo {
int id;
@nullable NpuUuid groupId;
int uid;
int debugPid;
int originalUid;
@nullable String debugFeatureId;
int jobPriority;
int effectivePriority;
long timestampMs;
int deviceNumber;
}
ইভেন্ট ডিবাউন্সিং
শিডিউলিং ফ্রেমওয়ার্কটি শিডিউলিং কলব্যাক রেজিস্ট্রেশনের মধ্যে debounce_duration_ms প্যারামিটার ব্যবহার করে ইভেন্ট ডিবাউন্সিং সমর্থন করে। এটি লগ ফ্লাডিং এড়ায় এবং দ্রুত নোটিফিকেশন দমন করে, যেমন—রিপিটিং মডেলের জন্য পরপর শুরু ও শেষের ইভেন্ট।
কলব্যাক লাইফসাইকেল স্টেটগুলো নিম্নরূপে রিপোর্ট করা হয়:
-
onWorkRequested: ভেন্ডর সার্ভিস দ্বারা ওয়ার্কলোডটি কিউতে যুক্ত করা হয়েছে। -
onWorkStarted: ওয়ার্কলোড সম্পাদন শুরু হয়।-
NPU_START_REASON_INITIAL: প্রথমবার কার্য সম্পাদন। -
NPU_START_REASON_RESUMED: প্রিএম্পশনের পর এক্সিকিউশন পুনরায় শুরু হয়েছে।
-
-
onWorkEnded: ওয়ার্কলোড সম্পাদন শেষ হয়েছে।-
NPU_END_REASON_COMPLETED: সফলভাবে রান সম্পন্ন হয়েছে। -
NPU_END_REASON_CANCELLED_USER: ক্লায়েন্ট কর্তৃক বাতিল করা হয়েছে। -
NPU_END_REASON_CANCELLED_SYSTEM: সিস্টেম পলিসির কারণে বাতিল। -
NPU_END_REASON_FAILED: কার্য সম্পাদনে ত্রুটি অথবা ড্রাইভারের ব্যর্থতা। -
NPU_END_REASON_PAUSED: উচ্চ-অগ্রাধিকারের কাজগুলোর জন্য সাময়িকভাবে স্থগিত করা হয়েছে।
-
ডিভাইসের প্রস্তুতি এবং পরীক্ষা
ডিভাইসের স্বাস্থ্য যাচাই করার আগে এই কনফিগারেশনগুলো ঠিকঠাক আছে কিনা তা নিশ্চিত করুন।
আবেদন ঘোষণা
যেসব ক্লায়েন্ট NPU শিডিউলিং-এ অগ্রাধিকার পেতে চান, তাদের অবশ্যই নিজেদের AndroidManifest.xml ফাইলে NPU হার্ডওয়্যার ফিচারটি ঘোষণা করতে হবে।
<uses-feature android:name="android.hardware.npu" android:required="false" />
নতুন প্রজন্মের অংশীদার হার্ডওয়্যারে ব্যবহৃত মডেলগুলোর ক্ষেত্রে সর্বোত্তম ইঞ্জিন তৈরির জন্য এই ঘোষণাটি প্রয়োজন হতে পারে।
VTS ইন্টিগ্রেশন টেস্টিং
NPU HAL ইমপ্লিমেন্টেশনগুলো VTS ফাংশনাল টেস্টের মাধ্যমে যাচাই করা যেতে পারে, যেমন, VtsHalNpuSchedulingTargetTest ।