কর্মক্ষমতা সেরা অনুশীলন

মোবাইল এবং এমবেডেড ডিভাইসগুলির কম্পিউটেশনাল রিসোর্স সীমিত, তাই আপনার অ্যাপ্লিকেশন রিসোর্সকে দক্ষ রাখা গুরুত্বপূর্ণ। আমরা আপনার টেনসরফ্লো লাইট মডেলের কর্মক্ষমতা উন্নত করার জন্য সেরা অনুশীলন এবং কৌশলগুলির একটি তালিকা তৈরি করেছি।

কাজের জন্য সেরা মডেলটি বেছে নিন

কাজের উপর নির্ভর করে, আপনাকে মডেলের জটিলতা এবং আকারের মধ্যে একটি বিনিময় করতে হবে। যদি আপনার কাজের জন্য উচ্চ নির্ভুলতার প্রয়োজন হয়, তাহলে আপনার একটি বৃহৎ এবং জটিল মডেলের প্রয়োজন হতে পারে। যেসব কাজের জন্য কম নির্ভুলতার প্রয়োজন হয়, সেগুলির জন্য একটি ছোট মডেল ব্যবহার করা ভাল কারণ সেগুলি কেবল কম ডিস্ক স্পেস এবং মেমোরি ব্যবহার করে না, বরং সেগুলি সাধারণত দ্রুত এবং আরও শক্তি সাশ্রয়ীও হয়। উদাহরণস্বরূপ, নীচের গ্রাফগুলি কিছু সাধারণ চিত্র শ্রেণীবিভাগ মডেলের জন্য নির্ভুলতা এবং বিলম্বিত বিনিময় দেখায়।

Graph of model size vs
accuracy

Graph of accuracy vs latency

মোবাইল ডিভাইসের জন্য অপ্টিমাইজ করা মডেলগুলির একটি উদাহরণ হল MobileNets , যা মোবাইল ভিশন অ্যাপ্লিকেশনের জন্য অপ্টিমাইজ করা হয়েছে। Kaggle মডেলগুলি আরও বেশ কয়েকটি মডেলের তালিকা করে যা বিশেষভাবে মোবাইল এবং এমবেডেড ডিভাইসের জন্য অপ্টিমাইজ করা হয়েছে।

ট্রান্সফার লার্নিং ব্যবহার করে আপনি আপনার নিজস্ব ডেটাসেটে তালিকাভুক্ত মডেলগুলিকে পুনরায় প্রশিক্ষণ দিতে পারেন।

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

একবার আপনি আপনার কাজের জন্য উপযুক্ত একটি ক্যান্ডিডেট মডেল নির্বাচন করলে, আপনার মডেলের প্রোফাইল এবং বেঞ্চমার্কিং করা একটি ভালো অভ্যাস। LiterRT বেঞ্চমার্কিং টুলে একটি অন্তর্নির্মিত প্রোফাইলার রয়েছে যা প্রতি অপারেটরের প্রোফাইলিং পরিসংখ্যান দেখায়। এটি পারফরম্যান্সের বাধাগুলি বুঝতে এবং গণনার সময় কোন অপারেটরদের আধিপত্য তা বুঝতে সাহায্য করতে পারে।

আপনি LiterRT ট্রেসিং ব্যবহার করে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে মডেলটির প্রোফাইল তৈরি করতে পারেন, স্ট্যান্ডার্ড অ্যান্ড্রয়েড সিস্টেম ট্রেসিং ব্যবহার করতে পারেন এবং GUI ভিত্তিক প্রোফাইলিং টুল ব্যবহার করে সময়ের সাথে সাথে অপারেটর ইনভোকেশনগুলি কল্পনা করতে পারেন।

গ্রাফে অপারেটরদের প্রোফাইল এবং অপ্টিমাইজ করুন

যদি মডেলটিতে কোনও নির্দিষ্ট অপারেটর ঘন ঘন উপস্থিত হয় এবং প্রোফাইলিংয়ের ভিত্তিতে আপনি দেখতে পান যে অপারেটরটি সবচেয়ে বেশি সময় ব্যয় করে, তাহলে আপনি সেই অপারেটরটিকে অপ্টিমাইজ করার দিকে নজর দিতে পারেন। এই পরিস্থিতি বিরল হওয়া উচিত কারণ TensorFlow Lite বেশিরভাগ অপারেটরের জন্য অপ্টিমাইজ করা সংস্করণ সরবরাহ করে। তবে, আপনি যদি অপারেটরটি কার্যকর করার সীমাবদ্ধতাগুলি জানেন তবে আপনি একটি কাস্টম অপের দ্রুত সংস্করণ লিখতে সক্ষম হতে পারেন। কাস্টম অপারেটর গাইডটি দেখুন।

আপনার মডেলটি অপ্টিমাইজ করুন

মডেল অপ্টিমাইজেশনের লক্ষ্য হল ছোট মডেল তৈরি করা যা সাধারণত দ্রুত এবং আরও শক্তি সাশ্রয়ী, যাতে সেগুলি মোবাইল ডিভাইসে স্থাপন করা যায়। LiteRT কোয়ান্টাইজেশনের মতো একাধিক অপ্টিমাইজেশন কৌশল সমর্থন করে।

বিস্তারিত জানার জন্য মডেল অপ্টিমাইজেশন ডক্স দেখুন।

থ্রেডের সংখ্যা পরিবর্তন করুন

LiterRT অনেক অপারেটরের জন্য মাল্টি-থ্রেডেড কার্নেল সমর্থন করে। আপনি থ্রেডের সংখ্যা বাড়াতে পারেন এবং অপারেটরগুলির কার্যকরীকরণ দ্রুত করতে পারেন। তবে, থ্রেডের সংখ্যা বাড়ালে আপনার মডেল আরও বেশি রিসোর্স এবং শক্তি ব্যবহার করবে।

কিছু অ্যাপ্লিকেশনের ক্ষেত্রে, ল্যাটেন্সি শক্তি দক্ষতার চেয়ে বেশি গুরুত্বপূর্ণ হতে পারে। আপনি ইন্টারপ্রেটার থ্রেডের সংখ্যা নির্ধারণ করে থ্রেডের সংখ্যা বাড়াতে পারেন। তবে, মাল্টি-থ্রেডেড এক্সিকিউশনের জন্য একই সাথে অন্য কী এক্সিকিউশন করা হচ্ছে তার উপর নির্ভর করে বর্ধিত কর্মক্ষমতা পরিবর্তনশীলতার মূল্য দিতে হয়। এটি বিশেষ করে মোবাইল অ্যাপের ক্ষেত্রে প্রযোজ্য। উদাহরণস্বরূপ, আইসোলেটেড পরীক্ষাগুলি সিঙ্গেল-থ্রেডেডের তুলনায় 2x গতি-বৃদ্ধি দেখাতে পারে, তবে, যদি একই সময়ে অন্য কোনও অ্যাপ এক্সিকিউশন করে, তাহলে এটি সিঙ্গেল-থ্রেডেডের চেয়ে খারাপ কর্মক্ষমতা দেখাতে পারে।

অপ্রয়োজনীয় কপি বাদ দিন

যদি আপনার অ্যাপ্লিকেশনটি সাবধানে ডিজাইন করা না হয়, তাহলে মডেলে ইনপুট ফিড করার সময় এবং আউটপুট পড়ার সময় অপ্রয়োজনীয় কপি থাকতে পারে। অপ্রয়োজনীয় কপিগুলি বাদ দিতে ভুলবেন না। আপনি যদি জাভার মতো উচ্চ স্তরের API ব্যবহার করেন, তাহলে কর্মক্ষমতা সতর্কতার জন্য ডকুমেন্টেশনগুলি সাবধানে পরীক্ষা করতে ভুলবেন না। উদাহরণস্বরূপ, ByteBuffers ইনপুট হিসাবে ব্যবহার করা হলে জাভা API অনেক দ্রুত হয়।

প্ল্যাটফর্ম-নির্দিষ্ট সরঞ্জামগুলির সাহায্যে আপনার অ্যাপ্লিকেশনের প্রোফাইল তৈরি করুন

অ্যান্ড্রয়েড প্রোফাইলার এবং ইন্সট্রুমেন্টসের মতো প্ল্যাটফর্ম-নির্দিষ্ট টুলগুলি আপনার অ্যাপ ডিবাগ করার জন্য প্রচুর প্রোফাইলিং তথ্য সরবরাহ করে। কখনও কখনও পারফরম্যান্স বাগ মডেলে নাও থাকতে পারে কিন্তু অ্যাপ্লিকেশন কোডের এমন কিছু অংশে থাকতে পারে যা মডেলের সাথে ইন্টারঅ্যাক্ট করে। আপনার প্ল্যাটফর্মের জন্য প্ল্যাটফর্ম-নির্দিষ্ট প্রোফাইলিং টুল এবং সেরা অনুশীলনগুলির সাথে নিজেকে পরিচিত করতে ভুলবেন না।

ডিভাইসে উপলব্ধ হার্ডওয়্যার অ্যাক্সিলারেটর ব্যবহার করে আপনার মডেলটি উপকৃত হয় কিনা তা মূল্যায়ন করুন।

LiterRT GPU, DSP এবং নিউরাল অ্যাক্সিলারেটরের মতো দ্রুততর হার্ডওয়্যার সহ মডেলগুলিকে ত্বরান্বিত করার জন্য নতুন উপায় যুক্ত করেছে। সাধারণত, এই অ্যাক্সিলারেটরগুলি ডেলিগেট সাবমডিউলের মাধ্যমে উন্মুক্ত করা হয় যা ইন্টারপ্রেটার এক্সিকিউশনের কিছু অংশ দখল করে। LiterRT নিম্নলিখিতভাবে ডেলিগেট ব্যবহার করতে পারে:

  • GPU ডেলিগেট অ্যান্ড্রয়েড এবং iOS-এ যথাক্রমে OpenGL/OpenCL এবং মেটাল ব্যবহার করে পাওয়া যায়। এগুলি ব্যবহার করে দেখতে, GPU ডেলিগেট দেখুন।
  • যদি আপনার কাছে অ-মানক হার্ডওয়্যার অ্যাক্সেস থাকে তবে আপনার নিজস্ব প্রতিনিধি তৈরি করা সম্ভব। আরও তথ্যের জন্য LiterRT প্রতিনিধি দেখুন।

মনে রাখবেন যে কিছু অ্যাক্সিলারেটর বিভিন্ন ধরণের মডেলের জন্য আরও ভালো কাজ করে। কিছু ডেলিগেট শুধুমাত্র ফ্লোট মডেল বা নির্দিষ্ট উপায়ে অপ্টিমাইজ করা মডেলগুলিকে সমর্থন করে। প্রতিটি ডেলিগেটকে বেঞ্চমার্ক করা গুরুত্বপূর্ণ যে এটি আপনার অ্যাপ্লিকেশনের জন্য একটি ভাল পছন্দ কিনা। উদাহরণস্বরূপ, যদি আপনার একটি খুব ছোট মডেল থাকে, তাহলে মডেলটি GPU-তে অর্পণ করা মূল্যবান নাও হতে পারে। বিপরীতভাবে, উচ্চ গাণিতিক তীব্রতা সম্পন্ন বৃহৎ মডেলগুলির জন্য অ্যাক্সিলারেটর একটি দুর্দান্ত পছন্দ।