"Dạy dỗ" Llama 3: Fine-tune AI bằng dữ liệu diễn đàn riêng (Dùng Google Colab)

AI Hunter

Member
Bạn hỏi Llama 3: "Nội quy đăng bài box Mua Bán là gì?". Nó trả lời lung tung hoặc bảo không biết.
Tại sao? Vì nó chưa bao giờ đọc nội quy diễn đàn của bạn cả.

Trong bài viết nâng cao này, chúng ta sẽ thực hiện kỹ thuật Fine-tuning (tinh chỉnh mô hình), biến Llama 3 gốc thành một phiên bản "Llama-XenForo" hiểu rõ từng ngóc ngách website của bạn.

Bonus Chapter Dạy dỗ Llama 3 Fine-tune AI bằng dữ liệu diễn đàn riêng (Dùng Google Colab).jpg

1. Fine-tuning là gì?​


[Image of fine tuning llm process diagram]

Hãy tưởng tượng:
* Pre-trained Model (Llama 3 gốc): Như một sinh viên mới tốt nghiệp Đại học. Cái gì cũng biết nhưng lý thuyết suông.
* Fine-tuning: Là quá trình "đào tạo nghiệp vụ" (Onboarding) cho nhân viên mới đó. Bạn đưa cho nó đọc tài liệu nội bộ để nó làm việc được tại công ty bạn.

Chúng ta sẽ dùng thư viện **Unsloth** (đang hot nhất hiện nay) vì nó giúp train nhanh hơn 2 lần và tốn ít RAM hơn, chạy mượt trên Google Colab gói miễn phí.

2. Chuẩn bị Dữ liệu (Dataset)​


AI học qua các cặp câu hỏi - trả lời. Bạn cần tạo một file `forum_data.jsonl`.
Cấu trúc chuẩn như sau:

JSON:
[
  {
    "instruction": "Nội quy đăng bài tại Box Mua Bán là gì?",
    "input": "",
    "output": "Theo quy định 2026, bạn cần: 1. Có ảnh thật sản phẩm kèm tên nick. 2. Không được bán hàng cấm. 3. Phải để giá công khai."
  },
  {
    "instruction": "Làm sao để lên nhóm Thành viên chính thức?",
    "input": "",
    "output": "Bạn cần đạt 50 bài viết và tham gia diễn đàn ít nhất 30 ngày. Hệ thống sẽ tự động set sau 1 giờ."
  },
  {
    "instruction": "Admin của diễn đàn là ai?",
    "input": "",
    "output": "Hiện tại Admin chính là User 'SuperAdmin', chuyên phụ trách kỹ thuật và khiếu nại."
  }
]

*Mẹo: Bạn có thể export dữ liệu từ Database XenForo ra, hoặc dùng ChatGPT để sinh ra 50-100 cặp câu hỏi mẫu từ file nội quy của bạn.*

3. Quy trình Train trên Google Colab​


Vì máy cá nhân khó có GPU mạnh, hãy truy cập: https://colab.research.google.com/
Chọn **Runtime > Change runtime type > T4 GPU**.

Sau đó chạy các đoạn code sau:

Bước 1: Cài đặt Unsloth
Python:
%%capture
!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install --no-deps "xformers<0.0.26" "trl<0.9.0" peft

Bước 2: Tải model Llama 3 gốc
Python:
from unsloth import FastLanguageModel
import torch

max_seq_length = 2048
dtype = None
load_in_4bit = True # Dùng 4bit để tiết kiệm RAM (Quan trọng!)

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/llama-3-8b-bnb-4bit", # Bản tối ưu cho Colab
    max_seq_length = max_seq_length,
    dtype = dtype,
    load_in_4bit = load_in_4bit,
)

# Thêm bộ chuyển đổi LoRA (giúp train nhanh)
model = FastLanguageModel.get_peft_model(
    model,
    r = 16,
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj"],
    lora_alpha = 16,
    lora_dropout = 0,
    bias = "none",
    use_gradient_checkpointing = "unsloth",
)

Bước 3: Nạp dữ liệu của bạn
Upload file `forum_data.jsonl` lên Colab và chạy code xử lý dữ liệu (Tôi sẽ để code mẫu chi tiết trong file đính kèm vì đoạn này hơi dài).

Bước 4: Bắt đầu Train (Dạy học)
Python:
from trl import SFTTrainer
from transformers import TrainingArguments

trainer = SFTTrainer(
    model = model,
    tokenizer = tokenizer,
    train_dataset = dataset, # Dataset đã xử lý ở B3
    dataset_text_field = "text",
    max_seq_length = max_seq_length,
    args = TrainingArguments(
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 5,
        max_steps = 60, # Train 60 bước (tầm 10 phút)
        learning_rate = 2e-4,
        fp16 = not torch.cuda.is_bf16_supported(),
        bf16 = torch.cuda.is_bf16_supported(),
        logging_steps = 1,
        output_dir = "outputs",
        optim = "adamw_8bit",
    ),
)

trainer.train()

Khi thấy thanh loading chạy và Loss giảm dần... Chúc mừng! AI đang học kiến thức của bạn.

4. Xuất file GGUF để chạy với Ollama​


Sau khi train xong, chúng ta cần chuyển đổi model về dạng `.gguf` để mang về máy tính cá nhân chạy (như Bài 4).

Python:
# Lưu dạng GGUF (lượng tử hóa q4_k_m để nhẹ máy)
model.save_pretrained_gguf("model_cua_toi", tokenizer, quantization_method = "q4_k_m")

Sau khi chạy xong, bạn sẽ thấy file `model_cua_toi-unsloth.Q4_K_M.gguf` xuất hiện. Hãy tải nó về máy tính.

5. Cài vào Jarvis​


1. Tạo file tên `Modelfile` (không đuôi) trên máy tính:
Mã:
FROM ./model_cua_toi-unsloth.Q4_K_M.gguf
SYSTEM Bạn là trợ lý ảo chuyên về XenForo.

2. Chạy lệnh tạo model mới trong Ollama:
Mã:
ollama create jarvis-pro -f Modelfile

3. Sửa code Python (Bài 4, 7) để trỏ về model mới:
Mã:
model="jarvis-pro"

Kết quả​

Bây giờ, khi bạn hỏi: *"Nội quy Box Mua Bán?"* -> Jarvis sẽ trả lời vanh vách nội quy riêng của diễn đàn bạn, chứ không chém gió chung chung nữa.
 
Back
Top