LoRA Fine-tuning: Nghệ thuật điều chỉnh LLM vừa nhẹ vừa hiệu quả

LoRA Fine-tuning: Nghệ thuật điều chỉnh LLM vừa nhẹ vừa hiệu quả

LoRA (Low-Rank Adaptation) là kỹ thuật fine-tuning tham số hiệu quả cho mô hình ngôn ngữ lớn (LLM), cho phép điều chỉnh mô hình với chi phí tính toán thấp hơn đáng kể so với full fine-tuning truyền thống. Thay vì cập nhật toàn bộ hàng tỷ tham số, LoRA đóng băng trọng số gốc và chỉ huấn luyện các ma trận phân rã bậc thấp được tiêm thêm — giảm lượng tham số có thể huấn luyện xuống còn 0,01% – 0,1% so với mô hình gốc.

Kỹ thuật này được giới thiệu trong bài báo LoRA: Low-Rank Adaptation of Large Language Models (Hu et al., 2021) và nhanh chóng trở thành chuẩn de facto cho việc tùy chỉnh LLM. Các thư viện phổ biến như Hugging Face PEFT (Parameter-Efficient Fine-Tuning) cung cấp hỗ trợ sẵn sàng cho LoRA, AQ-LoRA, DoRA và các biến thể khác.

Sơ đồ kiến trúc LoRA so với full fine-tuning, hiển thị ma trận trọng số gốc đóng băng và hai ma trận A, B bậc thấp được thêm vào

Nguyên lý hoạt động của LoRA

Giả sử một lớp neural network có trọng số W ∈ ℝd×k. Trong full fine-tuning, ta cập nhật ΔW cùng kích thước với W. LoRA giả định ΔW có bậc thấp (low-rank), cho phép phân rã:

ΔW = B × A, với A ∈ ℝr×k, B ∈ ℝd×r, r ≪ min(d, k)

Chỉ A và B được huấn luyện, trong khi W giữ nguyên. Khi inference, ta tính W + BA hoặc merge weights vĩnh viễn để không thêm latency. Tham số rank (r) điều khiển trade-off: r càng lớn thì khả năng biểu diễn càng mạnh nhưng tham số trainable càng nhiều. Giá trị thực tế phổ biến: r = 8, 16, 32, 64.

Tham số alpha (α) đóng vai trò scaling factor: scaling = α / r. Cấu hình phổ biến: r=16, alpha=32 (scaling=2) hoặc r=8, alpha=16. Dropout (thường 0.05-0.1) áp dụng lên A để regularization.

So sánh LoRA với các phương pháp khác

Phương pháp Tham số trainable VRAM yêu cầu Chất lượng Inference overhead
Full Fine-tuning 100% (hàng tỷ) Rất cao (multi-GPU) Tốt nhất Không
LoRA (r=16) ~0,1% Thấp (single GPU 24GB) Gần bằng full Có thể merge = 0
QLoRA (4-bit + LoRA) ~0,1% Rất thấp (consumer GPU) Gần bằng LoRA Có thể merge = 0
Prefix Tuning ~0,1% Thấp Kém hơn LoRA Có (prefix tokens)
Adapter (bottleneck) ~0,5-1% Trung bình Tốt Có (layer thêm)

QLoRA (Quantized LoRA) kết hợp quantization 4-bit (NF4) với LoRA, cho phép fine-tune mô hình 65B trên GPU 48GB VRAM. Đây là bước đột phá cho 민주 hóa (democratization) fine-tuning LLM lớn.

Biểu đồ so sánh VRAM usage giữa Full Fine-tuning, LoRA, QLoRA cho các kích thước model 7B/13B/30B/65B

Cấu hình LoRA thực tế với PEFT

Dưới đây là cấu hình điển hình cho fine-tune LLaMA-2-7B trên dataset Alpaca:

from peft import LoraConfig, get_peft_model, TaskType
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf",
                                             load_in_4bit=True,
                                             device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")

lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,
    lora_alpha=32,
    lora_dropout=0.05,
    target_modules=["q_proj", "v_proj", "k_proj", "o_proj",
                    "gate_proj", "up_proj", "down_proj"],
    bias="none"
)

model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# trainable params: 4,194,304 || all params: 3,587,379,200 || trainable%: 0.1169%

target_modules chỉ định các module attention và MLP nhận LoRA. Với LLaMA, thường áp dụng cho tất cả 7 projection trong attention + FFN. Với Mistral/Qwen, cấu trúc tương tự.

Các biến thể LoRA nâng cao

  • DoRA (Weight-Decomposed Low-Rank Adaptation): Phân tách magnitude và direction của weights, đạt chất lượng full fine-tuning với cùng số tham số LoRA. arXiv:2402.09353.
  • AdaLoRA: Tự động điều chỉnh rank r cho từng layer trong training, tập trung budget tham số vào layer quan trọng. arXiv:2303.10512.
  • LoRA+ / LoRA-GA: Tối ưu learning rate riêng cho A và B, hoặc gradient accumulation cho LoRA.
  • VeRA (Vector-based Random Matrix Adaptation): Chỉ train vector đơn, đóng băng ma trận random, giảm thêm 10x tham số. arXiv:2310.11454.

Khi nào nên dùng LoRA (và khi nào không)

Phù hợp LoRA:

  • Fine-tune LLM 7B-70B trên consumer/prosumer GPU (RTX 3090/4090, A100 40GB)
  • Domain adaptation: legal, medical, code, multilingual
  • Instruction tuning, chat formatting, style transfer
  • Cần deploy nhanh, merge weights để inference không overhead

Cân nhắc full fine-tuning / khác:

  • Pre-training từ đầu (continued pre-training)
  • Thay đổi kiến trúc mô hình (thêm layer, đổi vocab)
  • Yêu cầu chất lượng tuyệt đối cao nhất cho task cực kỳ chuyên biệt
  • Có cluster GPU lớn (H100 x8+) và budget không phải vấn đề

Mẹo thực chiến

  1. Merge weights sau training: model.merge_and_unload() để tạo model độc lập, không cần PEFT khi inference.
  2. Learning rate: Thường 1e-4 đến 5e-4 cho LoRA (cao hơn full fine-tuning 2-5e-5).
  3. Batch size + Gradient Accumulation: Dùng batch nhỏ (1-4) + grad_accum 16-64 để mô phỏng batch lớn.
  4. Packing sequences: Ghép nhiều sample ngắn thành sequence dài (max_seq_len) để tận dụng GPU.
  5. Evaluation: Dùng evaluation_strategy="steps" + load_best_model_at_end=True.

Tài nguyên tham khảo

LoRA đã thay đổi hoàn toàn cảnh quan fine-tuning LLM — từ đặc quyền của lab lớn thành công cụ truy cập được cho developer đơn lẻ. Với QLoRA và PEFT, bạn có thể fine-tune mô hình 7B-13B trên một chiếc RTX 4090 24GB trong vài giờ. Đã đến lúc thêm LoRA vào toolbox AI của bạn.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

So sánh tốc độ và RAM usage của Phi-3.5-mini, Gemma 2 2B, Qwen2.5 3B trên Raspberry Pi 5

So sánh SLM trên thiết bị biên Phi-3.5-mini Gemma 2 2B Qwen2.5 3B

Giới thiệu về Small Language Models (SLMs) Small Language Models (SLMs) đang trở thành xu hướng mới trong lĩnh vực AI cho thiết bị biên (Edge AI) với kích thước…

Xem thêm

RAG là gì: Retrieval Augmented Generation cho AI hiện đại

RAG: Retrieval Augmented Generation nâng cấp LLM RAG (Retrieval Augmented Generation) là kỹ thuật kết hợp truy xuất tài liệu từ cơ sở tri thức bên ngoài với khả năng…

Xem thêm

TinyML: Chạy Machine Learning Trên Vi Điều Khiển Siêu Nhỏ

TinyML là gì? TinyML là nhánh trí tuệ nhân tạo intelligence chạy trực tiếp trên vi điều khiển siêu nhỏ — những chip có RAM chỉ vài KB, không cần…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất