Fine-tuning vs RAG: Mô hình tư duy 'Dạy học vs. Học thuộc lòng'
Khi nào nên fine-tune thay vì dùng RAG? Hướng dẫn chuyên sâu về LoRA, PEFT và framework quyết định giúp bạn tránh lãng phí $10,000 giờ GPU.
“AI của chúng tôi cứ trả lời bằng tiếng Anh thay vì tiếng Việt. Có nên fine-tune không?”
“AI không biết về sản phẩm mới ra tuần trước. Có nên fine-tune không?”
Câu trả lời cho cả hai gần như không bao giờ giống nhau. Vậy mà kỹ sư liên tục nhầm lẫn giữa hai cách — và một lựa chọn sai tốn cả tuần lẫn hàng nghìn đô la.
Phần 1: Nền tảng (Mô hình tư duy)
Ví dụ Trường Y
RAG = Đưa bác sĩ một cuốn sách tham khảo trước mỗi lần khám bệnh.
- “Đây là thông tin liên quan cho bệnh nhân này. Hãy chẩn đoán.”
- Kiến thức y tế nền của bác sĩ không thay đổi.
- Lý tưởng cho: thông tin hiện tại, dữ liệu riêng của công ty.
Fine-tuning = Gửi bác sĩ đi học Trường Y thực sự.
- Não bộ của bác sĩ được đào tạo lại. Họ nội hóa kiến thức và hành vi mới.
- Lý tưởng cho: thay đổi cách model hành xử, nói chuyện và lý luận.
RAG Fine-tuning
Dùng khi: "Model thiếu kiến thức" "Model thiếu kỹ năng/phong cách"
Chi phí: Thấp (chỉ indexing) Cao ($$ giờ GPU)
Cập nhật: Tức thì (re-index là xong) Khó (phải train lại)
Ví dụ: "Biết FAQ của chúng tôi" "Luôn trả lời theo văn phong thương hiệu"
Phần 2: Điều tra (Khi nào Fine-tuning thắng?)
Fine-tuning thay đổi trọng số (weight) của model — hành vi cơ bản của nó. Dùng khi bạn cần:
- Format/style nhất quán: “Luôn trả lời dạng gạch đầu dòng markdown.”
- Ngôn ngữ chuyên ngành: Thuật ngữ y tế, ngôn ngữ pháp lý, code theo phong cách cụ thể.
- Chuyên môn hóa task: Model chỉ tạo SQL, nhanh và đáng tin cậy.
- Ngôn ngữ/phương ngữ: Dạy model viết tiếng Việt tự nhiên (không nghe như dịch máy).
Khi RAG là đủ (luôn thử cái này trước):
- Model chỉ cần sự kiện mới mà nó chưa biết.
- Bạn cần trích dẫn nguồn trong câu trả lời.
- Dữ liệu thay đổi thường xuyên (danh mục sản phẩm, giá cả).
Phần 3: Chẩn đoán (LoRA — Fine-tune không cần siêu máy tính)
Fine-tune đầy đủ cập nhật TẤT CẢ hàng tỷ tham số. Cực kỳ tốn kém.
LoRA (Low-Rank Adaptation) là bước đột phá giúp fine-tuning trở nên tiếp cận được. Thay vì cập nhật tất cả trọng số, nó thêm các ma trận adapter nhỏ vào các lớp chính. Chỉ adapter được train (~1% tham số).
Full Fine-Tuning: Cập nhật 7 tỷ tham số → cần GPU 80GB × 4 ngày
LoRA Fine-Tuning: Cập nhật ~70 triệu tham số adapter → cần GPU 16GB × 2 tiếng
Fine-tuning với Unsloth + LoRA (Python)
from unsloth import FastLanguageModel
from trl import SFTTrainer
from datasets import Dataset
# Tải model nền với lượng tử hóa 4-bit (vừa vào GPU consumer đơn)
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/llama-3-8b",
max_seq_length=2048,
load_in_4bit=True, # Model 8B chỉ cần ~6GB VRAM
)
# Áp dụng adapter LoRA
model = FastLanguageModel.get_peft_model(
model,
r=16, # Rank LoRA: cao hơn = nhiều năng lực hơn nhưng nhiều tham số hơn
lora_alpha=16,
target_modules=["q_proj", "v_proj"],
)
# Dữ liệu training (cặp instruction → response)
data = Dataset.from_list([
{"text": f"### Instruction:\n{ex['input']}\n\n### Response:\n{ex['output']}"}
for ex in du_lieu_training
])
trainer = SFTTrainer(model=model, train_dataset=data, dataset_text_field="text")
trainer.train()
# Lưu chỉ adapter (nhỏ: ~50MB so với 16GB cho toàn bộ model)
model.save_pretrained("my-lora-adapter")
Phần 4: Giải pháp (Framework Ra quyết định)
Vấn đề: "AI không biết X"
│
├── X thay đổi thường xuyên? → RAG (re-index là xong)
│
├── X là tài liệu nội bộ/riêng tư? → RAG
│
└── X là kỹ năng/hành vi/phong cách? → Fine-tune
│
├── Ngân sách < $100? → LoRA trên model mở (Llama 3, Mistral)
│
└── Ngân sách linh hoạt? → OpenAI fine-tuning API
OpenAI Fine-Tuning API (Managed, không cần GPU)
from openai import OpenAI
import json
client = OpenAI()
# 1. Upload dữ liệu training (JSONL, tối thiểu 10 ví dụ)
with open("training.jsonl", "w") as f:
for ex in training_data:
f.write(json.dumps({
"messages": [
{"role": "system", "content": "Bạn là trợ lý hữu ích."},
{"role": "user", "content": ex["cau_hoi"]},
{"role": "assistant", "content": ex["cau_tra_loi"]}
]
}) + "\n")
file = client.files.create(file=open("training.jsonl", "rb"), purpose="fine-tune")
# 2. Bắt đầu fine-tuning job
job = client.fine_tuning.jobs.create(
training_file=file.id,
model="gpt-4o-mini" # Fine-tune model nhỏ hơn (rẻ hơn)
)
# 3. Dùng model đã fine-tune
response = client.chat.completions.create(
model=job.fine_tuned_model,
messages=[{"role": "user", "content": "..."}]
)
Mô hình tư duy chốt hạ
RAG → Đưa bác sĩ sách tham khảo. Tức thì. Có nguồn. Cập nhật được.
Fine-tuning → Gửi bác sĩ học Trường Y. Vĩnh viễn. Đắt. Mạnh mẽ.
LoRA → Thêm lớp adapter phẫu thuật. Train 1% tham số. 90% hiệu quả.
Full FT → Đào tạo lại toàn bộ bộ não. Đắt gấp 100x. Hiếm khi cần.
Bắt đầu với RAG. Fine-tune chỉ khi RAG không giải quyết được.
Quy tắc 2026: 90% vấn đề sản phẩm AI giải quyết được bằng prompt tốt hơn + RAG. Fine-tune khi đã thử hết cả hai. Dùng LoRA khi fine-tune.
Bài viết liên quan
-
LLM & RAG: Mô hình tư duy 'Thủ thư Thông minh'
Tại sao LLM lại bịa chuyện? Hướng dẫn chuyên sâu về RAG (Retrieval Augmented Generation) — kiến trúc đang vận hành mọi sản phẩm AI nghiêm túc trong 2026.
-
MoneyPrinterV2: 18.000 Sao GitHub Và Cái Máy In Nội Dung Tự Động
Ollama viết kịch bản, KittenTTS đọc, Gemini vẽ hình, MoviePy ghép video. Bạn ngồi uống cà phê. YouTube Short tự lên kênh.
-
Khoj: Bộ Não AI Thứ Hai Mã Nguồn Mở Mà Bạn Có Thể Tự Cài
Khoj là ứng dụng AI cá nhân mã nguồn mở đóng vai trò như bộ não thứ hai của bạn — chat với bất kỳ LLM nào, tìm kiếm tài liệu bằng AI ngữ nghĩa, tạo agent tùy chỉnh, và tự cài đặt hoàn toàn trên máy của mình.
-
Giải Mã Super Agent Harness: Đi Sâu Vào DeerFlow Của Bytedance
Khám phá cách DeerFlow 2.0 chuyển mình từ một công cụ nghiên cứu chuyên sâu thành một hệ sinh thái agent toàn diện với sandbox, sub-agent và bộ nhớ dài hạn.