আপনার মডেলে ব্যবহৃত মেশিন লার্নিং (ML) অপারেটরগুলি TensorFlow মডেলটিকে LiterRT ফর্ম্যাটে রূপান্তর করার প্রক্রিয়াকে প্রভাবিত করতে পারে। LiterRT কনভার্টারটি সাধারণ ইনফারেন্স মডেলগুলিতে ব্যবহৃত সীমিত সংখ্যক TensorFlow অপারেশন সমর্থন করে, যার অর্থ প্রতিটি মডেল সরাসরি রূপান্তরযোগ্য নয়। কনভার্টার টুলটি আপনাকে অতিরিক্ত অপারেটর অন্তর্ভুক্ত করার অনুমতি দেয়, তবে এইভাবে একটি মডেল রূপান্তর করার জন্য আপনাকে আপনার মডেলটি কার্যকর করার জন্য ব্যবহৃত LiterRT রানটাইম পরিবেশটিও পরিবর্তন করতে হবে, যা Google Play পরিষেবাগুলির মতো স্ট্যান্ডার্ড রানটাইম ডিপ্লয়মেন্ট বিকল্পগুলি ব্যবহার করার ক্ষমতা সীমিত করতে পারে।
LiterRT কনভার্টারটি মডেল স্ট্রাকচার বিশ্লেষণ করার জন্য এবং সরাসরি সমর্থিত অপারেটরগুলির সাথে সামঞ্জস্যপূর্ণ করার জন্য অপ্টিমাইজেশন প্রয়োগ করার জন্য ডিজাইন করা হয়েছে। উদাহরণস্বরূপ, আপনার মডেলের ML অপারেটরগুলির উপর নির্ভর করে, কনভার্টারটি তাদের LiterRT প্রতিরূপের সাথে ম্যাপ করার জন্য সেই অপারেটরগুলিকে এলিড বা ফিউজ করতে পারে।
এমনকি সমর্থিত ক্রিয়াকলাপের ক্ষেত্রেও, কর্মক্ষমতার কারণে, কখনও কখনও নির্দিষ্ট ব্যবহারের ধরণগুলি প্রত্যাশিত হয়। LiterRT-এর সাথে ব্যবহারযোগ্য একটি TensorFlow মডেল কীভাবে তৈরি করা যায় তা বোঝার সর্বোত্তম উপায় হল এই প্রক্রিয়ার দ্বারা আরোপিত সীমাবদ্ধতাগুলির সাথে সাথে কীভাবে ক্রিয়াকলাপগুলিকে রূপান্তরিত এবং অপ্টিমাইজ করা হয় তা সাবধানতার সাথে বিবেচনা করা।
সমর্থিত অপারেটর
LiterRT বিল্ট-ইন অপারেটরগুলি হল TensorFlow কোর লাইব্রেরির অংশ অপারেটরগুলির একটি উপসেট। আপনার TensorFlow মডেলে কম্পোজিট অপারেটর বা আপনার দ্বারা সংজ্ঞায়িত নতুন অপারেটর আকারে কাস্টম অপারেটরও অন্তর্ভুক্ত থাকতে পারে। নীচের চিত্রটি এই অপারেটরগুলির মধ্যে সম্পর্ক দেখায়।

এই পরিসরের এমএল মডেল অপারেটরগুলির মধ্যে, রূপান্তর প্রক্রিয়া দ্বারা সমর্থিত 3 ধরণের মডেল রয়েছে:
- শুধুমাত্র LiterRT বিল্ট-ইন অপারেটর সহ মডেল। ( প্রস্তাবিত )
- বিল্ট-ইন অপারেটরগুলির সাথে মডেল তৈরি করুন এবং টেনসরফ্লো কোর অপারেটর নির্বাচন করুন।
- বিল্ট-ইন অপারেটর, টেনসরফ্লো কোর অপারেটর এবং/অথবা কাস্টম অপারেটর সহ মডেল।
যদি আপনার মডেলে শুধুমাত্র LiterRT দ্বারা সমর্থিত অপারেশন থাকে, তাহলে এটি রূপান্তর করার জন্য আপনার কোনও অতিরিক্ত ফ্ল্যাগের প্রয়োজন নেই। এটি প্রস্তাবিত পথ কারণ এই ধরণের মডেলটি মসৃণভাবে রূপান্তরিত হবে এবং ডিফল্ট LiterRT রানটাইম ব্যবহার করে অপ্টিমাইজ এবং চালানো সহজ। আপনার মডেলের জন্য আরও স্থাপনার বিকল্প রয়েছে যেমন Google Play পরিষেবা । আপনি LiterRT রূপান্তরকারী নির্দেশিকা দিয়ে শুরু করতে পারেন। বিল্ট-ইন অপারেটরগুলির তালিকার জন্য LiterT Ops পৃষ্ঠাটি দেখুন।
যদি আপনার মূল লাইব্রেরি থেকে নির্বাচিত টেনসরফ্লো অপারেশনগুলি অন্তর্ভুক্ত করার প্রয়োজন হয়, তাহলে রূপান্তরের সময় আপনাকে অবশ্যই তা উল্লেখ করতে হবে এবং নিশ্চিত করতে হবে যে আপনার রানটাইমে সেই অপারেশনগুলি অন্তর্ভুক্ত রয়েছে। বিস্তারিত পদক্ষেপের জন্য Select TensorFlow অপারেটর বিষয় দেখুন।
যখনই সম্ভব, আপনার রূপান্তরিত মডেলে কাস্টম অপারেটর অন্তর্ভুক্ত করার শেষ বিকল্পটি এড়িয়ে চলুন। কাস্টম অপারেটরগুলি হয় একাধিক আদিম TensorFlow কোর অপারেটর একত্রিত করে তৈরি করা অপারেটর অথবা সম্পূর্ণ নতুন একটি সংজ্ঞায়িত করা হয়। যখন কাস্টম অপারেটর রূপান্তরিত হয়, তখন তারা অন্তর্নির্মিত LiterRT লাইব্রেরির বাইরে নির্ভরতা তৈরি করে সামগ্রিক মডেলের আকার বাড়াতে পারে। কাস্টম অপারেটরগুলি, যদি বিশেষভাবে মোবাইল বা ডিভাইস স্থাপনের জন্য তৈরি না করা হয়, তবে সার্ভার পরিবেশের তুলনায় রিসোর্স সীমাবদ্ধ ডিভাইসগুলিতে স্থাপন করা হলে আরও খারাপ কর্মক্ষমতা দেখা দিতে পারে। অবশেষে, নির্বাচিত TensorFlow কোর অপারেটর অন্তর্ভুক্ত করার মতো, কাস্টম অপারেটরদের জন্য আপনাকে মডেল রানটাইম পরিবেশ পরিবর্তন করতে হবে যা আপনাকে Google Play পরিষেবাগুলির মতো স্ট্যান্ডার্ড রানটাইম পরিষেবাগুলির সুবিধা নিতে বাধা দেয়।
সমর্থিত প্রকারগুলি
বেশিরভাগ LiterRT অপারেশন ফ্লোটিং-পয়েন্ট ( float32 ) এবং কোয়ান্টাইজড ( uint8 , int8 ) ইনফারেন্স উভয়কেই লক্ষ্য করে, কিন্তু অনেক অপশন এখনও tf.float16 এবং স্ট্রিং এর মতো অন্যান্য ধরণের জন্য তা করে না।
বিভিন্ন ধরণের অপারেশন ব্যবহার করা ছাড়াও, ফ্লোটিং-পয়েন্ট এবং কোয়ান্টাইজড মডেলের মধ্যে আরেকটি পার্থক্য হল রূপান্তরিত হওয়ার পদ্ধতি। কোয়ান্টাইজড রূপান্তরের জন্য টেনসরের জন্য গতিশীল পরিসরের তথ্য প্রয়োজন। এর জন্য মডেল প্রশিক্ষণের সময় "নকল-কোয়ান্টাইজেশন", একটি ক্যালিব্রেশন ডেটা সেটের মাধ্যমে পরিসরের তথ্য পাওয়া, অথবা "অন-দ্য-ফ্লাই" পরিসরের অনুমান করা প্রয়োজন। আরও বিস্তারিত জানার জন্য কোয়ান্টাইজেশন দেখুন।
সোজা-সাপ্টা রূপান্তর, ধ্রুবক-ভাঁজ এবং ফিউজিং
LiterRT দ্বারা বেশ কিছু TensorFlow অপারেশন প্রক্রিয়া করা যেতে পারে যদিও তাদের সরাসরি কোনও সমতুল্য নেই। এটি সেই অপারেশনগুলির ক্ষেত্রে প্রযোজ্য যেগুলি কেবল গ্রাফ থেকে সরানো যেতে পারে ( tf.identity ), টেনসর ( tf.placeholder ) দ্বারা প্রতিস্থাপিত হতে পারে, অথবা আরও জটিল অপারেশনে ( tf.nn.bias_add ) মিশ্রিত করা যেতে পারে। এমনকি কিছু সমর্থিত অপারেশনও কখনও কখনও এই প্রক্রিয়াগুলির একটির মাধ্যমে সরানো যেতে পারে।
এখানে টেনসরফ্লো অপারেশনগুলির একটি অ-সম্পূর্ণ তালিকা রয়েছে যা সাধারণত গ্রাফ থেকে সরানো হয়:
-
tf.add -
tf.debugging.check_numerics -
tf.constant -
tf.div -
tf.divide -
tf.fake_quant_with_min_max_args -
tf.fake_quant_with_min_max_vars -
tf.identity -
tf.maximum -
tf.minimum -
tf.multiply -
tf.no_op -
tf.placeholder -
tf.placeholder_with_default -
tf.realdiv -
tf.reduce_max -
tf.reduce_min -
tf.reduce_sum -
tf.rsqrt -
tf.shape -
tf.sqrt -
tf.square -
tf.subtract -
tf.tile -
tf.nn.batch_norm_with_global_normalization -
tf.nn.bias_add -
tf.nn.fused_batch_norm -
tf.nn.relu -
tf.nn.relu6
পরীক্ষামূলক ক্রিয়াকলাপ
নিম্নলিখিত LiterRT অপারেশনগুলি উপস্থিত আছে, কিন্তু কাস্টম মডেলের জন্য প্রস্তুত নয়:
-
CALL -
CONCAT_EMBEDDINGS -
CUSTOM -
EMBEDDING_LOOKUP_SPARSE -
HASHTABLE_LOOKUP -
LSH_PROJECTION -
SKIP_GRAM -
SVDF