Home »
Blog »
AI/ML Engineer সিরিজ » Series 08 » Episode 08
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 করি" — থামো
- ২. সমস্যা: fine-tuning সবাই চায়, বেশিরভাগের লাগে না
- ৩. Fine-tuning আসলে কী (এবং কী নয়)
- ৪. তিন স্তরে বোঝা
- ৫. সিদ্ধান্ত-নিয়ম: Prompting → RAG → Fine-tuning
- ৬. কখন fine-tune করবে, কখন করবে না
- ৭. Full fine-tuning কেন কঠিন → LoRA
- ৮. QLoRA — কম GPU-তে fine-tuning
- ৯. Code: LoRA fine-tuning-এর কাঠামো
- ১০. Dataset ও Evaluation — আসল কঠিন কাজ
- ১১. বাস্তব উদাহরণ: বাংলাদেশের context
- ১২. Boss Question
- ১৩. Job Requirement Decoder
- ১৪. সাধারণ ভুল
- ১৫. Interview Prep
- ১৬. হাতে-কলমে
- ১৭. Project Connection
- ১৮. সারসংক্ষেপ ও পরবর্তী পর্ব
🧩 ১. গল্প: "চল 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-এ। মনে রাখুন:
- Dataset: consistent, quality instruction→output জোড়া দরকার। কয়েকশো ভালো উদাহরণ প্রায়ই হাজারটা এলোমেলো উদাহরণের চেয়ে ভালো।
- Format consistency: সব example একই format/style-এ থাকতে হবে, নাহলে model বিভ্রান্ত হয়।
- Evaluation: একটা held-out eval set-এ base model বনাম fine-tuned model তুলনা করুন — সত্যিই উন্নতি হয়েছে কিনা সংখ্যায় দেখুন (আগের episode-এর eval discipline এখানেও)।
- Overfitting সতর্কতা: অল্প data-তে বেশি epoch = model শুধু মুখস্থ করে, generalize করে না।
🇧🇩 ১১. বাস্তব উদাহরণ: বাংলাদেশের context
- একটা কোম্পানি চায় সব উত্তর নির্দিষ্ট বাংলা tone ও fixed JSON format-এ — এটা fine-tuning-এর ভালো কেস (style/format)।
- Bangla legal document-এর নির্দিষ্ট tagging task যা prompt-এ ঠিকমতো হচ্ছে না — labeled data থাকলে LoRA।
- কিন্তু "কোম্পানির নতুন policy জানাও" — এটা fine-tuning নয়, RAG (কারণ এটা fact, এবং প্রায়ই বদলায়)।
💼 ১২. 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 সম্পূর্ণ করব।