Vấn đề của full fine-tuning: LLaMA-70B có 70 tỷ tham số → update hết cần hàng trăm GB VRAM, khó train trên GPU tiêu dùng. Lưu mỗi task 1 bản full weights cũng rất tốn.
Ý tưởng LoRA (Hu et al. 2021): giữ nguyên (freeze) weights gốc W, thêm hai ma trận nhỏ A (d×r) và B (r×k) với rank r << d. Weights hiệu dụng: W + BA. Trong forward pass: h = Wx + BAx. Trong backward chỉ update A, B.
Số param update: thay vì d×k (gốc), chỉ cần r×(d+k). Với d=k=4096, r=8 → giảm từ 16.7M xuống 66K per layer (~0.4%). LoRA cho LLaMA-7B thường chỉ vài chục MB adapter.
Tại sao hoạt động: intuition là update của fine-tuning có intrinsic low rank — sự thay đổi cần thiết để adapt sang task mới nằm trong subspace thấp chiều của weights gốc. Thực nghiệm xác nhận rank 4-32 đủ cho hầu hết task.
Lợi ích thực tế:
1. Training cheap — 10-100x ít VRAM, chạy được fine-tune 7B-13B trên 1 GPU 24GB.
2. Storage cheap — lưu adapter thay vì full model, swap nhanh cho nhiều task/user.
3. Merge — có thể merge adapter vào base: W' = W + BA → inference không overhead.
4. Multi-tenant — 1 base model + N adapter nhỏ cho N khách hàng.
Hyperparams quan trọng: rank r (4-64, cao hơn cho task phức tạp), alpha (scaling, thường = 2r), target_modules (q_proj, v_proj là tối thiểu; full attention + FFN cho chất lượng cao hơn), dropout, learning_rate (1e-4 đến 5e-4, cao hơn full FT).