Android 11 থেকে শুরু করে, NNAPI একটি অ্যাপকে তার মডেলগুলির আপেক্ষিক অগ্রাধিকার, প্রদত্ত মডেল প্রস্তুত করার জন্য প্রত্যাশিত সর্বাধিক সময় এবং প্রত্যাশিত সময়ের জন্য সর্বাধিক পরিমাণ নির্দেশ করার অনুমতি দিয়ে আরও ভাল মানের পরিষেবা (QoS) অফার করে৷ একটি প্রদত্ত মৃত্যুদন্ড সম্পন্ন করা হবে. আরও, Android 11 অতিরিক্ত NNAPI ত্রুটি মানগুলি প্রবর্তন করে যা একটি পরিষেবাকে আরও সঠিকভাবে নির্দেশ করতে সক্ষম করে যখন কোনও ব্যর্থতা ঘটে তখন কী ভুল হয়েছিল যাতে ক্লায়েন্ট অ্যাপটি আরও ভালভাবে প্রতিক্রিয়া জানাতে এবং পুনরুদ্ধার করতে পারে।
অগ্রাধিকার
Android 11 বা তার বেশির জন্য, NN HAL 1.3-এ অগ্রাধিকার দিয়ে মডেলগুলি প্রস্তুত করা হয়। এই অগ্রাধিকার একই অ্যাপের মালিকানাধীন অন্যান্য প্রস্তুত মডেলের সাথে সম্পর্কিত। উচ্চ-অগ্রাধিকার মৃত্যুদন্ড নিম্ন-অগ্রাধিকার মৃত্যুদন্ডের চেয়ে বেশি গণনা সংস্থান ব্যবহার করতে পারে এবং নিম্ন-অগ্রাধিকার মৃত্যুদন্ডগুলিকে অগ্রাধিকার দিতে পারে বা ক্ষুধার্ত করতে পারে।
NN HAL 1.3 কল যা একটি স্পষ্ট যুক্তি হিসাবে Priority
অন্তর্ভুক্ত করে তা হল IDevice::prepareModel_1_3
। উল্লেখ্য যে IDevice::prepareModelFromCache_1_3
ক্যাশে আর্গুমেন্টে Priority
অন্তর্ভুক্ত করে।
ড্রাইভার এবং এক্সিলারেটরের ক্ষমতার উপর নির্ভর করে অগ্রাধিকার সমর্থন করার জন্য অনেক সম্ভাব্য কৌশল রয়েছে। এখানে বেশ কয়েকটি কৌশল রয়েছে:
- যেসব ড্রাইভারের জন্য বিল্ট-ইন অগ্রাধিকার সমর্থন রয়েছে, তাদের জন্য সরাসরি
Priority
ক্ষেত্রটি এক্সিলারেটরে প্রচার করুন। - কোনো এক্সিকিউশন এক্সিলারেটরে পৌঁছানোর আগেই বিভিন্ন অগ্রাধিকার সমর্থন করতে প্রতি-অ্যাপ অগ্রাধিকার সারি ব্যবহার করুন।
উচ্চ-অগ্রাধিকার মডেলগুলি চালানোর জন্য অ্যাক্সিলারেটরকে মুক্ত করতে কার্যকর করা নিম্ন-অগ্রাধিকার মডেলগুলিকে থামান বা বাতিল করুন৷ হয় কম-অগ্রাধিকারের মডেলগুলিতে চেকপয়েন্ট সন্নিবেশ করে এটি করুন যে পৌঁছানোর পরে, বর্তমান নির্বাহটি সময়ের আগে বন্ধ করা উচিত কিনা বা মডেলটিকে সাবমডেলে বিভাজন করে এবং সাবমডেল সম্পাদনের মধ্যে পতাকাটি জিজ্ঞাসা করে তা নির্ধারণ করতে একটি পতাকা জিজ্ঞাসা করুন৷ লক্ষ্য করুন যে অগ্রাধিকারের সাথে প্রস্তুত মডেলগুলিতে চেকপয়েন্ট বা সাবমডেলের ব্যবহার অতিরিক্ত ওভারহেড প্রবর্তন করতে পারে যা NN HAL 1.3-এর চেয়ে কম সংস্করণে অগ্রাধিকার ছাড়া মডেলগুলির জন্য উপস্থিত নয়।
- প্রিম্পশন সমর্থন করার জন্য, পরবর্তী অপারেশন বা সাব-মডেল এবং যেকোনো প্রাসঙ্গিক মধ্যবর্তী অপারেন্ড ডেটা সহ কার্যকরী প্রসঙ্গ সংরক্ষণ করুন। পরবর্তী সময়ে মৃত্যুদন্ড পুনরায় শুরু করতে এই মৃত্যুদন্ড প্রসঙ্গ ব্যবহার করুন।
- সম্পূর্ণ প্রিম্পশন সমর্থন প্রয়োজনীয় নয়, তাই মৃত্যুদন্ডের প্রসঙ্গ সংরক্ষণ করার প্রয়োজন নেই। যেহেতু এনএনএপিআই মডেলের মৃত্যুদন্ড নির্ধারক, তাই পরবর্তী সময়ে স্ক্র্যাচ থেকে মৃত্যুদন্ড পুনরায় চালু করা যেতে পারে।
Android একটি AID (Android UID) ব্যবহারের মাধ্যমে বিভিন্ন কলিং অ্যাপের মধ্যে পার্থক্য করতে পরিষেবাগুলিকে সক্ষম করে৷ পদ্ধতি ::android::hardware::IPCThreadState::getCallingUid
মাধ্যমে কলিং অ্যাপের UID পুনরুদ্ধার করার জন্য HIDL-এর অন্তর্নির্মিত ব্যবস্থা রয়েছে। libcutils/include/cutils/android_filesystem_config.h
এ AID-এর একটি তালিকা পাওয়া যাবে।
সময়সীমা
অ্যান্ড্রয়েড 11 থেকে শুরু করে, একটি OptionalTimePoint
সময়সীমা যুক্তি দিয়ে মডেল প্রস্তুতি এবং মৃত্যুদন্ড কার্যকর করা যেতে পারে। ড্রাইভারদের জন্য যারা একটি টাস্ক কতক্ষণ সময় নেয় তা অনুমান করতে পারে, এই সময়সীমাটি ড্রাইভারকে শুরু হওয়ার আগে কাজটি বাতিল করার অনুমতি দেয় যদি ড্রাইভার অনুমান করে যে সময়সীমার আগে টাস্কটি সম্পূর্ণ করা যাবে না। একইভাবে, সময়সীমা ড্রাইভারকে একটি চলমান কাজ বাতিল করতে দেয় যা এটি অনুমান করে যে সময়সীমার আগে সম্পূর্ণ হবে না। ডেডলাইন আর্গুমেন্ট কোনো ড্রাইভারকে কোনো টাস্ক বাতিল করতে বাধ্য করে না যদি টাস্কটি সময়সীমার মধ্যে সম্পূর্ণ না হয় বা সময়সীমা পেরিয়ে যায়। সময়সীমার যুক্তিটি ড্রাইভারের মধ্যে কম্পিউট রিসোর্স খালি করতে এবং সময়সীমা ছাড়া সম্ভবের চেয়ে দ্রুত অ্যাপে নিয়ন্ত্রণ ফিরিয়ে আনতে ব্যবহার করা যেতে পারে।
NN HAL 1.3 কলগুলি যেগুলির মধ্যে একটি যুক্তি হিসাবে OptionalTimePoint
সময়সীমা অন্তর্ভুক্ত রয়েছে:
-
IDevice::prepareModel_1_3
-
IDevice::prepareModelFromCache_1_3
-
IPreparedModel::execute_1_3
-
IPreparedModel::executeSynchronously_1_3
-
IPreparedModel::executeFenced
উপরের প্রতিটি পদ্ধতির জন্য সময়সীমা বৈশিষ্ট্যের একটি রেফারেন্স বাস্তবায়ন দেখতে, NNAPI নমুনা ড্রাইভার দেখুন frameworks/ml/nn/driver/sample/SampleDriver.cpp
তে।
ত্রুটি কোড
অ্যান্ড্রয়েড 11 ত্রুটি রিপোর্টিং উন্নত করার জন্য NN HAL 1.3-এ চারটি ত্রুটি কোড মান অন্তর্ভুক্ত করে, ড্রাইভারদের তাদের অবস্থা এবং অ্যাপগুলিকে আরও ভালভাবে পুনরুদ্ধার করতে আরও ভালভাবে যোগাযোগ করতে দেয়। এগুলি ErrorStatus
এর ত্রুটি কোডের মান।
-
MISSED_DEADLINE_TRANSIENT
-
MISSED_DEADLINE_PERSISTENT
-
RESOURCE_EXHAUSTED_TRANSIENT
-
RESOURCE_EXHAUSTED_PERSISTENT
Android 10 বা তার নিচের সংস্করণে, একজন ড্রাইভার শুধুমাত্র GENERAL_FAILURE
ত্রুটি কোডের মাধ্যমে একটি ব্যর্থতা নির্দেশ করতে পারে। অ্যান্ড্রয়েড 11 থেকে, দুটি MISSED_DEADLINE
ত্রুটি কোড ব্যবহার করা যেতে পারে নির্দেশ করতে যে কাজের চাপ বাতিল হয়ে গেছে কারণ সময়সীমা পৌঁছে গেছে বা ড্রাইভার ভবিষ্যদ্বাণী করেছিল যে কাজের চাপটি সময়সীমার মধ্যে সম্পূর্ণ হবে না। দুটি RESOURCE_EXHAUSTED
ত্রুটি কোডগুলি নির্দেশ করতে ব্যবহার করা যেতে পারে যে ড্রাইভারের মধ্যে একটি সংস্থান সীমাবদ্ধতার কারণে কাজটি ব্যর্থ হয়েছে, যেমন ড্রাইভারের কল করার জন্য পর্যাপ্ত মেমরি নেই৷
উভয় ত্রুটির TRANSIENT
সংস্করণ ইঙ্গিত করে যে সমস্যাটি অস্থায়ী, এবং একই টাস্কে ভবিষ্যতের কলগুলি অল্প বিলম্বের পরে সফল হতে পারে। উদাহরণস্বরূপ, এই ত্রুটি কোডটি ফেরত দেওয়া উচিত যখন ড্রাইভার পূর্বের দীর্ঘ-চলমান বা সংস্থান-নিবিড় কাজে ব্যস্ত থাকে, কিন্তু নতুন টাস্কটি সফলভাবে সম্পন্ন হবে যদি ড্রাইভার পূর্বের কাজে ব্যস্ত না থাকে। উভয় ত্রুটির PERSISTENT
সংস্করণ ইঙ্গিত করে যে একই কাজের জন্য ভবিষ্যতের কলগুলি সর্বদা ব্যর্থ হওয়ার আশা করা হয়। উদাহরণস্বরূপ, এই ত্রুটি কোডটি ফেরত দেওয়া উচিত যখন ড্রাইভার অনুমান করে যে টাস্কটি নিখুঁত অবস্থার মধ্যেও নির্দিষ্ট সময়সীমার মধ্যে সম্পূর্ণ হবে না, বা মডেলটি সহজাতভাবে খুব বড় এবং ড্রাইভারের সংস্থান অতিক্রম করে।
বৈধতা
পরিষেবা কার্যকারিতার গুণমান NNAPI VTS পরীক্ষায় পরীক্ষা করা হয় ( VtsHalNeuralnetworksV1_3Target
)৷ এর মধ্যে রয়েছে যাচাইকরণের জন্য পরীক্ষাগুলির একটি সেট ( TestGenerated/ValidationTest#Test/
) যাতে ড্রাইভার অবৈধ অগ্রাধিকারগুলি প্রত্যাখ্যান করে এবং ড্রাইভার সঠিকভাবে সময়সীমা পরিচালনা করে তা নিশ্চিত করার জন্য DeadlineTest
( TestGenerated/DeadlineTest#Test/
) নামক পরীক্ষার একটি সেট।