কীভাবে একটি LLM ফাইন-টিউন করবেন [এবং কখন এর বদলে RAG বা প্রম্পটিং ব্যবহার করবেন]
এই গাইডে ধাপে ধাপে একটি LLM ফাইন-টিউন করার পদ্ধতি ব্যাখ্যা করা হয়েছে, পূর্ণ ফাইন-টিউনিংয়ের সঙ্গে LoRA ও QLoRA-র তুলনা করা হয়েছে এবং দেখানো হয়েছে কখন একটি মডেলের আউটপুট উন্নত করতে প্রম্পটিং বা RAG ভালো উপায়।

লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) ফাইন-টিউনিং মানে হলো একটি প্রি-ট্রেইনড LLM-কে ছোট, নির্দিষ্ট কাজভিত্তিক একটি ডেটাসেটে আরও পরিমার্জন করা, যাতে এটি এমন আউটপুট দেয় যা শুধু প্রম্পটিং দিয়ে পাওয়া যায় না।
ফাইন-টিউনিংয়ের মধ্যে রয়েছে আপনি যে আচরণ চান তা দেখায় এমন উদাহরণ ইনপুট/আউটপুট জোড়া সংগ্রহ করা, মডেলের ওয়েটগুলোকে সেদিকে সরিয়ে নিতে ট্রেনিং পাস চালানো এবং ফলাফলকে মূল মডেলের আউটপুটের সঙ্গে মিলিয়ে দেখা। LoRA-এর মতো প্যারামিটার-দক্ষ পদ্ধতিগুলো এটিকে এতটাই সাশ্রয়ী করে তোলে যে একটিমাত্র GPU-তেই চালানো যায়।
LLM-এর আউটপুটে সন্তুষ্ট না হলে আগে আপনার প্রম্পট এবং রিট্রিভাল-অগমেন্টেড জেনারেশন (RAG) উন্নত করুন। ফাইন-টিউনিং LLM-এর আচরণ বদলে দেয়। যখন আপনি চান এটি নতুন বা মালিকানাধীন তথ্য ব্যবহার করুক, তখন সাধারণত প্রম্পটিং ও RAG-ই ভালো বিকল্প।
এখানে দেখানো হয়েছে ধাপে ধাপে কীভাবে একটি LLM ফাইন-টিউন করবেন, প্রধান ফাইন-টিউনিং পদ্ধতিগুলো (LoRA ও QLoRA) কী, এবং কোন কোন চ্যালেঞ্জ ও ভুল পুরো প্রক্রিয়াটি ভেস্তে দিতে পারে।
LLM ফাইন-টিউনিং কী এবং এটি LLM প্রি-ট্রেনিং থেকে কীভাবে আলাদা
LLM প্রি-ট্রেনিং একটি বিশাল কর্পাস ব্যবহার করে একেবারে গোড়া থেকে মডেলের সাধারণ ভাষাগত সক্ষমতা গড়ে তোলে, আর LLM ফাইন-টিউনিং একটি নির্দিষ্ট কাজের জন্য ছোট একটি ডেটাসেটে প্রি-ট্রেইনড মডেলকে সমন্বয় করে।
LLM প্রি-ট্রেনিং হলো প্রচুর রিসোর্স-নির্ভর একটি ধাপ, যা একটি বেস মডেল তৈরি করে। এটি বিস্তৃত টেক্সট কর্পাস থেকে শেখে, যা মডেলকে সাধারণ ব্যাকরণ, তথ্য ও যুক্তি প্রয়োগের ক্ষমতা দেয়, কিন্তু আপনার কাজের জন্য কোনো বিশেষায়ন দেয় না।
LLM ফাইন-টিউনিং ছোট, বাছাই করা একটি ডেটাসেটে বেস মডেলের ট্রেনিং চালিয়ে যায়, যাতে এটি নির্দিষ্ট কোনো কাজ বা ব্যবহারক্ষেত্রের জন্য কাঙ্ক্ষিত আউটপুট দেয়। যেমন: সামঞ্জস্যপূর্ণ ফরম্যাট, ব্র্যান্ডের নিজস্ব ভঙ্গি বা সুর, ডোমেইন-নির্দিষ্ট প্যাটার্ন, কিংবা নির্ভরযোগ্য টুল ও ফাংশন কল।
কখন LLM ফাইন-টিউন করবেন, আর কখন এর বদলে প্রম্পটিং বা RAG ব্যবহার করবেন
LLM-এর পারফরম্যান্স বাড়াতে ধাপে ধাপে ওপরে উঠুন: প্রম্পটিং -> RAG -> ফাইন-টিউনিং।
আরও বিস্তারিত নির্দেশনা দিয়ে আপনার প্রম্পট উন্নত করুন এবং মডেলকে হালনাগাদ তথ্য দিতে RAG ব্যবহার করুন। প্রম্পট ও রিট্রিভালের উন্নতিতে কাজ না হলে তবেই ফাইন-টিউনিং ব্যবহার করুন।
পদ্ধতি | কী পরিবর্তন করে | কখন ব্যবহার করবেন | প্রধান সীমাবদ্ধতা |
প্রম্পট ইঞ্জিনিয়ারিং | আপনি যে অনুরোধ পাঠান | আচরণ কাঙ্ক্ষিত মানের কাছাকাছি, এবং আপনি দ্রুততা ও সহজে আগের অবস্থায় ফেরার সুযোগ চান | বেস মডেলের বিদ্যমান সক্ষমতার মধ্যেই সীমাবদ্ধ |
RAG | ইনফারেন্সের সময় মডেল যা দেখে | তথ্য প্রায়ই বদলায়, এবং LLM-কে হালনাগাদ তথ্যে অ্যাক্সেস দিতে হয় | রিট্রিভালের কারণে লেটেন্সি ও অবকাঠামো বাড়ে; আচরণ বদলায় না |
LLM ফাইন-টিউনিং | মডেলের ওয়েট (মডেলের অভ্যন্তরীণ প্যারামিটার) | বড় পরিসরে সামঞ্জস্যপূর্ণ আচরণ, ফরম্যাট বা সুর দরকার, অথবা প্রতিটি কলে ছোট প্রম্পট চান | শুরুতেই খরচ, ওয়েটে গেঁথে থাকা জ্ঞান পুরোনো হয়ে যায়, প্রি-ট্রেইনড আচরণ ভুলে যাওয়ার ঝুঁকি |
কখন ভালো প্রম্পট ফাইন-টিউনিংকে ছাড়িয়ে যায় এবং কখন তা যথেষ্ট নয়
প্রম্পটিং হলো সবচেয়ে দ্রুত ও সাশ্রয়ী উপায়। অনেক ক্ষেত্রে আরও নির্ভুল ও বিস্তারিত প্রম্পট দিয়েই কাঙ্ক্ষিত আচরণগত পরিবর্তন আনা যায়।
তবে লম্বা প্রম্পট কাজের গতি কমিয়ে দেয় ও খরচ বাড়ায়, এবং মডেলের বিদ্যমান সীমাবদ্ধতা কাটিয়ে উঠতে পারে না।
যেসব লক্ষণে বোঝা যায় প্রম্পটিং হয়তো তার সীমায় পৌঁছে গেছে:
- নতুন নতুন এজ কেস বারবার আউটপুট নষ্ট করছে: যেমন, আপনার JSON দরকার অথচ মডেল সাধারণ গদ্য ফেরত দিচ্ছে বা সুর থেকে সরে যাচ্ছে, আর প্রতিটি নতুন ক্ষেত্রের জন্য আপনাকে প্রম্পটে জোড়াতালি দিতে হচ্ছে।
- সিস্টেম প্রম্পট ক্রমশ বড় হচ্ছে: প্রম্পট শত শত বা হাজার হাজার লাইনে গিয়ে ঠেকেছে এবং তা সামলানো কঠিন হয়ে পড়েছে।
- প্রতিটি কলেই এর খরচ দিতে হয়: প্রতিটি অনুরোধে প্রম্পটটি আবার পাঠানো ও প্রসেস করা হয়, ফলে টোকেন খরচ ও লেটেন্সি বাড়ে।
- পরিবর্তনে আর কোনো ফল মিলছে না: নতুন নির্দেশনা দিয়ে আউটপুটের উন্নতি হচ্ছে না।
তবুও আগে কম খরচের প্রম্পট-স্তরের সমাধানগুলো চেষ্টা করুন। মডেলকে প্যাটার্নটি (ইনপুট/আউটপুট জোড়া) দেখাতে ফিউ-শট উদাহরণ, কঠিন কাজকে ছোট ছোট ধাপে ভাগ করতে প্রম্পট চেইনিং, অথবা নির্দিষ্ট তথ্য খোঁজা বা গণনার কাজ অন্যত্র সরিয়ে দিতে ফাংশন-কলিং হুক ব্যবহার করুন।
কখন মডেল ফাইন-টিউন করার চেয়ে RAG বেশি যুক্তিসংগত
RAG বদলায় LLM কী জানে, আর LLM ফাইন-টিউনিং বদলায় এটি কীভাবে আচরণ করে। ঘাটতিটা যদি জ্ঞানের হয়, বিশেষ করে এমন জ্ঞান যা প্রায়ই বদলায় বা আপনার নিজস্ব ডকুমেন্টে থাকে, তাহলে সমাধান RAG। ঘাটতিটা আচরণগত হলে ফাইন-টিউন করুন।
ফাইন-টিউনিং মডেলের জ্ঞানেও পরিবর্তন আনে, কিন্তু এটি যেসব তথ্য আত্মস্থ করে সেগুলো ট্রেনিংয়ের সময়েই স্থির হয়ে যায় এবং দ্রুত পরিবর্তনশীল ক্ষেত্রে খুব তাড়াতাড়ি প্রাসঙ্গিকতা হারায়। তা ছাড়া তথ্যগুলো মডেলের ওয়েটে গেঁথে যায়, তাই সেগুলোর উৎসের কোনো রেকর্ড থাকে না।
রিট্রিভাল লেয়ার যে সোর্স ডকুমেন্ট ব্যবহার করে সেগুলো হালনাগাদ করা দ্রুত ও কম খরচের, এবং এটি ঠিক কোন উৎস ব্যবহার করেছে তা উদ্ধৃত করতে পারে। তাই যখন যাচাইযোগ্য ও হালনাগাদ তথ্য দরকার, তখন এটি ভালো বিকল্প।
RAG-এর অসুবিধা কী? এটি তৈরি ও রক্ষণাবেক্ষণের জন্য একটি বাড়তি লেয়ার, এবং এতে লেটেন্সি বাড়ে।
বাস্তবে আপনার প্রায়ই দুটোই লাগবে। প্রোডাকশন সিস্টেমগুলো ফাইন-টিউনড মডেলের সঙ্গে RAG জুড়ে দেয়—একটি সামঞ্জস্যপূর্ণ আচরণের জন্য, অন্যটি সাম্প্রতিক তথ্যের জন্য।
ফাইন-টিউনিংয়ের সাধারণ ভুল, ঝুঁকি ও চ্যালেঞ্জ
ফাইন-টিউনিং সঠিক উপায় হলেও এর কিছু খরচ ও ঝুঁকি আছে:
- খরচ ও সময়: পরিচ্ছন্ন, প্রতিনিধিত্বমূলক ট্রেনিং ডেটা সংগ্রহ ও গোছানো এবং ট্রেনিংয়ের কম্পিউট—দুটোই ব্যয়বহুল।
- ক্যাটাস্ট্রফিক ফরগেটিং: সীমিত পরিসরের ডেটাসেটে ট্রেনিং পেলে মডেল সাধারণ দক্ষতা হারাতে পারে এবং নতুন ধরনের ব্যর্থতা দেখা দিতে পারে, ফলে এমন ভুল হয় যা বেস মডেল করত না।
- ওভারফিটিং: ডেটা খুব কম বা অতিরিক্ত পুনরাবৃত্তিমূলক হলে মডেল প্যাটার্ন শেখার বদলে আপনার ট্রেনিং উদাহরণগুলো মুখস্থ করে ফেলে, ফলে ট্রেনিং নমুনায় ভালো করলেও বাস্তব ইনপুটে খারাপ করে।
- পুরোনো হয়ে যাওয়া: ওয়েটে গেঁথে থাকা জ্ঞান দ্রুত পুরোনো হয়ে যায়, তাই নতুন ডেটায় আবার ট্রেনিং দিতে হয়।
- অপ্রচলিত হয়ে পড়া: আরও শক্তিশালী কোনো মডেল এলে সেটি প্রায়ই কোনো পরিবর্তন ছাড়াই আপনার ফাইন-টিউন করা মডেলকে ছাড়িয়ে যায়, আর আপনাকে পুরো কাজ আবার করতে হয়।
- মূল্যায়ন ও পুনরুৎপাদনের চ্যালেঞ্জ: ফাইন-টিউনড মডেল যে বেস মডেলের চেয়ে ভালো করছে, তা প্রমাণ করা কঠিন। একই সেটিংসে দুটি GPU ট্রেনিং রান চালালেও সামান্য ভিন্ন মডেল তৈরি হতে পারে।
- ডেটা গভর্নেন্স: মালিকানাধীন বা সংবেদনশীল ডেটায় ট্রেনিং দিলে গোপনীয়তা ও লাইসেন্সিং নিয়ে প্রশ্ন ওঠে; মডেল পরে তার ট্রেনিং ডেটার অংশবিশেষ প্রকাশ করে ফেলতে পারে।
প্রধান ফাইন-টিউনিং পদ্ধতিগুলো
LLM ফাইন-টিউনিংয়ের প্রধান ধরনগুলোর পার্থক্য হলো সেগুলো মডেলের কতটা অংশ পরিবর্তন করে: ফুল ফাইন-টিউনিং পুরো মডেলকে আবার ট্রেনিং দেয়, আর LoRA ও QLoRA-এর মতো প্যারামিটার-দক্ষ ফাইন-টিউনিং (PEFT) পদ্ধতি কেবল কিছু ওয়েট আপডেট করে। PEFT পদ্ধতিতে ফুল ফাইন-টিউনিংয়ের তুলনায় মেমোরির খরচ অনেক কম, এবং সঠিক সেটিংসে ফলাফলও সমান হতে পারে।
ফুল ফাইন-টিউনিং মডেলের প্রতিটি ওয়েট আপডেট করে। এটি সবচেয়ে ব্যয়বহুল এবং এতে ক্যাটাস্ট্রফিক ফরগেটিংয়ের ঝুঁকিও সবচেয়ে বেশি। বড় আচরণগত পরিবর্তনের জন্যই এটি রাখুন, যখন তা সমর্থন করার মতো ডেটা ও কম্পিউট আপনার কাছে আছে।
এর বিকল্প হলো প্যারামিটার-দক্ষ ফাইন-টিউনিং বা PEFT। এটি এমন সব পদ্ধতির সামগ্রিক নাম, যেগুলো মডেলের বেশিরভাগ অংশ ফ্রিজ করে রেখে কেবল প্যারামিটারের একটি ছোট সেট ট্রেনিং দেয়। এতে অনেক কম মেমোরি লাগে এবং ভুলে যাওয়ার প্রবণতাও কম, কারণ বেস মডেল অক্ষত থাকে।
কম র্যাঙ্কে PEFT ফুল ফাইন-টিউনের চেয়ে কম শেখে, তবে র্যাঙ্ক বাড়িয়ে ও লার্নিং রেট টিউন করে ইনস্ট্রাকশন-টিউনিংয়ের কাজে ব্যবধানের বেশিরভাগটাই ঘুচিয়ে ফেলা যায়।
PEFT পদ্ধতিগুলোর মধ্যে রয়েছে:
- LoRA (Low-Rank Adaptation): সাধারণত শুরুর বিকল্প; এটি মূল ওয়েটগুলো ফ্রিজ করে রাখে এবং যুক্ত করা অ্যাডাপ্টার প্যারামিটারের একটি ছোট সেট ট্রেনিং দেয়, যা প্রায়ই মোটের ১%-এরও কম, ফলে এটি একটিমাত্র কনজিউমার GPU-তেই চলে।
- QLoRA (Quantized Low-Rank Adaptation): এটি LoRA প্রয়োগের আগে বেস মডেলকে 4-বিট প্রিসিশনে সংকুচিত করে, যার ফলে একটিমাত্র GPU-তেই একটি বড় মডেল ফাইন-টিউন করা যায়।
পদ্ধতি | কী আপডেট করে | হার্ডওয়্যারের বাস্তবতা | কখন ব্যবহার করবেন |
ফুল ফাইন-টিউনিং | মডেলের প্রতিটি ওয়েট | 7B-শ্রেণির মডেলের জন্য একটি মাল্টি-GPU নোড, বড় মডেলের জন্য আরও অনেক বেশি | গভীর আচরণগত পরিবর্তন দরকার এবং ডেটা ও কম্পিউট আছে |
LoRA (PEFT) | যুক্ত করা অ্যাডাপ্টার ওয়েটের একটি ছোট সেট | একটিমাত্র কনজিউমার GPU | আপনার ডিফল্ট শুরুর বিকল্প |
QLoRA (PEFT) | 4-বিটে সংকুচিত বেস মডেলের ওপর LoRA অ্যাডাপ্টার | একটিমাত্র GPU-তে খুব বড় মডেল | মেমোরি কম, কিন্তু বড় বেস মডেল চান |
এগুলোর পাশাপাশি, মডেল কীভাবে নির্দেশনা অনুসরণ করবে এবং মানুষের পছন্দের সঙ্গে মিলবে তা গড়ে তুলতে আমরা ইনস্ট্রাকশন-টিউনিং ও প্রেফারেন্স-টিউনিং পদ্ধতি ব্যবহার করি—RLHF (Reinforcement Learning from Human Feedback) থেকে শুরু করে Direct Preference Optimization (DPO) ও Odds Ratio Preference Optimization (ORPO)-এর মতো হালকা বিকল্প পর্যন্ত।
ধাপে ধাপে কীভাবে একটি LLM ফাইন-টিউন করবেন
LLM ফাইন-টিউন করাই সঠিক সিদ্ধান্ত বলে ঠিক করার পর ওয়ার্কফ্লোটি নিচে দেওয়া হলো।
ধাপ ১: কাজটি নির্ধারণ করুন এবং কীভাবে সাফল্য পরিমাপ করবেন তা ঠিক করুন
LLM-এর কাছ থেকে কোন আচরণ চান এবং তা পেয়েছেন কি না কীভাবে বুঝবেন, তা ঠিক করুন।
ফাইন-টিউনড মডেলকে দিয়ে আপনি কোন নির্দিষ্ট কাজটি করাতে চান তা স্পষ্ট করুন, যেমন সাপোর্ট টিকিট শ্রেণিবদ্ধ করা, নির্দিষ্ট ফরম্যাটে চুক্তির সারসংক্ষেপ তৈরি করা, কিংবা আপনার প্রতিষ্ঠানের নিজস্ব স্টাইলে কোড লেখা।
এরপর সাফল্যের সংজ্ঞা ঠিক করুন। প্রচলিত বিকল্পগুলোর মধ্যে রয়েছে:
- আউটপুটের বৈধতা: যেমন, ফলাফলটি কি বৈধ JSON হিসেবে পার্স হয়, বা আপনার প্রয়োজনীয় Markdown কাঠামোর সঙ্গে মেলে?
- স্বয়ংক্রিয় স্কোর: BLEU বা ROUGE-এর মতো মেট্রিক ব্যবহার করুন, যা তৈরি করা টেক্সটকে রেফারেন্স উত্তরের সঙ্গে তুলনা করে, অথবা লেবেল করা একটি সেটে কাজের নির্ভুলতা মাপুন।
- মানুষের দেওয়া রেটিং: সুর বা সহায়কতার মতো যেসব গুণ স্ক্রিপ্ট দিয়ে ভালোভাবে মূল্যায়ন করা যায় না, সেগুলোর জন্য স্কোরভিত্তিক বা পাস/ফেল রুব্রিক।
- কঠিন ইনপুটে নির্ভরযোগ্যতা: বেস মডেল যেসব অস্বাভাবিক ইনপুটে হোঁচট খেয়েছিল, এটি কি সেগুলো সামলাতে পারে?
ধাপ ২: আপনার ডেটাসেট প্রস্তুত করুন
ফাইন-টিউনের সাফল্য নির্ভর করে ডেটার মানের ওপর, তাই সঠিক ফাইন-টিউনিং ডেটাসেট সংগ্রহে যত্ন নিন।
আপনার ডেটা JSONL-এ ইনস্ট্রাকশন/রেসপন্স জোড়া হিসেবে ফরম্যাট করুন, যেখানে প্রতিটি লাইনে ইনপুট (সঙ্গে প্রাসঙ্গিক কনটেক্সট) এবং আপনি ঠিক যে আউটপুট ফেরত চান তা থাকবে।
যেমন, সাধারণ নির্দেশনাভিত্তিক Alpaca-cleaned ডেটাসেট বা Databricks-এর Dolly-এর মতো পাবলিক ডেটাসেট দেখতে পারেন, অথবা কাজভিত্তিক banking77, যাতে ৭৭টি ইনটেন্টে লেবেল করা ১৩,০০০-এর বেশি বাস্তব সাপোর্ট কোয়েরি রয়েছে।
কোনো নির্দিষ্ট কাজের জন্য কয়েকশো থেকে কয়েক হাজার পরিচ্ছন্ন, বৈচিত্র্যময় উদাহরণই আচরণ বদলে দিতে পারে। শর্ত হলো, উদাহরণগুলোকে এজ কেসসহ বাস্তব প্রোডাকশন ইনপুটের প্রতিফলন হতে হবে এবং সেগুলোর ফরম্যাট সামঞ্জস্যপূর্ণ হতে হবে।
এখনো ইনপুট/আউটপুট জোড়া নেই? আপনার কাছে আগে থেকে থাকা ডেটা দিয়েই সেটটি তৈরি করুন, যেমন সাপোর্ট টিকিট ও সেগুলোর সেরা উত্তর, কিংবা ডকুমেন্ট ও সেগুলোর সারসংক্ষেপ।
আপনার কাছে শুধু আউটপুট থাকলে প্রতিটির জন্য একটি বিশ্বাসযোগ্য ইনপুট তৈরি করতে আরও শক্তিশালী কোনো মডেল ব্যবহার করুন, অথবা হাতে লিখে একটি ছোট সিড সেট বানিয়ে বড় একটি "টিচার" মডেল দিয়ে সেটি বাড়িয়ে নিন, তারপর সেরা জোড়াগুলো রেখে দিন।
শেষে ডেটাকে ট্রেনিং, ভ্যালিডেশন ও টেস্ট সেটে ভাগ করুন, যাতে মডেল আগে দেখেনি এমন উদাহরণে পরিমাপ করতে পারেন।
ধাপ ৩: একটি বেস মডেল ও পদ্ধতি বেছে নিন
৩ থেকে ৭ বিলিয়ন প্যারামিটারের একটি ছোট ওপেন-সোর্স মডেল এবং LoRA বা QLoRA-এর মতো একটি প্যারামিটার-দক্ষ ফাইন-টিউনিং পদ্ধতি দিয়ে শুরু করুন।
Llama, Mistral ও Qwen-এর মতো ওপেন মডেল পরিবারগুলো আপনাকে একটি শক্তিশালী বেস দেয়, যা আপনি নিজেই হোস্ট করতে পারেন, আর PEFT পদ্ধতিগুলো হার্ডওয়্যারের চাহিদা কম রাখে: QLoRA বেস মডেলকে 4-বিটে কোয়ান্টাইজ করে, তাই একটি 7B মডেল ফাইন-টিউন করতে কেবল 16-24GB-এর একটি কনজিউমার কার্ডই যথেষ্ট। একই মডেলের ফুল ফাইন-টিউনিংয়ে এর বহুগুণ মেমোরি লাগে।
ধাপ ৪: আপনার ট্রেনিং হাইপারপ্যারামিটার সেট করুন
এখানে LLM ফাইন-টিউনিংয়ের প্রধান প্যারামিটার এবং শুরুর জন্য প্রস্তাবিত পরিসর দেওয়া হলো:
- লার্নিং রেট নিয়ন্ত্রণ করে ওয়েটের প্রতিটি আপডেট কতটা বড় হবে। Biderman et al.-এর ২০২৪ সালের একটি গবেষণায় দেখা গেছে, LoRA-এর সেরা রেট ফুল ফাইন-টিউনিংয়ের চেয়ে মোটামুটি দশ গুণ বেশি ছিল—সাধারণত 5e-5 থেকে 5e-4, যেখানে ফুল ফাইন-টিউনিংয়ে 1e-5 থেকে 5e-5। গবেষণাটি 1e-5 থেকে 5e-4 পর্যন্ত সুইপ করে যে সর্বোচ্চ মানে ট্রেনিং স্থিতিশীল থাকে সেটি ব্যবহারের পরামর্শ দেয়।
- ব্যাচ সাইজ হলো প্রতিটি ওয়েট আপডেটের আগে মডেল কতগুলো উদাহরণ থেকে শেখে। একটি মাত্র GPU-তে প্রতি ডিভাইসে ১ থেকে ৮-এর ছোট ব্যাচ ব্যবহার করুন এবং গ্রেডিয়েন্ট অ্যাকুমুলেশনের মাধ্যমে মোটামুটি ১৬ থেকে ৬৪-এর কার্যকর ব্যাচে পৌঁছান।
- ইপকের সংখ্যা হলো মডেল পুরো ডেটাসেট কতবার দেখে। নির্দিষ্ট কাজ সম্পাদনের জন্য মডেলকে প্রশিক্ষণ দেওয়ার সময় ১-৩ একটি ভালো সাধারণ নিয়ম, তবে LoRA রানে প্রায়ই এর চেয়ে বেশি প্রয়োজন হয়।
- LoRA র্যাঙ্ক (r) অ্যাডাপ্টারের সক্ষমতা, অর্থাৎ এটি কতটা শিখতে পারবে, তা নির্ধারণ করে। সহজ কাজের জন্য ৮ থেকে ৩২ দিয়ে শুরু করুন এবং কঠিন কাজের জন্য এটি বাড়ান: ওপরে উল্লিখিত Biderman et al.-এর LoRA গবেষণায়, কোডের ওপর একটি 7B মডেলকে ইনস্ট্রাকশন-টিউন করার ক্ষেত্রে পূর্ণ ফাইন-টিউনিংয়ের সমান ফল পেতে র্যাঙ্ক ২৫৬ প্রয়োজন হয়েছিল, অথচ গণিতে র্যাঙ্ক ৬৪ প্রায় কাছাকাছি ফল দিয়েছিল।
- সর্বোচ্চ সিকোয়েন্স দৈর্ঘ্য হলো রানটি যে সর্বোচ্চ দৈর্ঘ্যের ইনপুট প্রসেস করবে। মডেলের কনটেক্সট উইন্ডোর সীমার মধ্যে থেকে এমনভাবে এটি সেট করুন যাতে আপনার দীর্ঘতম উদাহরণগুলো এর আওতায় আসে, কারণ এর চেয়ে দীর্ঘ যেকোনো কিছু ছেঁটে ফেলা হয়।
- ওয়ার্মআপ ও শিডিউল রান চলাকালে লার্নিং রেট কীভাবে ধীরে ধীরে বাড়বে এবং পরিবর্তিত হবে, তা নিয়ন্ত্রণ করে। সংক্ষিপ্ত ওয়ার্মআপ ও কোসাইন ডিকে সাধারণত ডিফল্ট হিসেবে ব্যবহৃত হয়। তবে Pareja et al.-এর ছোট মডেলবিষয়ক গবেষণায় দেখা গেছে, ওয়ার্মআপ বাদ দিলেও চূড়ান্ত স্কোর কমেনি।
এগুলোকে নির্দিষ্ট সেটিং হিসেবে নয়, বরং সুইপের সূচনাবিন্দু হিসেবে বিবেচনা করুন।
ধাপ ৫: প্রশিক্ষণ দিন এবং লস পর্যবেক্ষণ করুন
প্রশিক্ষণ চলার সময় এটি কাজ করছে কি না তা বুঝতে ট্রেনিং ও ভ্যালিডেশন লস কার্ভের দিকে নজর রাখুন।
লস পরিমাপ করে মডেলের আউটপুট আপনার উদাহরণগুলো থেকে কতটা দূরে, এবং রান এগোনোর সঙ্গে সঙ্গে এটি মসৃণভাবে কমা উচিত। ট্রেনিং লস সেই ডেটার ওপর হিসাব করা হয়, যা থেকে মডেল শেখে। ভ্যালিডেশন লস হিসাব করা হয় আলাদা করে রাখা উদাহরণগুলোর ওপর।
ট্রেনিং লস ও ভ্যালিডেশন লস যদি একসঙ্গে কমে, তাহলে মডেলটি সাধারণীকরণ করতে শিখছে। ট্রেনিং লস যদি কমতেই থাকে কিন্তু ভ্যালিডেশন লস স্থির হয়ে যায় বা বাড়তে থাকে, তাহলে মডেলটি প্যাটার্ন শেখার বদলে ট্রেনিং সেট মুখস্থ করছে (ওভারফিটিং)।
ধাপ ৬: মূল্যায়ন করুন, তারপর ডিপ্লয় করুন
কম ট্রেনিং লস সঠিক আউটপুটের নিশ্চয়তা দেয় না, তাই ধাপ ১-এ আপনি যে মানদণ্ড নির্ধারণ করেছিলেন, সেগুলোর ভিত্তিতে ফাইন-টিউন করা মডেলটি যাচাই করুন।
মডেলটি উত্তীর্ণ হলে ডিপ্লয় করার দুটি উপায় আছে:
- বেস মডেলের ওপর অ্যাডাপ্টারটি সার্ভ করুন এবং রানটাইমে দুটোই লোড করুন; এতে অ্যাডাপ্টারটি সহজে বদলানো যায়।
- অ্যাডাপ্টারটিকে বেস ওয়েটের সঙ্গে মার্জ করে একটি একক, স্বতন্ত্র মডেল তৈরি করুন, যা হোস্ট করা আরও সহজ।
আপনার LLM-কে হালনাগাদ তথ্যের অ্যাক্সেস দিতে Perplexity ব্যবহার করুন
আপনার প্রয়োজন অনুযায়ী মডেলের আচরণ মানিয়ে নিতে চাইলে ফাইন-টিউনিংই সঠিক সিদ্ধান্ত।
আপনার মডেলের যদি সাম্প্রতিক তথ্যের প্রয়োজন হয়, বিশেষ করে এমন তথ্য যা দ্রুত বদলায়, তাহলে আপনার একটি RAG বা নির্ভরযোগ্য থার্ড-পার্টি সার্চ টুল প্রয়োজন।
আপনার অভ্যন্তরীণ উইকি, কাস্টমার সাপোর্টের ইতিহাস, চুক্তিপত্র বা প্রোডাক্ট ডকুমেন্টেশনের মতো নিজস্ব মালিকানাধীন ডেটাসেটের জন্য একটি কাস্টম রিট্রিভাল স্ট্যাক সবচেয়ে ভালো কাজ করে।
আপনি যে জ্ঞান ব্যবহার করতে চান তা যদি সর্বজনীন হয়, তাহলে আলাদা করে কাস্টম রিট্রিভাল লেয়ার তৈরি করার প্রয়োজন নেই। Perplexity একটি অ্যানসার ইঞ্জিন, যা একটি লাইভ ওয়েব ইনডেক্স থেকে ইনলাইন, ক্লিকযোগ্য উদ্ধৃতিসহ উত্তর দেয়। এর Agent API একটি মাত্র কলেই ওয়েবভিত্তিক ও উদ্ধৃতিসহ এমন উত্তর সরবরাহ করে, ফলে আপনার অ্যাপ সাম্প্রতিক সূত্রগুলো কাজে লাগাতে পারে।
LLM ফাইন-টিউনিং সম্পর্কে সচরাচর জিজ্ঞাসিত প্রশ্ন
বিনামূল্যে কি একটি LLM ফাইন-টিউন করা যায়?
হ্যাঁ, আপনি বিনামূল্যে একটি ছোট ওপেন LLM ফাইন-টিউন করতে পারেন। উদাহরণস্বরূপ, Google Colab-এর ফ্রি টিয়ারে একটি 3B থেকে 8B মডেলে QLoRA চালানোর মতো পর্যাপ্ত GPU পাওয়া যায়, যা একটি নির্দিষ্ট কাজের জন্য যথেষ্ট। যখন ফ্রি টিয়ারের সামর্থ্যের চেয়ে বেশি মেমরি, দীর্ঘতর রান বা বড় বেস মডেলের প্রয়োজন হয়, তখন থেকে আপনাকে অর্থ খরচ করতে হবে।
আপনার কি নিজস্ব GPU প্রয়োজন, নাকি ক্লাউডে ফাইন-টিউন করা যায়?
LLM ফাইন-টিউন করতে আপনার নিজের GPU থাকার প্রয়োজন নেই। ম্যানেজড সার্ভিস ও GPU ক্লাউড প্রোভাইডাররা ঘণ্টা হিসেবে হার্ডওয়্যার ভাড়া দেয়, তাই ছোট মডেলের একটি QLoRA রানের জন্য ভাড়া করা একটি GPU-ই যথেষ্ট। GPU কেনা তখনই লাভজনক, যখন আপনি ঘন ঘন ফাইন-টিউন করেন বা আপনার সব ডেটা নিজের মেশিনেই রাখতে হয়।
LLM ফাইন-টিউন করতে কত সময় লাগে?
ছোট LLM-এর ক্ষেত্রে ডেটাসেটের আকার ও হার্ডওয়্যারের ওপর নির্ভর করে একটি রান কয়েক মিনিট থেকে কয়েক ঘণ্টার মধ্যে শেষ হতে পারে। উদাহরণস্বরূপ, Oumi তার হোস্টেড প্ল্যাটফর্মে একটি 0.8B মডেলকে এক ঘণ্টার কিছু বেশি সময়ে পুরোপুরি ফাইন-টিউন করেছে।
বড় মডেল বা হাজার হাজার উদাহরণ থাকলে সময়টা এক দিন বা তারও বেশি পর্যন্ত গড়াতে পারে: একটি একক 40GB GPU-তে একটি 7B মডেলে Emburse-এর LoRA রানে ৫,০০০টি উদাহরণের জন্য ৮ ঘণ্টা এবং ৫০,০০০টির জন্য প্রায় ৩০ ঘণ্টা লেগেছিল।
ডেটা বদলানোর সঙ্গে সঙ্গে কি ফাইন-টিউন করা মডেল নিয়মিত হালনাগাদ করা যায়?
আপনি নতুন ডেটা দিয়ে আবার ফাইন-টিউন করতে পারেন, তবে প্রতিটি রাউন্ডে কম্পিউট খরচ হয় এবং ক্যাটাস্ট্রফিক ফরগেটিংয়ের (আগে শেখা জ্ঞান ভুলে যাওয়ার) ঝুঁকি থাকে। ঘন ঘন বদলায় এমন জ্ঞানের ক্ষেত্রে সাধারণত RAG ভালো সমাধান, কারণ এতে পুনরায় প্রশিক্ষণ না দিয়ে শুধু সোর্স ডকুমেন্টগুলো হালনাগাদ করলেই চলে।