Fine-tuning Llama 3 với LoRA và QLoRA: Hướng dẫn chi tiết cho bài toán phân loại ticket IT
Khi nào bạn cần Fine-tuning thay vì chỉ dùng Prompt / RAG? Nhiều người nghĩ RAG có thể giải quyết mọi bài toán. Tuy nhiên, với các tác vụ yêu cầu phong cách sinh văn bản đặc thù, phân loại nhãn nội b…
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Khi nào bạn cần Fine-tuning thay vì chỉ dùng Prompt / RAG?#
Nhiều người nghĩ RAG có thể giải quyết mọi bài toán. Tuy nhiên, với các tác vụ yêu cầu phong cách sinh văn bản đặc thù, phân loại nhãn nội bộ với độ chính xác cao (Domain Classification), hoặc muốn một mô hình nhỏ 8B chạy nhanh với chi phí thấp mà không cần truyền prompt dài dằng dặc, Fine-tuning là giải pháp tối ưu nhất.
Nhờ kỹ thuật QLoRA (Quantized Low-Rank Adaptation), bạn có thể fine-tune mô hình Llama 3 8B chỉ với một chiếc card đồ họa tiêu dùng (như RTX 3090 hoặc 4090 24GB VRAM).
Các bước chuẩn bị dữ liệu & Huấn luyện với Unsloth#
Thư viện Unsloth hiện nay là công cụ nhanh nhất giúp tăng tốc huấn luyện Llama lên 2-5x và tiết kiệm 70% VRAM:
from unsloth import FastLanguageModel
import torch
max_seq_length = 2048
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/llama-3-8b-bnb-4bit",
max_seq_length=max_seq_length,
load_in_4bit=True,
)
# 1. Cấu hình LoRA Adapter
model = FastLanguageModel.get_peft_model(
model,
r=16, # Rank của LoRA
target_modules=["q_proj", "k_proj", "v_proj", "o_proj",
"gate_proj", "up_proj", "down_proj"],
lora_alpha=16,
lora_dropout=0,
bias="none",
)
# 2. Huấn luyện với tập dataset 5.000 tickets nội bộ
from trl import SFTTrainer
from transformers import TrainingArguments
trainer = SFTTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=max_seq_length,
args=TrainingArguments(
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
warmup_steps=10,
max_steps=120,
learning_rate=2e-4,
fp16=not torch.cuda.is_bf16_supported(),
bf16=torch.cuda.is_bf16_supported(),
logging_steps=1,
output_dir="outputs",
),
)
trainer.train()
Kết quả đạt được sau khi Fine-tune#
- Độ chính xác phân loại: Đạt 94.2% so với 78.5% khi dùng Zero-shot Prompting với GPT-3.5.
- Tốc độ: Tốc độ inference tăng gấp 4 lần vì prompt đầu vào chỉ cần 30 tokens thay vì phải kèm theo danh sách 50 quy tắc phân loại trong system prompt.
- Tiết kiệm: Chạy local trên server nội bộ, không phát sinh chi phí token hàng tháng.
Góc thảo luận#
Anh em trong công ty đã ai từng triển khai dự án Fine-tuning mô hình ngôn ngữ cho bài toán thực tế nào chưa? Chi phí thu thập và làm sạch dataset của anh em chiếm bao nhiêu thời gian?
Xem thêm nội dung liên quan:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #AI & Trợ lý lập trình
-
Lập trình viên có bị thay thế bởi AI không? 5 kỹ năng bắt buộc phải nâng cấp trong 2 năm tới
Hoàng Nam (Tech Lead) · 💬 1 -
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
So sánh mô hình Embedding đa ngữ: OpenAI text-embedding-3 vs BGE-M3 vs Cohere
Minh Trí (AI Engineer) · 💬 1 -
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1