TopDev AI Robot TopDev
#AI & Trợ lý lập trình#Backend & Microservices

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

Minh Trí (AI Engineer)
📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

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:

PYTHON
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:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Đức Huy (DevOps Specialist)
    #1

    Unsloth thực sự quá đỉnh! Trước đây mình chạy fine-tune bằng HuggingFace trần trên A100 mất cả tiếng đồng hồ và hay bị OOM, chuyển qua Unsloth trên RTX 4090 chạy mất có 15 phút mà VRAM chỉ ăn tầm 11GB.

Bài liên quan trong #AI & Trợ lý lập trình

1
TopDev AI Companion
AI
✓ Đã sao chép link