মূল কনটেন্টে যান
এআই টিউটোরিয়াল

প্রথম নীতি থেকে LLM ইনফারেন্স ইঞ্জিনিয়ারিং শিখুন

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

প্রথম নীতি থেকে LLM ইনফারেন্স ইঞ্জিনিয়ারিং শিখুন

Inference Engineering Zero to Hero কী?

Inference Engineering Zero to Hero হলো বৃহৎ ভাষা মডেল পরিবেশনের পেছনের রানটাইম সিস্টেম বোঝার জন্য একটি হাতে-কলমে কোর্স রিপোজিটরি। প্রশিক্ষণ বা মডেলের গুণমান উন্নত করার ওপর জোর না দিয়ে, কোনো অনুরোধ LLM-এ পৌঁছানোর পর কী ঘটে, তা এখানে বিশ্লেষণ করা হয়েছে।

প্রকল্পটি সবচেয়ে ছোট কার্যকর ইনফারেন্স অপারেশন দিয়ে শুরু হয়ে ধীরে ধীরে একটি সংক্ষিপ্ত ইনফারেন্স রানটাইমের দিকে এগিয়ে যায়। এর নির্ধারিত অগ্রগতির ধাপগুলো হলো:

টোকেনাইজেশন → প্রিফিল → ডিকোড → KV ক্যাশ → স্যাম্পলিং → অনুরোধের অবস্থা → শিডিউলিং → কনটিনিউয়াস ব্যাচিং → মেমরি ব্যবস্থাপনা → সার্ভিং-ইঞ্জিনের অভ্যন্তরীণ কার্যপ্রণালি

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

আপনি যা শিখবেন

কোর্সটি LLM ইনফারেন্স সম্পর্কে সিস্টেম-কেন্দ্রিক মানসিক মডেল তৈরি করার জন্য পরিকল্পিত। এর প্রধান বিষয়গুলো হলো:

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

কোর্সের অবস্থা ও কাঠামো

রিপোজিটরিটি Beginner, Intermediate এবং Advanced স্তরে বিভক্ত। বর্তমানে Beginner ট্র্যাকের কাজ চলছে। Intermediate এবং Advanced-এর উপকরণ এখনো উপলভ্য নয়।

উপলভ্য অধ্যায়

  • Chapter 01: Manual LLM Inference From First Principles — beginner/01_manual_llm_inference/-এ উপলভ্য।

পরিকল্পিত Beginner অধ্যায়

  1. স্যাম্পলিং
  2. অনুরোধের অবস্থা
  3. সহজ শিডিউলার
  4. কনটিনিউয়াস ব্যাচিং
  5. KV ক্যাশ ব্যবস্থাপনা
  6. Paged বা Block KV Cache
  7. প্রিফিক্স ক্যাশিং
  8. ইনফারেন্স বেঞ্চমার্কিং

রোডম্যাপটি ইচ্ছাকৃতভাবে নমনীয়। বাস্তবায়নের কাজ নতুন সমস্যা উন্মোচন করলে অধ্যায় যোগ, বাদ, বিভক্ত বা পুনর্বিন্যস্ত হতে পারে।

ইনস্টলেশন ও সেটআপ

রিপোজিটরির README-তে নির্দিষ্ট কোনো ডিপেন্ডেন্সি ইনস্টলেশন কমান্ড বা পরিবেশের বিবরণ দেওয়া নেই। প্রথমে রিপোজিটরিটি ডাউনলোড বা ক্লোন করুন, তারপর কিছু ইনস্টল বা চালানোর আগে Chapter 1-এর ফাইল ও নির্দেশনাগুলো পর্যালোচনা করুন।

  1. GitHub রিপোজিটরিটির একটি স্থানীয় কপি সংগ্রহ করুন।
  2. টার্মিনাল, এডিটর বা নোটবুক পরিবেশে রিপোজিটরি ডিরেক্টরিটি খুলুন।
  3. beginner/01_manual_llm_inference/-এ যান।
  4. অধ্যায়-নির্দিষ্ট নির্দেশনা পড়ুন এবং ওই ডিরেক্টরির নোটবুকটি শনাক্ত করুন।
  5. অধ্যায়ের উপকরণে অনুরোধ করা ডিপেন্ডেন্সিগুলোই ইনস্টল করুন।
  6. নোটবুকটি খুলে এর সেলগুলো ক্রমানুসারে চালান।
beginner/01_manual_llm_inference/

README-তে সঠিক প্যাকেজ সংস্করণ, হার্ডওয়্যার প্রয়োজনীয়তা বা ইনস্টলেশন কমান্ড উল্লেখ না থাকায়, রানটাইম সেটআপের জন্য অধ্যায়ের নোটবুককেই প্রামাণ্য উৎস হিসেবে ব্যবহার করুন।

মৌলিক ব্যবহার: ম্যানুয়াল ইনফারেন্স সম্পন্ন করা

Chapter 1 দিয়ে শুরু করার পরামর্শ দেওয়া হয়। সম্পূর্ণ সার্ভিং API-এর আড়ালে জেনারেশন লুকিয়ে না রেখে, প্রথম নীতিগুলো থেকে ম্যানুয়াল LLM ইনফারেন্স পরীক্ষা করাই এর উদ্দেশ্য।

ধাপ ১: নোটবুকটি ক্রমানুসারে অনুসরণ করুন

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

ধাপ ২: প্রম্পট অনুসরণ করুন

ইনফারেন্স প্রক্রিয়ার মধ্য দিয়ে যাওয়ার সময় ইনপুট প্রম্পট কীভাবে পরিবর্তিত হয়, তা পর্যবেক্ষণ করুন। একটি কার্যকর ধারণাগত ধারা হলো:

প্রম্পটের লেখা
→ টোকেন ID
→ প্রম্পট প্রক্রিয়াকরণ বা প্রিফিল
→ পরবর্তী টোকেনের স্কোর
→ নির্বাচিত টোকেন
→ আপডেট করা সিকোয়েন্স
→ পুনরাবৃত্ত ডিকোডিং

নোটবুকে টেনসরের আকৃতি ও টোকেনের সংখ্যা দেখানো হলে তা নথিবদ্ধ করুন। এতে সম্পূর্ণ প্রম্পট প্রক্রিয়াকরণ এবং আরও একটি টোকেন উৎপন্ন করার মধ্যে পার্থক্য বোঝা সহজ হয়।

ধাপ ৩: প্রিফিল ও ডিকোড আলাদা করুন

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

নোটবুক চালানোর সময় নিজেকে জিজ্ঞাসা করুন:

  • প্রিফিলের সময় কতগুলো ইনপুট টোকেন প্রক্রিয়া করা হয়?
  • প্রতিটি ডিকোড ধাপে কোন ইনপুট পাঠানো হয়?
  • নতুন টোকেন উৎপন্ন হওয়ার পর কোন টেনসরগুলো পরিবর্তিত হয়?
  • পুনর্গণনা না করে কোন অবস্থা পুনরায় ব্যবহার করা যায়?

ধাপ ৪: সরাসরি আউটপুট পরীক্ষা করুন

টোকেন ID-এর সঙ্গে ডিকোড করা লেখা তুলনা করুন এবং নোটবুক অনুমতি দিলে মধ্যবর্তী আউটপুট পরীক্ষা করুন। লক্ষ্য শুধু লেখা উৎপন্ন করা নয়, বরং ওই লেখার জন্য দায়ী অপারেশনগুলোর ক্রম বোঝা।

রানটাইম মডেল বোঝা

রিপোজিটরিটির দিকে তাকানোর একটি কার্যকর উপায় হলো জেনারেশনকে একটি একক মডেল কল হিসেবে না দেখে একটি স্টেটফুল লুপ হিসেবে বিবেচনা করা:

prepare request
process prompt
store reusable state
select next token
update request state
repeat until completion

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

উন্নত অধ্যয়নের পরামর্শ

শেপ, স্টেট ও মেমরি একসঙ্গে অনুসরণ করুন

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

প্রম্পটের দৈর্ঘ্য ও ডিকোডের দৈর্ঘ্য তুলনা করুন

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

একটি রিকোয়েস্ট-স্টেট টেবিল তৈরি করুন

রিকোয়েস্ট-স্টেট নিয়ে নির্দিষ্ট অধ্যায়টি প্রকাশের আগে আপনি নিচের ক্ষেত্রগুলো ব্যবহার করে পর্যবেক্ষণগুলো সাজাতে পারেন:

  • ইনপুট টোকেন আইডি
  • জেনারেট করা টোকেন আইডি
  • বর্তমান সিকোয়েন্সের দৈর্ঘ্য
  • ক্যাশের অবস্থা
  • জেনারেশনের অবস্থা

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

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

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

আগের অধ্যায়গুলো আবার পড়ুন

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

বর্তমান সীমাবদ্ধতা

বর্তমানে কেবল প্রথম Beginner অধ্যায়টি উপলভ্য হিসেবে তালিকাভুক্ত আছে। স্যাম্পলিং, শিডিউলার, কনটিনিউয়াস ব্যাচিং, ক্যাশ-ব্যবস্থাপনা কৌশল, বেঞ্চমার্কিং এবং Intermediate ও Advanced ট্র্যাকগুলো এখনও পরিকল্পিত। তাই রিপোজিটরিটিকে সম্পূর্ণ ইনফারেন্স-ইঞ্জিন ফ্রেমওয়ার্কের পরিবর্তে ক্রমবিকাশমান একটি কোর্স হিসেবে বিবেচনা করা উচিত।

উপসংহার

Inference Engineering Zero to Hero LLM-এর রানটাইম দিক বোঝার একটি ব্যবহারিক পথ দেখায়। beginner/01_manual_llm_inference/ দিয়ে শুরু করুন, নোটবুকটি ধারাবাহিকভাবে চালান এবং জেনারেশনের সময় প্রম্পট, টোকেন, টেনসর ও পুনর্ব্যবহারযোগ্য স্টেট কীভাবে প্রবাহিত হয়, সেদিকে মনোযোগ দিন। এই ভিত্তি শিডিউলিং, ব্যাচিং, মেমরি এবং সার্ভিং-ইঞ্জিনের অভ্যন্তরীণ বিষয় নিয়ে পরিকল্পিত পাঠগুলো বোঝা সহজ করবে।