AI

[AI Blog #32] Kỹ Thuật Tinh Chỉnh Mô Hình Ngôn Ngữ Lớn (LLM Fine-Tuning): PEFT, LoRA vs. QLoRA, Alignment Với RLHF vs. DPO & Tối Ưu Hóa VRAM

0 views
[AI Blog #32] Kỹ Thuật Tinh Chỉnh Mô Hình Ngôn Ngữ Lớn (LLM Fine-Tuning): PEFT, LoRA vs. QLoRA, Alignment Với RLHF vs. DPO & Tối Ưu Hóa VRAM

1. Bối cảnh thực tế (Context & Problem Statement)

Các mô hình nền tảng (Foundation LLMs như LLaMA 3, Mistral, Qwen) được huấn luyện trước (Pre-trained) trên hàng nghìn tỷ tokens từ Internet. Dù sở hữu tri thức rộng lớn, mô hình gốc (Base Model) chỉ giỏi việc đoán từ tiếp theo và hoàn toàn chưa biết cách tuân thủ chỉ dẫn của con người (Instruction Following), trả lời sai định dạng JSON nghiệp vụ hoặc thiếu tri thức chuyên sâu của doanh nghiệp.

Để biến Base Model thành trợ lý đắc lực, ta bắt buộc phải thực hiện Fine-Tuning (Tinh chỉnh mô hình).

Tuy nhiên, Full Fine-Tuning (Huấn luyện lại toàn bộ trọng số) là điều bất khả thi về mặt chi phí:

  • Để Full Fine-tune một mô hình 70B ở độ chính xác 16-bit, ta cần ít nhất >1.1 TB VRAM GPU> 1.1\text{ TB VRAM GPU} (do phải lưu trữ đồng thời: Trọng số gốc 140GB140\text{GB} + Gradients 140GB140\text{GB} + Trạng thái Adam Optimizer 560GB560\text{GB} + Activations).
  • Chi phí thuê hàng chục cụm máy chủ 8x A100/H100 vượt quá ngân sách của hầu hết các doanh nghiệp.

Cuộc cách mạng PEFT (Parameter-Efficient Fine-Tuning) với đại diện tiêu biểu là LoRA và QLoRA đã thay đổi hoàn toàn cuộc chơi: Cho phép fine-tune các LLM hàng đầu với ít hơn 90%90\% VRAM mà vẫn đạt độ chính xác tương đương 99%99\% so với Full Fine-Tuning.


2. Các Khái Niệm & Cơ Chế Cốt Lõi

2.1. Bản Chất Toán Học Của LoRA (Low-Rank Adaptation)

Nghiên cứu của Microsoft (Hu et al., 2021) chỉ ra rằng: Mặc dù ma trận trọng số W0∈Rd×kW_0 \in \mathbb{R}^{d \times k} của LLM có số chiều khổng lồ, ma trận biến thiên trọng số ΔW\Delta W trong quá trình học tác vụ mới có một "Hạng nội tại" (Intrinsic Rank) rất nhỏ.

  • Cơ chế LoRA:
    • Đóng băng hoàn toàn (Freeze) ma trận trọng số gốc W0W_0.
    • Phân rã ma trận biến thiên ΔW\Delta W thành tích của 2 ma trận có hạng thấp (Low-Rank Matrices): ΔW=B×A\Delta W = B \times A (với A∈Rr×kA \in \mathbb{R}^{r \times k}, B∈Rd×rB \in \mathbb{R}^{d \times r}, và Hạng r≪min⁡(d,k)r \ll \min(d, k), thường chọn r∈[8,64]r \in [8, 64]).
  • Luồng tính toán Forward Pass: h=W0x+ΔWx=W0x+αr(B⋅A)xh = W_0 x + \Delta W x = W_0 x + \frac{\alpha}{r} (B \cdot A) x (trong đó α\alpha là hệ số tỷ lệ scaling factor cố định).
  • Khởi tạo trọng số (Initialization):
    • Ma trận AA được khởi tạo theo phân phối chuẩn Gauss (N(0,σ2)\mathcal{N}(0, \sigma^2)).
    • Ma trận BB được khởi tạo toàn bộ bằng 00.
    • →\rightarrow Tại bước t=0t=0, ΔW=B×A=0\Delta W = B \times A = 0, mô hình bắt đầu chính xác từ trạng thái ban đầu của W0W_0 mà không bị nhiễu!
  • Zero Inference Latency (Không phát sinh độ trễ khi suy luận):
    • Khi deploy lên Production, ta chỉ cần cộng gộp trực tiếp ΔW\Delta W vào W0W_0 (Wfinal=W0+αrBAW_{\text{final}} = W_0 + \frac{\alpha}{r} BA). Mô hình không tốn thêm bất kỳ phép tính nào lúc phục vụ người dùng!
                    Input (x)
                   /        \
                  /          \
  [Frozen W_0 (d x k)]      [Matrix A (r x k) - Gaussian Init]
        (Không học)                  |
          |                 [Matrix B (d x r) - Zero Init]
          |                          |
          |                 [Scaling * (alpha / r)]
          \                          /
           \                        /
            ---> (+) Output (h) <---

2.2. QLoRA: Đột Phá Lượng Tử Hóa 4-bit (Dettmers et al., 2023)

QLoRA nâng cấp LoRA lên một tầm cao mới thông qua 3 kỹ thuật phần cứng cốt lõi:

  1. 4-bit NormalFloat (NF4): Kiểu dữ liệu lượng tử hóa 4-bit tối ưu về mặt lý thuyết thông tin cho các trọng số nơ-ron tuân theo phân phối chuẩn (Zero-mean Normal Distribution), bảo toàn chất lượng mô hình tốt hơn nhiều so với kiểu số nguyên INT4 thông thường.
  2. Double Quantization (DQ - Lượng tử hóa kép): Lượng tử hóa chính các hằng số lượng tử (Quantization Constants), giúp tiết kiệm thêm 0.37 bit0.37\text{ bit} trên mỗi tham số (tiết kiệm khoảng 3GB3\text{GB} VRAM cho mô hình 65B).
  3. Paged Optimizers: Tận dụng bộ nhớ thống nhất CUDA Unified Memory để tự động chuyển các trạng thái bộ nhớ Optimizer sang RAM của CPU khi GPU bị đỉnh điểm quá tải (VRAM Spikes), triệt tiêu hoàn toàn lỗi CUDA Out of Memory (OOM).

2.3. Căn Chỉnh Hành Vi (Model Alignment): RLHF vs. DPO

Sau khi Fine-tune theo chỉ dẫn (Supervised Fine-Tuning - SFT), mô hình cần được "căn chỉnh" để đảm bảo 3 tiêu chí: Hữu ích (Helpful), Trung thực (Honest) và Vô hại (Harmless).

  1. RLHF (Reinforcement Learning from Human Feedback - PPO):
    • Bước 1: Con người chấm điểm các câu trả lời để huấn luyện một Mô hình Thưởng (Reward Model) riêng biệt.
    • Bước 2: Dùng thuật toán học tăng cường PPO (Proximal Policy Optimization) để tối ưu hóa LLM sinh ra câu trả lời đạt điểm Reward cao nhất, kết hợp thành phần phạt KL-Divergence để tránh mô hình bị "lệch lạc" quá xa khỏi mô hình gốc.
    • Nhược điểm: Cực kỳ phức tạp, không ổn định (Unstable training), đòi hỏi nạp đồng thời 4 mô hình vào VRAM (Actor, Critic, Reward Model, Reference Model).
  2. DPO (Direct Preference Optimization - Rafailov et al., 2023):
    • Chứng minh bằng toán học rằng: Hàm mất mát của bài toán Alignment có thể được biểu diễn trực tiếp qua xác suất của chính LLM mà không cần huấn luyện riêng Reward Model hay dùng thuật toán PPO phức tạp!
    • Hàm mất mát DPO Loss: LDPO(πθ;πref)=−E(x,yw,yl)[ln⁡σ(βln⁡πθ(yw∣x)πref(yw∣x)−βln⁡πθ(yl∣x)πref(yl∣x))]\mathcal{L}_{\text{DPO}}(\pi_\theta; \pi_{\text{ref}}) = -\mathbb{E}_{(x, y_w, y_l)} \left[ \ln \sigma \left( \beta \ln \frac{\pi_\theta(y_w|x)}{\pi_{\text{ref}}(y_w|x)} - \beta \ln \frac{\pi_\theta(y_l|x)}{\pi_{\text{ref}}(y_l|x)} \right) \right] (trong đó ywy_w là câu trả lời được ưa thích hơn - Winner, yly_l là câu trả lời bị từ chối - Loser).
    • Ưu điểm: Ổn định tuyệt đối, huấn luyện đơn giản như một bài toán phân loại Cross-Entropy thông thường, nhanh hơn gấp nhiều lần và trở thành chuẩn mực số 1 cho các LLM hiện đại.

3. Các Bảng Markdown So Sánh Chi Tiết

📊 Bảng 1: So Sánh Các Phương Pháp Fine-Tuning LLMs

Tiêu chíFull Fine-TuningLoRA (Low-Rank Adaptation)QLoRA (Quantized LoRA)Prompt Tuning / Prefix
Số tham số cần học100%100\% toàn bộ mô hình0.1%−1.0%\mathbf{0.1\% - 1.0\%}0.1%−1.0%\mathbf{0.1\% - 1.0\%}<0.01%< 0.01\% (Chỉ học vector tiền tố)
Bộ nhớ VRAM yêu cầu (Model 7B)>60 GB> 60\text{ GB} (Cần GPU A100/H100)≈16 GB\approx 16\text{ GB} (Vừa khít 1 GPU RTX 4090)≈6 GB\approx 6\text{ GB} (Chạy tốt trên GPU Laptop / T4)<10 GB< 10\text{ GB}
Chất lượng mô hìnhTuyệt đối (100%100\%)Gần như 100%100\% tương đương Full≈99%\approx 99\% so với LoRA 16-bitKém hơn, khó hội tụ trên tác vụ khó
Chi phí hạ tầngRất đắt đỏTiết kiệmRẻ nhấtRất rẻ
Độ trễ lúc InferenceKhông tăngKhông tăng (Nhờ Merge weights)Tăng nhẹ nếu giữ nguyên dạng 4-bitTốn thêm Context tokens
Khuyến nghị sử dụngKhi xây dựng Foundation Model mớiKhi có GPU chuyên dụng (24GB24\text{GB} VRAM)Chuẩn mực tối ưu cho hầu hết mọi dự án thực tếÍt dùng cho bài toán phức tạp

📊 Bảng 2: So Sánh Các Phương Pháp Căn Chỉnh Hành Vi (Model Alignment)

Tiêu chíRLHF (với thuật toán PPO)DPO (Direct Preference Optimization)KTO (Kahneman-Tversky Optimization)
Cần Reward Model riêng?Bắt buộc (Phải train Reward Model trước)Không (Tận dụng trực tiếp Implicit Reward của LLM)Không
Định dạng dữ liệu đầu vàoCặp so sánh nhị phân: (Prompt, Chosen, Rejected)Cặp so sánh nhị phân: (Prompt, Winner, Loser)Dữ liệu đơn lẻ gắn nhãn Thích/Không thích (Prompt, Response, Thumbs Up/Down)
Độ ổn định khi huấn luyệnKém (Rất nhạy cảm với Hyperparameters, dễ sụp đổ)Cực kỳ ổn định (Hàm lồi, chuẩn xác)Ổn định
Số lượng mô hình cần giữ trong RAM44 models (Actor, Critic, Ref, Reward)Chỉ 2 models (Policy πθ\pi_\theta và Reference πref\pi_{\text{ref}})2 models
Vị thế hiện nayTừng là chuẩn của GPT-3.5/InstructGPTChuẩn mực thống trị hiện nay (Llama 3, Zephyr, Mixtral)Tăng trưởng nhanh khi chỉ có dữ liệu gắn nhãn 1 chiều

📊 Bảng 3: So Sánh Các Định Dạng Lượng Tử Hóa (Quantization Formats)

Định dạngSố bit / Trọng sốBộ nhớ VRAM cho Model 7BMức độ suy giảm chất lượng (Perplexity Loss)Mục đích sử dụng tối ưu
FP16 / BF1616 bits (2 bytes2\text{ bytes})≈14 GB\approx 14\text{ GB}0%0\% (Baseline chuẩn)Huấn luyện tiêu chuẩn, Full Training
INT88 bits (1 byte1\text{ byte})≈7 GB\approx 7\text{ GB}Rất thấp (<0.5%< 0.5\%)Suy luận (Inference) cân bằng
4-bit NF4 (QLoRA)4 bits (0.5 byte0.5\text{ byte})≈4−5 GB\approx 4 - 5\text{ GB}Cực nhỏ (<1%< 1\%)Fine-Tuning mô hình lớn trên GPU phổ thông
GPTQ / AWQ4 bits (Đã tối ưu hóa ma trận)≈4 GB\approx 4\text{ GB}Rất thấpChuyên sâu phục vụ suy luận thời gian thực (Fast Serving)

4. Best Practices & Kỹ Thuật Huấn Luyện Thực Chiến (Pro-Tips)

💡 Lựa chọn Target Modules tối ưu cho LoRA

  • Trong bài báo gốc, LoRA chỉ áp dụng lên WQW_Q và WVW_V.
  • Kinh nghiệm thực chiến hiện đại: Để đạt chất lượng cao nhất tương đương Full Fine-Tuning, bắt buộc phải áp dụng LoRA lên tất cả các ma trận Linear của Transformer:
    from peft import LoraConfig
    
    peft_config = LoraConfig(
        r=16,                           # Rank (8 đến 32 là lý tưởng)
        lora_alpha=32,                  # Thường chọn alpha = 2 * r
        lora_dropout=0.05,
        bias="none",
        task_type="CAUSAL_LM",
        # Áp dụng lên toàn bộ các tầng Attention và MLP:
        target_modules=[
            "q_proj", "k_proj", "v_proj", "o_proj",   # Attention Projection
            "gate_proj", "up_proj", "down_proj"       # SwiGLU MLP Layers
        ]
    )
    

💡 Chuẩn hóa định dạng dữ liệu (Chat Template Standardization)

Luôn sử dụng đúng chuẩn ChatML / Tokenizer Template của mô hình gốc (ví dụ LLaMA 3 có cấu trúc <|start_header_id|>user<|end_header_id|>...) để tránh việc mô hình bị "loạn ngữ nghĩa" do sai lệch ký tự phân tách đặc biệt (Special Tokens).


5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)

❓ Câu hỏi 1: Giải thích nguyên lý toán học của LoRA (Low-Rank Adaptation). Tại sao việc phân rã ma trận ΔW=B×A\Delta W = B \times A với rank r≪dr \ll d lại có thể đạt hiệu năng tương đương 99%99\% so với Full Fine-Tuning trong khi giảm 90%+90\%+ bộ nhớ GPU?

  • Gợi ý trả lời:
    • Bản chất toán học:
      • Giả sử ma trận trọng số ban đầu là W0∈Rd×kW_0 \in \mathbb{R}^{d \times k}. Khi thích ứng với một tác vụ mới, thay vì học lại toàn bộ d×kd \times k tham số của ΔW\Delta W, LoRA giả định rằng thông tin biến đổi nằm trong một không gian con có số chiều thấp hơn nhiều (Low Intrinsic Dimension).
      • Bằng cách đặt ΔW=B×A\Delta W = B \times A với A∈Rr×kA \in \mathbb{R}^{r \times k} và B∈Rd×rB \in \mathbb{R}^{d \times r} (trong đó r≪dr \ll d), số lượng tham số cần tối ưu hóa giảm từ (d×k)(d \times k) xuống chỉ còn r×(d+k)r \times (d + k).
      • Ví dụ cụ thể: Nếu d=k=4096d = k = 4096 và chọn r=8r = 8:
        • Số tham số gốc: 4096×4096≈16.7 triệu4096 \times 4096 \approx 16.7\text{ triệu} tham số.
        • Số tham số LoRA: 8×(4096+4096)≈65,5368 \times (4096 + 4096) \approx 65,536 tham số (Giảm 256 laˆˋn256\text{ lần}!).
    • Lý do tiết kiệm bộ nhớ khổng lồ:
      • Bộ nhớ VRAM lớn nhất lúc train không nằm ở trọng số mà nằm ở Trạng thái bộ tối ưu hóa (Optimizer States của Adam) đòi hỏi 8 bytes8\text{ bytes} cho mỗi tham số cần update.
      • Giảm 99%99\% số lượng tham số có thể huấn luyện đồng nghĩa với việc loại bỏ gần như 99%99\% dung lượng VRAM dành cho Optimizer States và Gradients!

❓ Câu hỏi 2: So sánh phương pháp căn chỉnh RLHF (sử dụng thuật toán PPO) và DPO (Direct Preference Optimization). Tại sao DPO lại đang dần thay thế hoàn toàn RLHF trong các dự án LLM mã nguồn mở hiện nay?

  • Gợi ý trả lời:
    • Hạn chế của RLHF (PPO):
      1. Quy trình 2 bước phức tạp: Phải huấn luyện riêng một Reward Model →\rightarrow Nếu Reward Model bị sai lệch hoặc bị "hack điểm" (Reward Hacking), mô hình LLM sẽ sinh ra các câu trả lời rác nhưng điểm thưởng vẫn cao.
      2. Chi phí tài nguyên khổng lồ: Trong lúc chạy PPO, phải duy trì đồng thời 4 mô hình lớn trong VRAM (Actor, Critic, Reference Model, Reward Model).
      3. Không ổn định: Thuật toán học tăng cường PPO rất nhạy cảm với hyperparameters và rất dễ bị phân kỳ (Divergence).
    • Sự đột phá của DPO:
      • DPO chứng minh rằng ta có thể tìm ra nghiệm tối ưu của bài toán Maximum Likelihood trực tiếp từ dữ liệu sở thích (x,yw,yl)(x, y_w, y_l) thông qua mối quan hệ toán học giữa Policy Model πθ\pi_\theta và Reference Model πref\pi_{\text{ref}}.
      • DPO loại bỏ hoàn toàn Reward Model và thuật toán PPO.
      • Quá trình huấn luyện trở thành một bài toán Supervised Cross-Entropy ổn định, đơn giản, chỉ cần 2 mô hình trong VRAM, chạy nhanh hơn gấp 3×−5×3\times - 5\times và cho kết quả căn chỉnh vượt trội hơn hẳn.

❓ Câu hỏi 3: QLoRA đạt được khả năng Fine-tune mô hình 70B trên chỉ 2 chiếc GPU thông thường (24GB24\text{GB} VRAM) nhờ những cải tiến kỹ thuật đột phá nào?

  • Gợi ý trả lời (3 trụ cột kỹ thuật của QLoRA):
    1. Lượng tử hóa 4-bit NormalFloat (NF4):
      • Trọng số của các mạng nơ-ron sâu sau khi pre-train luôn tuân theo phân phối chuẩn N(0,σ2)\mathcal{N}(0, \sigma^2).
      • NF4 chia không gian xác suất của phân phối chuẩn thành 16 khoảng có diện tích bằng nhau, đảm bảo mỗi trạng thái 4-bit lưu trữ lượng thông tin tối đa, giúp nén trọng số từ 16-bit xuống 4-bit mà hầu như không làm giảm độ chính xác.
    2. Double Quantization (Lượng tử hóa cấp 2):
      • Mỗi block 64 trọng số cần 1 hằng số scale 32-bit (0.5 byte/param0.5\text{ byte/param}).
      • QLoRA tiếp tục nén chính các hằng số scale này thành định dạng 8-bit FP8, giúp tiết kiệm thêm hàng Gigabytes VRAM trên các mô hình lớn.
    3. Paged Optimizers (Tận dụng CUDA Unified Memory):
      • Khi xử lý các câu văn dài bất thường, bộ nhớ GPU có thể bị tăng đột biến (Memory Spikes). Thay vì bị lỗi CUDA Out of Memory, Paged Optimizers tự động đẩy tạm các trạng thái của Adam Optimizer sang bộ nhớ RAM của CPU và kéo lại GPU khi cần, đảm bảo quá trình huấn luyện diễn ra liên tục không gián đoạn.

6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)

  1. LoRA nén ma trận biến thiên trọng số ΔW=B×A\Delta W = B \times A với r≪dr \ll d, giảm 90%+90\%+ bộ nhớ VRAM và đạt Zero Inference Latency.
  2. QLoRA kết hợp 4-bit NormalFloat (NF4) + Double Quantization + Paged Optimizers, cho phép fine-tune mô hình 70B trên phần cứng phổ thông.
  3. Luôn cấu hình LoRA lên toàn bộ các tầng Linear (target_modules = all-linear) để đạt hiệu năng tối đa.
  4. DPO (Direct Preference Optimization) là tiêu chuẩn căn chỉnh hành vi (Alignment) hiện đại, loại bỏ hoàn toàn sự phức tạp và bất ổn của RLHF (PPO).
0Claps