মডেল তৈরি এবং রূপান্তর

মাইক্রোকন্ট্রোলারের সীমিত র‌্যাম এবং স্টোরেজ রয়েছে, যা মেশিন লার্নিং মডেলের আকারে সীমাবদ্ধতা সৃষ্টি করে। উপরন্তু, মাইক্রোকন্ট্রোলারের জন্য LiteRT বর্তমানে অপারেশনের একটি সীমিত উপসেট সমর্থন করে, তাই সমস্ত মডেল আর্কিটেকচার সম্ভব নয়।

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

একটি মডেল তৈরি এবং রূপান্তর করার একটি এন্ড-টু-এন্ড, চলমান উদাহরণের জন্য, হ্যালো ওয়ার্ল্ড উদাহরণটি দেখুন৷

মডেল রূপান্তর

মাইক্রোকন্ট্রোলারে চালানোর জন্য একটি প্রশিক্ষিত TensorFlow মডেলকে রূপান্তর করতে, আপনার LiteRT রূপান্তরকারী Python API ব্যবহার করা উচিত। এটি মডেলটিকে একটি FlatBuffer এ রূপান্তর করবে, মডেলের আকার হ্রাস করবে এবং LiteRT ক্রিয়াকলাপগুলি ব্যবহার করার জন্য এটিকে সংশোধন করবে৷

সবচেয়ে ছোট সম্ভাব্য মডেলের আকার পেতে, আপনার প্রশিক্ষণ-পরবর্তী পরিমাপ ব্যবহার করার কথা বিবেচনা করা উচিত।

একটি সি অ্যারে রূপান্তর করুন

অনেক মাইক্রোকন্ট্রোলার প্ল্যাটফর্মে নেটিভ ফাইল সিস্টেম সমর্থন নেই। আপনার প্রোগ্রাম থেকে একটি মডেল ব্যবহার করার সবচেয়ে সহজ উপায় হল এটি একটি C অ্যারে হিসাবে অন্তর্ভুক্ত করা এবং এটিকে আপনার প্রোগ্রামে কম্পাইল করা।

নিম্নলিখিত ইউনিক্স কমান্ডটি একটি সি সোর্স ফাইল তৈরি করবে যাতে একটি char অ্যারে হিসাবে LiteRT মডেল রয়েছে:

xxd -i converted_model.tflite > model_data.cc

আউটপুট নিম্নলিখিত অনুরূপ দেখাবে:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

একবার আপনি ফাইলটি তৈরি করলে, আপনি এটিকে আপনার প্রোগ্রামে অন্তর্ভুক্ত করতে পারেন। এমবেডেড প্ল্যাটফর্মগুলিতে আরও ভাল মেমরি দক্ষতার জন্য অ্যারে ঘোষণাকে const পরিবর্তন করা গুরুত্বপূর্ণ।

আপনার প্রোগ্রামে একটি মডেল কীভাবে অন্তর্ভুক্ত এবং ব্যবহার করবেন তার একটি উদাহরণের জন্য, hello_world_test.cc দেখুন Hello World উদাহরণে।

মডেল আর্কিটেকচার এবং প্রশিক্ষণ

মাইক্রোকন্ট্রোলারগুলিতে ব্যবহারের জন্য একটি মডেল ডিজাইন করার সময়, মডেলের আকার, কাজের চাপ এবং ব্যবহৃত ক্রিয়াকলাপগুলি বিবেচনা করা গুরুত্বপূর্ণ৷

মডেলের আকার

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

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

কাজের চাপ

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

অপারেশন সমর্থন

মাইক্রোকন্ট্রোলারের জন্য LiteRT বর্তমানে TensorFlow অপারেশনের একটি সীমিত উপসেট সমর্থন করে, যা চালানো সম্ভব মডেল আর্কিটেকচারকে প্রভাবিত করে। আমরা নির্দিষ্ট আর্কিটেকচারের জন্য রেফারেন্স বাস্তবায়ন এবং অপ্টিমাইজেশন উভয় ক্ষেত্রেই অপারেশন সমর্থন প্রসারিত করার জন্য কাজ করছি।

সমর্থিত অপারেশন micro_mutable_ops_resolver.h ফাইলে দেখা যায়