Chuyển đến nội dung chính

Bài 1: Fine-tuning là gì? — Landscape & Tại sao bạn (chưa) cần nó

Định nghĩa fine-tuning trong bối cảnh LLM hiện đại. Pre-training vs SFT vs RLHF/DPO. Khi nào cần fine-tune, khi nào KHÔNG nên. Decision framework: Prompt Engineering → RAG → Fine-tuning.

🧠 AI & ML — Bài 0 Bài 1: Fine-tuning là gì? — Landscape & Tại sao bạn (chưa) cần nó

Fine-tuning LLM: Nghệ thuật Tinh chỉnh AI

Phần 1: Tổng quan & Chiến lược — Khi nào cần Fine-tune?

xdev.asia

Giới thiệu

"Fine-tuning" là một trong những buzzword được nhắc đến nhiều nhất trong AI — nhưng cũng là kỹ thuật bị lạm dụng nhiều nhất. Trước khi nhảy vào code, bạn cần hiểu: Fine-tuning thực sự là gì, nó nằm ở đâu trong pipeline AI, và khi nào thực sự cần nó.

⚠️ Quy tắc vàng: 80% trường hợp bạn nghĩ cần fine-tune, thực ra prompt engineering hoặc RAG đã đủ. Fine-tuning là lựa chọn cuối cùng, không phải đầu tiên.


1. Vòng đời của một LLM

Trước khi hiểu fine-tuning, hãy xem LLM được tạo ra thế nào:

┌──────────────────────────────────────────────────────────────────┐
│                    VÒNG ĐỜI MỘT LLM                             │
│                                                                  │
│  Phase 1: PRE-TRAINING                                          │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ Huấn luyện trên TOÀN BỘ internet (~15 nghìn tỷ tokens)  │    │
│  │ → Học ngôn ngữ, kiến thức, lập luận chung               │    │
│  │ Cost: $10M–$100M+ | Time: Weeks–Months | GPUs: Hàng nghìn│    │
│  └─────────────────────────────────────────────────────────┘    │
│                         │                                       │
│                         ▼                                       │
│  Phase 2: SUPERVISED FINE-TUNING (SFT) ← Bạn đang ở đây        │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ Huấn luyện thêm trên dataset nhỏ, chất lượng cao        │    │
│  │ → Dạy model cách tuân thủ instructions, format, style    │    │
│  │ Cost: $10–$10,000 | Time: Minutes–Hours | GPUs: 1–8      │    │
│  └─────────────────────────────────────────────────────────┘    │
│                         │                                       │
│                         ▼                                       │
│  Phase 3: ALIGNMENT (RLHF / DPO)                               │
│  ┌─────────────────────────────────────────────────────────┐    │
│  │ Tinh chỉnh model theo preferences con người              │    │
│  │ → An toàn, helpful, honest                               │    │
│  │ Cost: $1,000–$50,000 | Cần human annotators              │    │
│  └─────────────────────────────────────────────────────────┘    │
└──────────────────────────────────────────────────────────────────┘

Điểm mấu chốt

  • Pre-training: Cho model "đọc" toàn bộ internet → biết mọi thứ nhưng không biết cách trả lời
  • SFT (Fine-tuning): Dạy model cách trả lời, theo format/style bạn muốn
  • RLHF/DPO: Tinh chỉnh model để phản hồi "đúng ý" con người

Khi người ta nói "fine-tuning", thường là Phase 2 — SFT.


2. Fine-tuning giải quyết vấn đề gì?

2.1 Behavior vs Knowledge

Đây là phân biệt quan trọng nhất để quyết định có cần fine-tune không:

Vấn đềLoạiGiải pháp
Model không biết sản phẩm của công ty bạnKnowledge gapRAG
Model trả lời phải bằng tiếng Việt, format JSON cụ thểBehavior gapFine-tuning
Model cần data real-time (giá cổ phiếu, thời tiết)Knowledge gapRAG / Tool use
Model không dùng đúng thuật ngữ ngành bạnBehavior gapFine-tuning
Model "nói nhiều" quá, bạn cần trả lời ngắn gọnBehavior gapFine-tuning (hoặc prompt)
Model không biết policy nội bộ mới nhấtKnowledge gapRAG

2.2 Ví dụ cụ thể

❌ KHÔNG cần fine-tune:

  • "Tôi muốn chatbot biết về sản phẩm của công ty" → Dùng RAG
  • "Tôi muốn model trả lời chính xác câu hỏi từ tài liệu" → Dùng RAG
  • "Tôi cần model đọc database và trả lời" → Dùng Tool Use / Agent

✅ CẦN fine-tune:

  • "Model phải luôn trả lời bằng JSON với schema cụ thể" → Fine-tune
  • "Model cần dùng giọng điệu brand riêng, rất khác default" → Fine-tune
  • "Model bé (Flash/Mini) cần perform như model lớn (Pro/4o)" → Fine-tune (distillation)
  • "Model phải hiểu thuật ngữ y khoa tiếng Việt" → Fine-tune + RAG

3. Decision Framework: Nấc thang 3 bước

Trước khi fine-tune, hãy đi qua 3 bước theo thứ tự:

Bước 1: PROMPT ENGINEERING
├── Chi phí: $0 | Thời gian: Phút
├── Thử: System prompt tốt hơn, few-shot examples, chain-of-thought
├── Đủ tốt? → DỪNG ✅
└── Không đủ? → Bước 2

Bước 2: RAG (Retrieval-Augmented Generation)
├── Chi phí: $50–$500 setup | Thời gian: Ngày
├── Thử: Kết nối knowledge base, vector DB
├── Đủ tốt? → DỪNG ✅
└── Không đủ? → Bước 3

Bước 3: FINE-TUNING
├── Chi phí: $50–$10,000+ | Thời gian: Days–Weeks
├── Chuẩn bị data, train, evaluate, iterate
└── Đây là lựa chọn cuối cùng

Checklist trước khi fine-tune

  • Đã thử ít nhất 5 phiên bản system prompt khác nhau?
  • Đã thử few-shot prompting (3–5 examples trong prompt)?
  • Nếu cần kiến thức mới → đã thử RAG?
  • Có ít nhất 100 ví dụ training data chất lượng cao?
  • Có budget cho training + evaluation iterations?
  • Có thời gian maintain model trong dài hạn?

4. Các phương pháp Fine-tuning

4.1 Full Fine-tuning

  • Cập nhật tất cả weights của model
  • Cần GPU khủng (A100 80GB+)
  • Chi phí cao, rủi ro catastrophic forgetting
  • Hiếm khi cần trong thực tế 2025–2026

4.2 Supervised Fine-Tuning (SFT) qua API

  • Dùng API của Google/OpenAI
  • Không cần quản lý GPU
  • Nhanh, dễ, chi phí vừa phải
  • Đây là cách phổ biến nhất

4.3 LoRA / QLoRA (Parameter-Efficient)

  • Chỉ cập nhật một phần nhỏ weights (~0.1–1%)
  • Chạy được trên GPU consumer (RTX 3090, T4)
  • Chi phí thấp nhất
  • Cần technical knowledge nhiều hơn
┌─────────────────────────────────────────────────┐
│           So sánh 3 phương pháp                  │
│                                                  │
│  Full FT    ████████████████████  $$$$$  🔥🔥🔥  │
│  SFT (API)  ██████████           $$     🔥       │
│  LoRA       ████                 $      🔥🔥     │
│                                                  │
│  ████ = Resources    $$$ = Cost    🔥 = Difficulty│
└─────────────────────────────────────────────────┘

5. Landscape 2025–2026: Ai cung cấp Fine-tuning?

ProviderModels hỗ trợPricing modelƯu điểm
Google (Vertex AI)Gemini 2.0 Flash, ProPer training tokenInference giá bằng base model
OpenAIGPT-4o-mini, GPT-4oPer training tokenEcosystem lớn, dễ dùng
AnthropicChưa public SFTN/AChưa available cho end users
Hugging FaceMọi open-source modelSelf-hosted / AutoTrainLinh hoạt nhất, rẻ nhất
Together AILLaMA, Mistral, ...Per training tokenQuản lý infrastructure
UnslothLLaMA, Mistral, ...Free (self-hosted)2x nhanh hơn, ít VRAM

6. Demo nhanh: Fine-tuning "Hello World"

Cảm nhận fine-tuning đơn giản nhất — dùng OpenAI API:

from openai import OpenAI
import json

client = OpenAI()

# Step 1: Chuẩn bị dataset (tối thiểu ~10 examples cho demo)
training_data = [
    {"messages": [
        {"role": "system", "content": "Bạn là trợ lý hỗ trợ khách hàng của XDev."},
        {"role": "user", "content": "Giá dịch vụ thế nào?"},
        {"role": "assistant", "content": "Dạ, XDev có 3 gói: Starter (miễn phí), Pro ($29/tháng), Enterprise (liên hệ). Anh/chị quan tâm gói nào ạ? 😊"}
    ]},
    {"messages": [
        {"role": "system", "content": "Bạn là trợ lý hỗ trợ khách hàng của XDev."},
        {"role": "user", "content": "Làm sao liên hệ support?"},
        {"role": "assistant", "content": "Dạ, anh/chị có thể liên hệ qua: 📧 [email protected] hoặc 💬 chat trực tiếp trên website. Team support online 9h-18h (GMT+7) các ngày trong tuần ạ!"}
    ]},
    # ... thêm 8+ examples nữa
]

# Step 2: Save thành JSONL file
with open("training_data.jsonl", "w") as f:
    for item in training_data:
        f.write(json.dumps(item, ensure_ascii=False) + "\n")

# Step 3: Upload file
file = client.files.create(
    file=open("training_data.jsonl", "rb"),
    purpose="fine-tune"
)

# Step 4: Tạo fine-tuning job
job = client.fine_tuning.jobs.create(
    training_file=file.id,
    model="gpt-4o-mini-2024-07-18",
    hyperparameters={"n_epochs": 3}
)

print(f"Job ID: {job.id}")
print(f"Status: {job.status}")  # → "validating_files" → "running" → "succeeded"

💡 Chú ý: Đây chỉ là demo flow. Bài 7 & 9 sẽ đi sâu chi tiết với dataset thực tế.


Tóm tắt bài học

  • Fine-tuning = dạy model cách behave (hành xử), không phải dạy knowledge (kiến thức)
  • Knowledge gap → dùng RAG | Behavior gap → dùng Fine-tuning
  • Luôn đi qua 3 bước: Prompt Engineering → RAG → Fine-tuning
  • 3 phương pháp: Full FT (hiếm) | SFT qua API (phổ biến) | LoRA (tiết kiệm)
  • Google Vertex AI + OpenAI là 2 platform chính cho API fine-tuning
  • LoRA/QLoRA cho self-hosted, chi phí thấp nhất

Bài tập

  1. Liệt kê 3 vấn đề AI trong công việc của bạn — phân loại Knowledge gap vs Behavior gap
  2. Với mỗi vấn đề, đề xuất giải pháp: Prompt Engineering, RAG, hay Fine-tuning?
  3. Tạo 10 training examples (format JSONL) cho use case bạn quan tâm
  4. Đọc blog post "A Practical Guide to Fine-Tuning" trên OpenAI Cookbook