Hướng dẫn Fine-tune mô hình AI nhỏ (SLM) cho Tiếng Việt với Unsloth (Chạy trên Google Colab)

AI Hunter

Member
Bạn muốn sở hữu một mô hình AI riêng để trả lời về "Luật giao thông Việt Nam" hay "Hỗ trợ kỹ thuật XenForo" nhưng không muốn gửi dữ liệu nhạy cảm lên ChatGPT? Giải pháp là tự huấn luyện (Fine-tune) một mô hình ngôn ngữ nhỏ (Small Language Model - SLM).

Hướng dẫn Fine-tune mô hình AI nhỏ (SLM) cho Tiếng Việt với Unsloth (Chạy trên Google Colab).jpg

Trong bài viết này, chúng ta sẽ sử dụng Unsloth - công cụ "thần thánh" giúp việc train AI nhanh hơn 2 lần và tốn ít RAM hơn 60%, cho phép bạn tự tạo AI riêng ngay trên bản miễn phí của Google Colab.

1. Giải thích thuật ngữ (Dành cho người mới)​


Trước khi vào code, hãy hiểu chúng ta đang làm gì:

SLM (Small Language Model) là gì?
Nếu GPT-4 là một giáo sư đại học biết tuốt nhưng đòi lương cao (cần máy chủ khủng), thì SLM (như Llama-3-8B, Gemma-2B) là một sinh viên mới ra trường: Nhanh nhẹn, nhẹ nhàng, chạy được trên laptop, nhưng kiến thức chuyên sâu chưa cao. Việc Fine-tune chính là quá trình "đào tạo nghiệp vụ" cho cậu sinh viên này.

4-bit Quantization (Nén 4-bit) là gì?
Mô hình gốc thường lưu dữ liệu dưới dạng 16-bit (rất nặng, tốn khoảng 16GB RAM cho model 8 tỷ tham số). Kỹ thuật 4-bit giống như việc nén ảnh độ phân giải cao thành file JPEG nhẹ hơn nhưng vẫn giữ được nét. Nó giúp model giảm dung lượng xuống 4 lần (chỉ còn ~5-6GB), vừa vặn để chạy trên các GPU miễn phí.

LoRA (Low-Rank Adaptation):
Thay vì dạy lại toàn bộ não bộ (rất lâu và tốn kém), chúng ta chỉ gắn thêm một cuốn "sổ tay ghi chú" nhỏ vào bộ não đó. Khi train, AI chỉ cập nhật cuốn sổ tay này. Kết quả: Tốc độ train cực nhanh (15-30 phút).

2. Chuẩn bị môi trường​


Chúng ta sẽ sử dụng Google Colab. Hãy truy cập Colab, vào menu Runtime -> Change runtime type -> Chọn T4 GPU.

Cài đặt thư viện Unsloth (phiên bản mới nhất):

Python:
%%capture
# Cài đặt Unsloth và các thư viện hỗ trợ
!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
!pip install --no-deps "xformers<0.0.27" "trl<0.9.0" peft accelerate bitsandbytes

3. Quy trình Fine-tune (Full Code)​


Dưới đây là toàn bộ code để dạy model Llama-3 (8 tỷ tham số) học tiếng Việt.

Bước 1: Tải Model cơ sở​


Python:
from unsloth import FastLanguageModel
import torch

max_seq_length = 2048 # Độ dài tối đa của câu
dtype = None
load_in_4bit = True # Bật chế độ nén 4-bit để tiết kiệm RAM

# Tải model Llama-3-8b đã được nén 4-bit
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "unsloth/llama-3-8b-bnb-4bit",
    max_seq_length = max_seq_length,
    dtype = dtype,
    load_in_4bit = load_in_4bit,
)

# Cấu hình LoRA (Cuốn sổ tay ghi chú)
model = FastLanguageModel.get_peft_model(
    model,
    r = 16, # Rank càng cao thì model học càng chi tiết nhưng tốn RAM hơn
    target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",
                      "gate_proj", "up_proj", "down_proj",],
    lora_alpha = 16,
    lora_dropout = 0,
    bias = "none",  
    use_gradient_checkpointing = "unsloth",
    random_state = 3407,
    use_rslora = False, 
    loftq_config = None,
)

Bước 2: Chuẩn bị dữ liệu Tiếng Việt​


Chúng ta sẽ dùng một tập dữ liệu mẫu định dạng Alpaca (Instruction - Input - Output).

Python:
from datasets import load_dataset

# Prompt mẫu để định dạng dữ liệu đầu vào
alpaca_prompt = """Dưới đây là một hướng dẫn mô tả một nhiệm vụ. Hãy viết một phản hồi hoàn thành yêu cầu đó một cách thích hợp.

### Hướng dẫn:
{}

### Đầu vào:
{}

### Phản hồi:
{}"""

EOS_TOKEN = tokenizer.eos_token # Token báo hiệu kết thúc câu

def formatting_prompts_func(examples):
    instructions = examples["instruction"]
    inputs       = examples["input"]
    outputs      = examples["output"]
    texts = []
    for instruction, input, output in zip(instructions, inputs, outputs):
        # Điền dữ liệu vào prompt mẫu
        text = alpaca_prompt.format(instruction, input, output) + EOS_TOKEN
        texts.append(text)
    return { "text" : texts, }

# Tải dataset tiếng Việt mẫu từ HuggingFace
dataset = load_dataset("bkai-foundation-models/vi-alpaca", split = "train")
dataset = dataset.map(formatting_prompts_func, batched = True)

Bước 3: Tiến hành Training (Dạy)​


Python:
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,
    dataset_num_proc = 2,
    packing = False,
    args = TrainingArguments(
        per_device_train_batch_size = 2,
        gradient_accumulation_steps = 4,
        warmup_steps = 5,
        max_steps = 60, # Demo chạy nhanh 60 bước. Thực tế bạn có thể để 500-1000 bước.
        learning_rate = 2e-4,
        fp16 = not torch.cuda.is_bf16_supported(),
        bf16 = torch.cuda.is_bf16_supported(),
        logging_steps = 1,
        optim = "adamw_8bit",
        weight_decay = 0.01,
        lr_scheduler_type = "linear",
        seed = 3407,
        output_dir = "outputs",
    ),
)

# Bắt đầu train
print("🚀 Đang bắt đầu huấn luyện...")
trainer_stats = trainer.train()

Bước 4: Kiểm tra kết quả (Inference)​


Sau khi train xong, hãy thử hỏi nó một câu.

Python:
# Bật chế độ suy luận (nhanh hơn)
FastLanguageModel.for_inference(model)

inputs = tokenizer(
[
    alpaca_prompt.format(
        "Kể tên các món ăn đặc sản của Hà Nội?", # Hướng dẫn
        "", # Đầu vào (để trống)
        "", # Đầu ra (để trống cho AI điền)
    )
], return_tensors = "pt").to("cuda")

outputs = model.generate(**inputs, max_new_tokens = 128, use_cache = True)
print(tokenizer.batch_decode(outputs)[0])

4. Lưu Model để dùng Offline​


Bạn có thể lưu model dưới dạng GGUF để chạy trên phần mềm LM Studio trên máy tính cá nhân.

Python:
# Lưu model GGUF (chế độ nén q8_0 để cân bằng chất lượng)
model.save_pretrained_gguf("model_tieng_viet", tokenizer, quantization_method = "q8_0")

Sau khi chạy lệnh này, bạn có thể tải file `.gguf` về máy và nạp vào LM Studio để chat offline mọi lúc mọi nơi!

5. Tổng kết​


Chỉ với khoảng 15 phút trên Google Colab, bạn đã có thể tinh chỉnh một mô hình AI mạnh mẽ (Llama-3) để hiểu tiếng Việt tốt hơn. Đây là bước đầu tiên để xây dựng các ứng dụng AI chuyên sâu, bảo mật dữ liệu cho doanh nghiệp hoặc dự án cá nhân của bạn.
 
Back
Top