Hướng dẫn sử dụng LLaMA-Factory: Fine-tuning và đánh giá mô hình LLM qua WebUI trên Linux

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

So sánh các phương pháp fine-tune mô hình LLM hiện nay

Prompt engineering hay RAG đôi khi chạm ngưỡng khi bài toán đòi hỏi mô hình hiểu sâu thuật ngữ chuyên ngành và tuân thủ định dạng output khắt khe. Lúc này, fine-tuning là nước cờ bắt buộc. Thực tế triển khai hiện chia thành ba hướng tiếp cận chính:

  • Tự viết script với PyTorch và Hugging Face Transformers: Kỹ sư tự dựng pipeline từ nạp weight, tokenization, custom loss cho tới cấu hình DeepSpeed/FSDP. Cách này linh hoạt tuyệt đối nhưng tốn công dựng boilerplate.
  • Sử dụng framework CLI chuyên dụng (Axolotl, Unsloth): Tối ưu tài nguyên cực tốt, cấu hình gói gọn trong file YAML. Phương án này chạy mượt trên cụm máy chủ CI/CD nhưng đòi hỏi kỹ sư quen làm việc dòng lệnh.
  • Nền tảng tích hợp WebUI (LLaMA-Factory): Hỗ trợ sẵn hơn 100 dòng kiến trúc (Llama 3, Qwen 2.5, Mistral). Bộ công cụ tích hợp sẵn LoRA, QLoRA, GaLore kèm dashboard theo dõi real-time trên trình duyệt.

Đánh giá ưu và nhược điểm từng phương án

Mỗi giải pháp đều đánh đổi giữa tốc độ thử nghiệm, khả năng kiểm soát mã nguồn và độ sâu can thiệp hệ thống.

1. Tự viết script với Hugging Face thuần

  • Ưu điểm: Can thiệp sâu vào từng layer trọng số. Dễ dàng tùy biến loss function riêng hoặc tích hợp kiến trúc attention mới.
  • Nhược điểm: Dễ dính lỗi tràn bộ nhớ (CUDA OOM). Bạn sẽ tốn nhiều giờ cấu hình gradient checkpointing, zero-redundancy optimizer và memory pinning.

2. Dùng CLI framework (Axolotl / Unsloth)

  • Ưu điểm: Tốc độ huấn luyện vượt trội. Điển hình như Unsloth có thể cắt giảm 50% đến 80% VRAM nhờ tối ưu lại kernel Triton. Cấu hình YAML cũng rất tiện để quản lý phiên bản trên Git.
  • Nhược điểm: Không có giao diện trực quan. Người mới rất dễ cấu hình sai LoRA rank hoặc learning rate scheduler mà không phát hiện kịp thời qua biểu đồ loss.

3. LLaMA-Factory tích hợp WebUI

  • Ưu điểm: Gom trọn pipeline vào giao diện web. Từ upload dataset, chọn tham số PEFT đến đọc biểu đồ TensorBoard đều gói gọn trong vài click. Ngoài ra, bạn có thể chat thử ngay với checkpoint mới train xong mà không cần gõ code inference.
  • Nhược điểm: Cần thiết lập SSH tunnel nếu máy chủ đặt ở cloud riêng. Khi muốn can thiệp thuật toán attention đặc thù, bạn vẫn phải sửa core source code.

Thực tế kiểm chứng: Vì sao LLaMA-Factory đáng cân nhắc?

Nếu mục tiêu của team là hoàn thiện bản PoC hoặc đóng gói mô hình nghiệp vụ trong vài ngày, LLaMA-Factory giúp rút ngắn 80% thời gian chuẩn bị. Thay vì vật lộn với code nạp dữ liệu, bạn chỉ cần tập trung nâng cao chất lượng dataset.

Trong một dự án bot hỗ trợ nội bộ gần đây, nhóm mình fine-tune bản Qwen2.5-7B-Instruct trên tập 5.000 mẫu FAQ kỹ thuật. Chạy trên một GPU RTX 3090 (24GB VRAM) với chuẩn LoRA (rank 16, alpha 32, batch size 2, gradient accumulation 4), toàn bộ quá trình 3 epoch chỉ mất 1 giờ 45 phút. Mức VRAM sử dụng ổn định ở 14.8GB. Loss giảm đều từ 2.15 xuống 0.72 mà không hề gặp sự cố OOM.

Từng bước triển khai LLaMA-Factory trên máy chủ Linux

1. Chuẩn bị môi trường Linux và driver CUDA

Hệ thống thử nghiệm mượt nhất trên Ubuntu 22.04 LTS có sẵn driver NVIDIA và CUDA Toolkit 12.1 hoặc 12.4. Trước hết, tạo một môi trường Conda tách biệt:

# Tạo và kích hoạt môi trường riêng
conda create -n llama_factory python=3.10 -y
conda activate llama_factory

# Kiểm tra dung lượng GPU và phiên bản CUDA
nvidia-smi

2. Cài đặt LLaMA-Factory và FlashAttention

Kéo mã nguồn từ GitHub rồi cài đặt các dependency cần thiết cho WebUI và thư viện lượng tử hóa bitsandbytes:

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory

# Cài đặt core package kèm giao diện WebUI và công cụ đo lường
pip install -e ".[torch,metrics,bitsandbytes]"

# Cài thêm flash-attn để tăng tốc 20-30% trên GPU Ampere trở lên (RTX 3090, A100, H100)
pip install flash-attn --no-build-isolation

3. Chuẩn bị dữ liệu theo chuẩn Alpaca

LLaMA-Factory đọc danh mục dataset qua file data/dataset_info.json. Tạo file câu hỏi – câu trả lời nội bộ tại data/internal_faq.json theo định dạng sau:

[
  {
    "instruction": "Làm thế nào để reset mật khẩu VPN công ty?",
    "input": "",
    "output": "Bạn truy cập portal https://id.company.internal, chọn Quên mật khẩu và xác thực qua Google Authenticator."
  },
  {
    "instruction": "Quy trình deploy ứng dụng lên staging gồm những bước nào?",
    "input": "Ứng dụng microservice chạy trên Kubernetes.",
    "output": "Tạo PR vào branch develop. Sau khi test pass trên GitLab CI, ArgoCD sẽ tự động đồng bộ manifest vào namespace staging."
  }
]

Tiếp đến, mở file data/dataset_info.json và khai báo key mới ở cuối file:

"internal_faq": {
  "file_name": "internal_faq.json"
}

4. Khởi chạy WebUI và cấu hình thông số train

Kích hoạt WebUI bằng CLI tích hợp sẵn:

# Chạy WebUI với port 7860
llamafactory-cli webui
# Hoặc dùng lệnh direct:
# GRADIO_SERVER_PORT=7860 python src/webui.py

Nếu server không mở port công khai, bạn forward port về máy cá nhân qua SSH:

ssh -L 7860:127.0.0.1:7860 user@remote-server-ip

Mở trình duyệt vào http://localhost:7860 và thiết lập các thông số cơ bản:

  • Model name: Chọn dòng model, ví dụ Qwen2.5-7B-Instruct hoặc Llama-3.1-8B-Instruct.
  • Model path: Điền đường dẫn checkpoint local hoặc ID repo trên Hugging Face.
  • Finetuning method: Chọn lora nếu có từ 24GB VRAM. Nếu dùng card 12GB–16GB (như RTX 3060/4070), chọn thêm 4-bit ở mục Quantization bit để chạy QLoRA.
  • Dataset: Chọn internal_faq.
  • Learning rate: Điền 5e-5 (dành cho LoRA) hoặc 1e-4 (với QLoRA).
  • Epochs: 3 đến 5 epoch.
  • LoRA rank (r) & alpha: Đặt r = 16 và lora_alpha = 32 để mô hình học tốt cấu trúc câu mà dung lượng adapter chỉ nặng khoảng 40MB–80MB.

Bấm nút Start. Hệ thống sẽ bắt đầu train, hiển thị biểu đồ loss thực tế và ước lượng thời gian còn lại.

5. Đánh giá và xuất mô hình thành phẩm

Sau khi tiến trình train cán đích 100%, bạn không cần viết thêm script để kiểm thử:

  • Thử nghiệm tại tab Chat: Chọn đường dẫn checkpoint vừa lưu, nhấn Load model. Gõ thử các câu hỏi hóc búa để kiểm tra xem mô hình đã trả lời đúng nghiệp vụ nội bộ hay chưa.
  • Xuất trọng số tại tab Export: Bạn có thể merge trực tiếp LoRA adapter vào base model ban đầu. Sau khi merge, model được lưu dưới dạng standalone checkpoint để load thẳng vào vLLM, Ollama hoặc convert sang file GGUF chạy offline.

Nhờ quy trình khép kín này, bạn có thể hoàn thành một chu kỳ thử nghiệm mô hình chỉ trong một buổi làm việc thay vì mất nhiều ngày như trước.

Share: