AI Architecture & Model Training

Ultimate Guide to Fine-Tuning LLMs with Hugging Face and QLoRA

ওপেন সোর্স এআই (AI) বিপ্লবের এই যুগে নিজের বা ক্লায়েন্টের কোম্পানির জন্য একটি কাস্টম-ব্রেইনড লার্জ ল্যাঙ্গুয়েজ মডেল (LLM) তৈরি করা এখন আর কোটি টাকার সুপার-কম্পিউটার বা ভারী রিগ সেটআপের ওপর নির্ভরশীল নয়। আমরা যদি সঠিক মেথডোলজি জানি, তবে ফ্রি-টিয়ার ক্লাউড ইনফ্রাস্ট্রাকচার (যেমন Kaggle বা Google Colab) ব্যবহার করেই যেকোনো বেস মডেলকে নির্দিষ্ট ডেটাসেটের ওপর ফাইন-টিউন (Fine-Tune) করে নেওয়া সম্ভব।

মডেল ট্রেইনিং ও হোস্ট করার জন্য বর্তমান বিশ্বের সবচেয়ে পপুলার এবং স্ট্যান্ডার্ড ওপেন ইকোসিস্টেম হলো Hugging Face। আজকের গাইডে আমরা দেখবো কীভাবে Hugging Face-এর Transformers, PEFT এবং QLoRA (Quantized Low-Rank Adaptation) টেকনোলজি কম্বাইন করে মেমোরি কস্ট এবং মেমোরি লিক ছাড়া একটি কাস্টম এলএলএম ফাইন-টিউন করার প্রফেশনাল পাইপলাইন তৈরি করা যায়।

১. মেকানিজম: QLoRA কেন গেম চেঞ্জার?

একটি ৭ বিলিয়ন (7B) প্যারামিটারের মডেল সাধারণ নিয়মে ফুল ফাইন-টিউন করতে শত শত জিবি ভিডিও র‍্যাম (VRAM) প্রয়োজন হয়। কিন্তু QLoRA মেকানিজমে আমরা প্রথমে মূল মডেলটিকে ৪-বিট (4-bit Normalized Float) ফরম্যাটে কম্প্রেস বা কোয়ান্টাইজড করে ফেলি। এরপর মেইন মডেলের বিলিয়ন বিলিয়ন ওয়েটস (Weights) পরিবর্তন না করে, তার সাথে ছোট কিছু ট্রেইনেবল অ্যাডাপ্টার লেয়ার (LoRA Adapters) যুক্ত করি। এর ফলে ট্রেইনিং স্পিড বহুগুণ বেড়ে যায় এবং মাত্র ১২ থেকে ১৬ জিবি ভিআরএমে খুব চমৎকারভাবে ট্রেইনিং শেষ করা যায়।

ধাপ ২: ডেটাসেট রেডি ও হাগিং ফেস হাবে আপলোড

মডেলকে ট্রেইন করার জন্য আপনার ডেটা একটি নির্দিষ্ট চ্যাট ফরম্যাটে থাকা আবশ্যক। সবচেয়ে স্ট্যান্ডার্ড ফরম্যাট হলো Conversational JSONL। নিচে একটি স্যাম্পল স্ট্রাকচার দেওয়া হলো:

{"messages": [{"role": "system", "content": "You are Aira, a helpful AI assistant by Ahyan Creations."}, {"role": "user", "content": "Hello!"}, {"role": "assistant", "content": "Hi there! How can I assist you today?"}]}

আপনার কাস্টম ডেটা প্রস্তুত করে Hugging Face অ্যাকাউন্টের Datasets ট্যাবে গিয়ে একটি নতুন রিপোজিটরি তৈরি করে ফাইলটি আপলোড করে দিন (যেমন: username/my-custom-dataset)।

ধাপ ৩: এনভায়রনমেন্ট সেটআপ ও ডিপেন্ডেন্সি ইনস্টল

আপনার ট্রেইনিং এনভায়রনমেন্টে (টার্মিনাল বা জুপিটার নোটবুক) কোরে এআই প্যাকেজগুলো লেটেস্ট সংস্করণে আপডেট করে নিন:

pip install -q -U transformers datasets accelerators peft bitsandbytes trl textwrap3

প্রো-টিপস: ৪-বিট কোয়ান্টাইজেশনের কোড সঠিকভাবে এক্সিকিউট করার জন্য ব্যাকএন্ডে bitsandbytes লাইব্রেরি অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে।

ধাপ ৪: কোর কোর ফাইন-টুনিংস পাইথন স্ক্রিপ্ট

ট্রেইনিং রান করার জন্য তৈরি করা কাস্টম পাইথন ফাইল বা নোটবুক সেলে নিচের অ্যাডভান্সড স্ক্রিপ্টটি কনফিগার করুন:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments
from datasets import load_dataset
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from trl import SFTTrainer

# ১. মডেল এবং ডেটাসেট কনফিগারেশন
model_id = "unsloth/llama-3-8b-Instruct-bnb-4bit" # লাইটওয়েট ৪-বিট প্রি-কোয়ান্টাইজড বেস মডেল
dataset_name = "username/my-custom-dataset"

dataset = load_dataset(dataset_name, split="train")

# ২. ৪-বিট কোয়ান্টাইজেশন সেটিংস (BitsAndBytes)
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True
)

model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=bnb_config, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token = tokenizer.eos_token

# ৩. PEFT (LoRA) লেয়ার কনফিগারেশন
model = prepare_model_for_kbit_training(model)
peft_config = LoraConfig(
    r=16, # লোরার র‍্যাংক (Rank) যত বেশি হবে মেমোরি তত বেশি লাগবে
    lora_alpha=32,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, peft_config)

# ৪. ট্রেইনিং হাইপার-প্যারামিটার সেটআপ
training_args = TrainingArguments(
    output_dir="./ahyan-ai-model",
    per_device_train_batch_size=2,
    gradient_accumulation_steps=4,
    learning_rate=2e-4,
    logging_steps=10,
    max_steps=100, # আপনার ডেটাসেট অনুযায়ী স্টেপস বাড়িয়ে নিন (যেমন: ১০০০-২০০০)
    bf16=True,
    optim="paged_adamw_8bit",
    fp16=False,
    remove_unused_columns=True
)

# ৫. সুপা-ফাস্ট সুপারভাইজড ফাইন-টিউনিং (SFTTrainer)
trainer = SFTTrainer(
    model=model,
    train_dataset=dataset,
    peft_config=peft_config,
    max_seq_length=2048,
    tokenizer=tokenizer,
    args=training_args,
    dataset_text_field="messages" # চ্যাট টেমপ্লেট ফিল্ড
)

print("🚀 Starting Fine-Tuning Process...")
trainer.train()
print("🎉 Training Completed Successfully!")

ধাপ ৫: মডেল সেভ এবং হাগিং ফেস হাবে পুশ

ট্রেইনিং শেষ হওয়ার পর আপনার কাস্টম টিউনড অ্যাডাপ্টার ওয়েটস লোকাল ডিরেক্টরিতে সেভ হবে। এবার এটিকে সরাসরি আপনার Hugging Face অ্যাকাউন্টে পুশ করতে স্ক্রিপ্টের নিচে এই লাইনগুলো রান করে দিন:

# Hugging Face-এ লগইন করার কমান্ড (টোকেন প্রয়োজন হবে)
# huggingface-cli login

model.push_to_hub("username/ahyan-custom-llm")
tokenizer.push_to_hub("username/ahyan-custom-llm")

ব্যস! আপনার নিজস্ব ডেটাসেটের ওপর ভিত্তি করে তৈরি হয়ে গেলো একটি সম্পূর্ণ নতুন কাস্টম মডেল। এখন আপনি Hugging Face-এর কাস্টম ইনফারেন্স এন্ডপয়েন্ট, ওলামা (Ollama), বা যেকোনো ব্যাকএন্ড পাইথন এপিআই গেটওয়ের সাথে এই মডেল আইডিটি কানেক্ট করে আপনার চ্যাট অ্যাপ্লিকেশন, বিজনেস অটোমেশন বটস বা পার্সোনাল এআই অ্যাসিস্ট্যান্ট হিসেবে স্বাচ্ছন্দে ব্যবহার করতে পারবেন।