LiteRT এবং TensorFlow অপারেটর সামঞ্জস্য

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

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

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

সমর্থিত অপারেটর

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

টেনসরফ্লো অপারেটর

এমএল মডেল অপারেটরদের এই পরিসর থেকে, রূপান্তর প্রক্রিয়া দ্বারা সমর্থিত 3 ধরনের মডেল রয়েছে:

  1. শুধুমাত্র LiteRT বিল্ট-ইন অপারেটর সহ মডেল। ( প্রস্তাবিত )
  2. অন্তর্নির্মিত অপারেটর সহ মডেল এবং TensorFlow কোর অপারেটর নির্বাচন করুন।
  3. অন্তর্নির্মিত অপারেটর, TensorFlow কোর অপারেটর এবং/অথবা কাস্টম অপারেটর সহ মডেল।

যদি আপনার মডেলে শুধুমাত্র এমন ক্রিয়াকলাপ থাকে যা স্থানীয়ভাবে LiteRT দ্বারা সমর্থিত হয়, তাহলে এটি রূপান্তর করতে আপনার কোনো অতিরিক্ত পতাকার প্রয়োজন নেই। এটি প্রস্তাবিত পথ কারণ এই ধরনের মডেল সহজে রূপান্তর করবে এবং ডিফল্ট LiteRT রানটাইম ব্যবহার করে অপ্টিমাইজ করা এবং চালানো সহজ। এছাড়াও আপনার মডেলের জন্য Google Play পরিষেবাগুলির মতো আরো স্থাপনার বিকল্প রয়েছে৷ আপনি LiteRT রূপান্তরকারী নির্দেশিকা দিয়ে শুরু করতে পারেন। অন্তর্নির্মিত অপারেটরগুলির একটি তালিকার জন্য LiteRT Ops পৃষ্ঠাটি দেখুন৷

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

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

সমর্থিত প্রকার

বেশিরভাগ LiteRT অপারেশনগুলি ফ্লোটিং-পয়েন্ট ( float32 ) এবং কোয়ান্টাইজড ( uint8 , int8 ) অনুমান উভয়কেই লক্ষ্য করে, কিন্তু অনেক অপ্স এখনও অন্যান্য ধরনের যেমন tf.float16 এবং স্ট্রিংগুলির জন্য করে না।

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

সোজা-সামনের রূপান্তর, ধ্রুবক-ভাঁজ এবং ফিউজিং

TensorFlow অপারেশনের একটি সংখ্যা LiteRT দ্বারা প্রক্রিয়া করা যেতে পারে যদিও তাদের কোন সরাসরি সমতুল্য নেই। এটি এমন অপারেশনগুলির ক্ষেত্রে যা গ্রাফ থেকে সরানো যেতে পারে ( tf.identity ), টেনসর দ্বারা প্রতিস্থাপিত ( tf.placeholder ), বা আরও জটিল ক্রিয়াকলাপ ( tf.nn.bias_add ) এর সাথে যুক্ত করা যেতে পারে। এমনকি কিছু সমর্থিত ক্রিয়াকলাপ কখনও কখনও এই প্রক্রিয়াগুলির মধ্যে একটির মাধ্যমে সরানো যেতে পারে।

এখানে TensorFlow অপারেশনগুলির একটি অ-সম্পূর্ণ তালিকা রয়েছে যা সাধারণত গ্রাফ থেকে সরানো হয়:

  • 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

পরীক্ষামূলক অপারেশন

নিম্নলিখিত LiteRT ক্রিয়াকলাপগুলি উপস্থিত, কিন্তু কাস্টম মডেলগুলির জন্য প্রস্তুত নয়:

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF