Fine-tuning কখন করবে, কখন করবে না: LoRA, QLoRA, dataset, evaluation

RAG বনাম fine-tuning বনাম prompting (Series 08, Episode 08)

🔴 ADVANCED Series 08 — Generative AI Engineering Episode 08 / 09

📑 এই পর্বে যা যা আছে

🧩 ১. গল্প: "চল model-টা train করি" — থামো

Rahim উত্তেজিত: "আপা, আমাদের assistant-কে আরও ভালো করতে চলুন GPT-টা আমাদের data দিয়ে fine-tune করি!" Maya একটু থামলেন, তারপর জিজ্ঞেস করলেন — "কেন? এখন কোন সমস্যাটা prompting বা RAG দিয়ে মিটছে না? fine-tuning-এর জন্য তোমার হাজার হাজার labeled example, GPU আর evaluation pipeline আছে তো?" Rahim চুপ — সে আসলে শুধু "train" শব্দটা cool শুনতে চেয়েছিল।

Maya: "একটা কথা মনে রেখো — বেশিরভাগ AI Engineer চাকরিতে model fine-tune করে না; তারা prompting আর RAG দিয়ে কাজ চালায়। fine-tuning একটা শক্তিশালী কিন্তু ব্যয়বহুল হাতিয়ার। কখন এটা না করতে হয়, সেটা জানাই এই episode-এর সবচেয়ে দামি শিক্ষা।"

২. সমস্যা: fine-tuning সবাই চায়, বেশিরভাগের লাগে না

"নিজের data দিয়ে model train" শুনতে দারুণ, কিন্তু বাস্তবে এর জন্য লাগে — quality labeled dataset, GPU, training ও evaluation pipeline, আর maintenance (নতুন data এলে আবার train)। প্রায়ই এই খরচের বিনিময়ে যা পাওয়া যায়, তার চেয়ে ভালো ফল RAG বা ভালো prompt দিয়েই আসে — অনেক কম খরচে।

গুরুত্বপূর্ণ distinction: fine-tuning model-কে নতুন fact শেখানোর নির্ভরযোগ্য উপায় নয় — সেটা RAG-এর কাজ। fine-tuning ভালো কাজ করে style, format, tone বা নির্দিষ্ট task-এর আচরণ শেখাতে।

🎯 ৩. Fine-tuning আসলে কী (এবং কী নয়)

Fine-tuning মানে একটা pretrained model-কে আপনার নির্দিষ্ট example দিয়ে আরও কিছুটা train করা, যাতে তার weights আপনার কাজের দিকে সামান্য সরে যায়। এটা model training-এরই একটা রূপ — prompting বা RAG-এর মতো inference-time কৌশল নয়।

কৌশলweight বদলায়?মূলত কী শেখায়/দেয়
Promptingনাinstruction দিয়ে behavior steer
RAGনাবাইরের fact/knowledge
Fine-tuningহ্যাঁstyle, format, নির্দিষ্ট task pattern

🪜 ৪. তিন স্তরে বোঝা

Level 1 — সহজ intuition

একজন দক্ষ কর্মীকে ভাবুন। তাকে নতুন কোম্পানির তথ্য দিতে হলে একটা handbook ধরিয়ে দিন (= RAG)। কিন্তু তার কাজের ধরন/ভঙ্গি বদলাতে হলে দীর্ঘ training দিতে হবে (= fine-tuning)। handbook দেওয়া সহজ; অভ্যাস বদলানো ব্যয়বহুল।

Level 2 — technical ভাবে কী হচ্ছে

Training-এ example-এর উপর loss হিসাব করে gradient descent দিয়ে weight update হয় (Series 04/06-এর সেই ধারণা)। fine-tuning-এ pretrained weights থেকে শুরু করে অল্প data-তে কয়েক epoch train করা হয়।

Level 3 — engineer perspective

Engineer আগে সস্তা বিকল্প (prompt, RAG) নিঃশেষ করে; তারপরও যদি নির্দিষ্ট style/task দরকার থাকে, তবেই fine-tune করে — এবং সবসময় একটা eval set-এ base vs fine-tuned তুলনা করে সিদ্ধান্ত নেয়। খারাপ data দিয়ে fine-tune করলে model খারাপ হয় (garbage in, garbage out)।

🧭 ৫. সিদ্ধান্ত-নিয়ম: Prompting → RAG → Fine-tuning

সমস্যা এল ↓ ১. ভালো prompt / few-shot দিয়ে হয়? → হ্যাঁ হলে থামো (সবচেয়ে সস্তা) ↓ না ২. নতুন fact/knowledge লাগছে? → হ্যাঁ হলে RAG ↓ না (fact নয়, style/behavior/format) ৩. নির্দিষ্ট style/format/task আচরণ? → হ্যাঁ হলে Fine-tuning (data + GPU + eval থাকলে)
এই মই ধাপে ধাপে নামুন — উপরের ধাপে সমাধান হলে নিচে নামার দরকার নেই। ৮০%+ বাস্তব ক্ষেত্রে ১ বা ২ নম্বরেই কাজ শেষ।

৬. কখন fine-tune করবে, কখন করবে না

Fine-tune করো যখন
• নির্দিষ্ট output format/style ধারাবাহিকভাবে চাই
• একটা সংকীর্ণ task বারবার (যেমন Bangla→tag)
• prompt বড় হয়ে যাচ্ছে/খরচ বাড়ছে
• quality labeled data + eval আছে
Fine-tune কোরো না যখন
• সমস্যা আসলে "নতুন fact" → RAG
• prompt দিয়েই হয়ে যাচ্ছে
• যথেষ্ট/ভালো data নেই
• data ঘন ঘন বদলায় (retrain ঝামেলা)

🧩 ৭. Full fine-tuning কেন কঠিন → LoRA

একটা বড় model-এর সব weight update করা (full fine-tuning) মানে বিশাল GPU মেমরি ও খরচ — junior/ছোট টিমের নাগালের বাইরে। সমাধান LoRA (Low-Rank Adaptation): মূল weight জমাট (frozen) রেখে, শুধু কিছু ছোট "adapter" matrix train করা। ফলে training-যোগ্য parameter নাটকীয়ভাবে কমে যায়।

Full fine-tuning: সব weight update → বিশাল GPU, ব্যয়বহুল LoRA: base frozen + ছোট adapter train → <1% parameter, অনেক কম GPU, দ্রুত
LoRA-র বড় সুবিধা: base model একটাই রেখে বিভিন্ন কাজের জন্য আলাদা ছোট adapter রাখা যায় — storage ও deployment সহজ।

🗜️ ৮. QLoRA — কম GPU-তে fine-tuning

QLoRA = LoRA + quantization। base model-কে 4-bit-এ quantize (সংখ্যা কম precision-এ রাখা) করে মেমরি আরও কমানো হয়, তারপর তার উপর LoRA adapter train করা হয়। ফলে একটা মোটামুটি বড় model একটা single consumer/free-tier GPU-তেও fine-tune করা সম্ভব হয়।

junior হিসেবে জানা যথেষ্ট: LoRA = কম parameter train; QLoRA = তার সাথে quantization যোগ করে আরও কম মেমরি। দুটোই "parameter-efficient fine-tuning (PEFT)"।

💻 ৯. Code: LoRA fine-tuning-এর কাঠামো

কেন Hugging Face PEFT? — এটা LoRA/QLoRA-কে কয়েক লাইনে করে দেয়, industry-তে সবচেয়ে প্রচলিত। নিচে কাঠামোটা দেখানো হলো (ধারণা বোঝার জন্য; বাস্তবে GPU + real dataset লাগবে)।

from transformers import (AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer) from peft import LoraConfig, get_peft_model base = "some-small-instruct-model" tokenizer = AutoTokenizer.from_pretrained(base) model = AutoModelForCausalLM.from_pretrained(base) # LoRA config: শুধু ছোট adapter train হবে lora = LoraConfig( r=8, # adapter-এর rank (ছোট = কম param) lora_alpha=16, target_modules=["q_proj", "v_proj"], # কোন layer-এ adapter lora_dropout=0.05, task_type="CAUSAL_LM", ) model = get_peft_model(model, lora) model.print_trainable_parameters() # trainable: ~0.2% of total — বাকিটা frozen # dataset: instruction → expected output জোড়া (নিজের data) # ... tokenize করে train_ds বানানো ... args = TrainingArguments( output_dir="out", num_train_epochs=3, per_device_train_batch_size=4, learning_rate=2e-4, ) trainer = Trainer(model=model, args=args, train_dataset=train_ds) trainer.train() model.save_pretrained("my-lora-adapter") # শুধু ছোট adapter সেভ
লক্ষ্য করুন print_trainable_parameters() — মূল model-এর মাত্র সামান্য অংশ train হচ্ছে। এটাই LoRA-কে সস্তা ও দ্রুত করে।

🗂️ ১০. Dataset ও Evaluation — আসল কঠিন কাজ

Fine-tuning-এর ৯০% কষ্ট code-এ নয়, data ও evaluation-এ। মনে রাখুন:

🇧🇩 ১১. বাস্তব উদাহরণ: বাংলাদেশের context

💼 ১২. Boss Question

Boss: "সবাই বলছে model fine-tune করলে আমাদের AI সেরা হবে। কত খরচ, কত লাভ?"

উত্তর: fine-tuning-এর খরচ শুধু GPU নয় — quality data বানানো, eval, আর প্রতিবার data বদলালে আবার train করা। আমাদের বেশিরভাগ চাহিদা (নতুন তথ্য জানা) RAG দিয়ে অনেক সস্তায় ও দ্রুত মিটবে, model retrain ছাড়াই। fine-tuning শুধু তখনই লাভজনক যখন নির্দিষ্ট, স্থির একটা style/format ধারাবাহিকভাবে দরকার। মানে — টাকা খরচের আগে আমরা প্রমাণ করব সস্তা পথে হচ্ছে না।

🔎 ১৩. Job Requirement Decoder

JD: "Experience with fine-tuning / LoRA / PEFT"

১. কী বোঝায়? নির্দিষ্ট task/style-এর জন্য pretrained model-কে (efficient ভাবে) train করতে পারা।
২. কেন চায়? কিছু কোম্পানির নির্দিষ্ট domain/style দরকার যা prompt/RAG-এ পুরো মেটে না।
৩. কোন সমস্যা সমাধান করে? ধারাবাহিক format/behavior, লম্বা prompt-এর খরচ কমানো।
৪. junior-এর কী জানা লাগে? কখন fine-tune করবে না, RAG vs fine-tuning vs prompting, LoRA/QLoRA-র ধারণা, data ও eval-এর গুরুত্ব।
৫. এখনই কী master লাগে না? distributed training, RLHF, বড় full fine-tuning।
৬. GitHub-এ কীভাবে দেখাবে? একটা ছোট LoRA demo — একটা সংকীর্ণ task, small dataset, base vs tuned eval তুলনা, README-তে "কেন fine-tune, কেন RAG নয়"।
৭. interview প্রশ্ন? "RAG vs fine-tuning vs prompting কখন?", "LoRA কী?", "কখন fine-tune করবে না?"

⚠️ ১৪. সাধারণ ভুল

ভুল ১: নতুন fact শেখাতে fine-tune করা। → সেটা RAG-এর কাজ; fine-tuning fact-এ অনির্ভরযোগ্য।

ভুল ২: prompt/RAG চেষ্টা না করেই সরাসরি fine-tuning। → আগে সস্তা পথ দেখুন।

ভুল ৩: এলোমেলো/inconsistent dataset। → quality ও format consistency সব।

ভুল ৪: eval ছাড়াই "উন্নত হয়েছে" ধরে নেওয়া। → base vs tuned মাপুন।

ভুল ৫: অল্প data-তে বেশি epoch → overfitting/মুখস্থ।

🎤 ১৫. Interview Prep

প্র: RAG, fine-tuning ও prompting কখন কোনটা?
উ: prompt দিয়ে হলে prompt; নতুন fact → RAG; নির্দিষ্ট style/format/task → fine-tuning।

প্র: LoRA কী, full fine-tuning থেকে আলাদা কীভাবে?
উ: base weight frozen রেখে ছোট adapter train — অনেক কম parameter ও GPU।

প্র: QLoRA?
উ: LoRA + 4-bit quantization — আরও কম মেমরিতে fine-tuning।

প্র: নতুন fact শেখাতে fine-tuning ভালো কেন নয়?
উ: fact অনির্ভরযোগ্যভাবে ঢোকে, citation নেই, data বদলালে retrain — RAG এখানে সঠিক।

✍️ ১৬. হাতে-কলমে

একটা সমস্যা লিখুন যা আপনি সমাধান করতে চান। সিদ্ধান্ত-মই (prompt → RAG → fine-tune) ধরে লিখুন কোন ধাপে এটা পড়ে এবং কেন। তারপর ৩টা কোম্পানির JD দেখে চিহ্নিত করুন — কোথায় "fine-tuning" লেখা আছে, আর সেটা আসলে fine-tuning নাকি RAG চাইছে (প্রায়ই মানুষ ভুল শব্দ ব্যবহার করে)।

🚀 ১৭. Project Connection

আমাদের flagship "Bangladesh Tech Career Assistant"-এ আমরা ইচ্ছাকৃতভাবে fine-tune করছি না — কারণ এর মূল কাজ (JD থেকে fact) RAG দিয়ে ভালোভাবেই হচ্ছে। এই সিদ্ধান্তটাই একটা শক্তিশালী portfolio গল্প: "আমি fine-tune করিনি কারণ RAG যথেষ্ট ছিল" — এটা engineering পরিপক্বতা দেখায়, যা interviewer-রা পছন্দ করে। পরের episode-এ সব একসাথে জুড়ে flagship GenAI capstone সম্পূর্ণ করব।

📌 ১৮. সারসংক্ষেপ ও পরবর্তী পর্ব

✓ fine-tuning = weight বদলানো (training); prompting/RAG নয়
✓ সিদ্ধান্ত-মই: prompt → RAG → fine-tune, উপরে হলে নিচে নামবেন না
✓ নতুন fact → RAG; নির্দিষ্ট style/format → fine-tuning
✓ LoRA = ছোট adapter train; QLoRA = + quantization (কম GPU)
✓ আসল কঠিন কাজ data quality ও evaluation
✓ অপ্রয়োজনে fine-tune না করাটাই প্রায়ই সঠিক engineering সিদ্ধান্ত
পরবর্তী Episode: "Bangla AI Knowledge Assistant (P7)" — Series 08-এর সব ধারণা (prompt, embeddings, vector DB, RAG, reranking, eval, agent) এক জায়গায় জুড়ে আমাদের flagship GenAI capstone সম্পূর্ণ করব।
© 2025 Sheikh Thanbir Alam. All Rights Reserved. thanbirtamim.github.io
এই লেখা মূল লেখকের সম্পত্তি — লিখিত অনুমতি ছাড়া কপি করে অন্য কোনো ওয়েবসাইট, ব্লগ, বই বা প্ল্যাটফর্মে প্রকাশ/বিতরণ করা কঠোরভাবে নিষিদ্ধ। Content may not be copied or republished without permission.