TensorFlow.js-এ কাস্টম অপ্স, কার্নেল এবং গ্রেডিয়েন্ট লেখা

ওভারভিউ

এই নির্দেশিকাটি TensorFlow.js-এ কাস্টম অপারেশন (অপস), কার্নেল এবং গ্রেডিয়েন্ট সংজ্ঞায়িত করার পদ্ধতির রূপরেখা দেয়। এটির লক্ষ্য হল মূল ধারণাগুলির একটি ওভারভিউ প্রদান করা এবং কোডের নির্দেশক যা কার্যে ধারণাগুলি প্রদর্শন করে৷

জন্য এই সহায়িকার কে?

এটি একটি মোটামুটি উন্নত নির্দেশিকা যা TensorFlow.js-এর কিছু অভ্যন্তরীণ অংশকে স্পর্শ করে, এটি নিম্নলিখিত গোষ্ঠীর লোকেদের জন্য বিশেষভাবে কার্যকর হতে পারে:

  • TensorFlow.js-এর উন্নত ব্যবহারকারীরা বিভিন্ন গাণিতিক ক্রিয়াকলাপের আচরণ কাস্টমাইজ করতে আগ্রহী (যেমন গবেষকরা বিদ্যমান গ্রেডিয়েন্ট বাস্তবায়ন ওভাররাইড করছেন বা লাইব্রেরিতে অনুপস্থিত কার্যকারিতা প্যাচ করতে হবে এমন ব্যবহারকারী)
  • ব্যবহারকারীরা লাইব্রেরি তৈরি করে যা TensorFlow.js প্রসারিত করে (যেমন TensorFlow.js আদিম বা একটি নতুন TensorFlow.js ব্যাকএন্ডের উপরে নির্মিত একটি সাধারণ রৈখিক বীজগণিত লাইব্রেরি)।
  • tensorflow.js-এ নতুন অপারেশনে অবদান রাখতে আগ্রহী ব্যবহারকারীরা যারা এই প্রক্রিয়াগুলি কীভাবে কাজ করে তার একটি সাধারণ ওভারভিউ পেতে চান।

এটি TensorFlow.js এর সাধারণ ব্যবহারের জন্য একটি নির্দেশিকা নয় কারণ এটি অভ্যন্তরীণ বাস্তবায়ন পদ্ধতিতে যায়। TensorFlow.js ব্যবহার করার জন্য আপনাকে এই প্রক্রিয়াগুলি বুঝতে হবে না

এই নির্দেশিকাটির সর্বাধিক ব্যবহার করার জন্য আপনাকে TensorFlow.js সোর্স কোড পড়তে (বা চেষ্টা করতে ইচ্ছুক) স্বাচ্ছন্দ্য বোধ করতে হবে।

পরিভাষা

এই নির্দেশিকাটির জন্য কয়েকটি মূল পদ অগ্রিম বর্ণনা করার জন্য উপযোগী।

অপারেশন (Ops) - এক বা একাধিক টেনসরের উপর একটি গাণিতিক অপারেশন যা আউটপুট হিসাবে এক বা একাধিক টেনসর তৈরি করে। Ops হল 'উচ্চ স্তরের' কোড এবং তাদের যুক্তি সংজ্ঞায়িত করতে অন্যান্য অপ্স ব্যবহার করতে পারে।

কার্নেল — নির্দিষ্ট হার্ডওয়্যার/প্ল্যাটফর্ম ক্ষমতার সাথে আবদ্ধ একটি অপের একটি নির্দিষ্ট বাস্তবায়ন। কার্নেলগুলি 'নিম্ন স্তরের' এবং ব্যাকএন্ড নির্দিষ্ট। কিছু অপ্স-এর অপ থেকে কার্নেলে এক-একটি ম্যাপিং থাকে যখন অন্য অপ্স একাধিক কার্নেল ব্যবহার করে।

গ্রেডিয়েন্ট / গ্র্যাডফাঙ্ক - একটি অপ/কার্নেলের 'ব্যাকওয়ার্ড মোড' সংজ্ঞা যা কিছু ইনপুটের ক্ষেত্রে সেই ফাংশনের ডেরিভেটিভ গণনা করে। গ্রেডিয়েন্টগুলি 'উচ্চ স্তরের' কোড (ব্যাকএন্ড নির্দিষ্ট নয়) এবং অন্যান্য অপ্স বা কার্নেলগুলিকে কল করতে পারে।

কার্নেল রেজিস্ট্রি - একটি (কার্নেল নাম, ব্যাকএন্ড নাম) থেকে একটি কার্নেল বাস্তবায়নের জন্য একটি মানচিত্র।

গ্রেডিয়েন্ট রেজিস্ট্রি — একটি কার্নেলের নাম থেকে গ্রেডিয়েন্ট বাস্তবায়নে একটি মানচিত্র।

কোড সংগঠন

অপারেশন এবং গ্রেডিয়েন্টগুলি tfjs-core- এ সংজ্ঞায়িত করা হয়েছে।

কার্নেলগুলি ব্যাকএন্ড নির্দিষ্ট এবং তাদের নিজ নিজ ব্যাকএন্ড ফোল্ডারে সংজ্ঞায়িত করা হয় (যেমন tfjs-backend-cpu )।

কাস্টম অপ্স, কার্নেল এবং গ্রেডিয়েন্ট এই প্যাকেজের মধ্যে সংজ্ঞায়িত করার প্রয়োজন নেই। কিন্তু প্রায়শই তাদের বাস্তবায়নে অনুরূপ চিহ্ন ব্যবহার করবে।

কাস্টম অপ্স বাস্তবায়ন

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

  • কিছু অপ্স সম্পূর্ণরূপে বিদ্যমান অপ্সের পরিপ্রেক্ষিতে সংজ্ঞায়িত করা যেতে পারে, এবং শুধুমাত্র এই ফাংশনগুলিকে সরাসরি আমদানি এবং কল করা উচিত। এখানে একটি উদাহরণ .
  • একটি অপের বাস্তবায়ন ব্যাকএন্ড নির্দিষ্ট কার্নেলে প্রেরণ করতে পারে। এটি Engine.runKernel এর মাধ্যমে করা হয় এবং "কাস্টম কার্নেল বাস্তবায়ন" বিভাগে আরও বর্ণনা করা হবে। এখানে একটি উদাহরণ .

কাস্টম কার্নেল বাস্তবায়ন

ব্যাকএন্ড নির্দিষ্ট কার্নেল বাস্তবায়ন একটি প্রদত্ত অপারেশনের জন্য যুক্তির অপ্টিমাইজ করা বাস্তবায়নের অনুমতি দেয়। tf.engine().runKernel() কল করার মাধ্যমে কার্নেলগুলিকে ডাকা হয়। একটি কার্নেল বাস্তবায়ন চারটি জিনিস দ্বারা সংজ্ঞায়িত করা হয়

  • একটি কার্নেলের নাম।
  • ব্যাকএন্ডে কার্নেল প্রয়োগ করা হয়।
  • ইনপুট: কার্নেল ফাংশনে টেনসর আর্গুমেন্ট।
  • বৈশিষ্ট্য: কার্নেল ফাংশনে নন-টেনসর আর্গুমেন্ট।

এখানে একটি কার্নেল বাস্তবায়নের একটি উদাহরণ। প্রয়োগ করার জন্য ব্যবহৃত নিয়মগুলি ব্যাকএন্ড নির্দিষ্ট এবং প্রতিটি নির্দিষ্ট ব্যাকএন্ডের বাস্তবায়ন এবং ডকুমেন্টেশন দেখে ভালভাবে বোঝা যায়।

সাধারণত কার্নেলগুলি টেনসরের চেয়ে কম স্তরে কাজ করে এবং পরিবর্তে সরাসরি মেমরিতে পড়তে এবং লিখতে পারে যা অবশেষে tfjs-core দ্বারা টেনসরগুলিতে মোড়ানো হবে।

একবার একটি কার্নেল প্রয়োগ করা হলে এটি tfjs-core থেকে registerKernel ফাংশন ব্যবহার করে TensorFlow.js এর সাথে নিবন্ধিত হতে পারে। আপনি প্রতিটি ব্যাকএন্ডের জন্য একটি কার্নেল নিবন্ধন করতে পারেন যে কার্নেলটি কাজ করতে চান৷ একবার নিবন্ধিত হয়ে গেলে কার্নেলটিকে tf.engine().runKernel(...) দিয়ে আহ্বান করা যেতে পারে এবং TensorFlow.js বাস্তবায়নে প্রেরণ নিশ্চিত করবে৷ বর্তমান সক্রিয় ব্যাকএন্ড।

কাস্টম গ্রেডিয়েন্ট বাস্তবায়ন

গ্রেডিয়েন্টগুলি সাধারণত একটি প্রদত্ত কার্নেলের জন্য সংজ্ঞায়িত করা হয় ( tf.engine().runKernel(...) এ কলে ব্যবহৃত একই কার্নেল নামের দ্বারা চিহ্নিত করা হয়)। এটি tfjs-core কে রানটাইমে যেকোন কার্নেলের জন্য গ্রেডিয়েন্ট সংজ্ঞা দেখতে একটি রেজিস্ট্রি ব্যবহার করার অনুমতি দেয়।

কাস্টম গ্রেডিয়েন্ট প্রয়োগ করা এর জন্য দরকারী:

  • একটি গ্রেডিয়েন্ট সংজ্ঞা যোগ করা যা লাইব্রেরিতে উপস্থিত নাও থাকতে পারে
  • একটি প্রদত্ত কার্নেলের জন্য গ্রেডিয়েন্ট গণনা কাস্টমাইজ করতে একটি বিদ্যমান গ্রেডিয়েন্ট সংজ্ঞা ওভাররাইড করা।

আপনি এখানে গ্রেডিয়েন্ট বাস্তবায়নের উদাহরণ দেখতে পারেন।

একবার আপনি একটি প্রদত্ত কলের জন্য একটি গ্রেডিয়েন্ট প্রয়োগ করলে এটি tfjs-core থেকে registerGradient ফাংশন ব্যবহার করে TensorFlow.js এর সাথে নিবন্ধিত হতে পারে।

কাস্টম গ্রেডিয়েন্ট বাস্তবায়নের অন্য পদ্ধতি যা গ্রেডিয়েন্ট রেজিস্ট্রিকে বাই-পাস করে (এবং এইভাবে নির্বিচারে ফাংশনের জন্য গ্রেডিয়েন্ট কম্পিউট করার অনুমতি দেয় tf.customGrad ব্যবহার করে।

এখানে কাস্টমগ্রাড ব্যবহার করার লাইব্রেরির মধ্যে একটি অপের উদাহরণ রয়েছে