Fine‑tuning LLM với LoRA trên GPU tiêu dùng: Hướng dẫn thực chiến từ dữ liệu đến triển khai Khi mô hình ngôn ngữ lớn (LLM) ngày càng phổ biến, nhiều đội ngũ muốn tùy chỉnh mô hình cho nghiệp vụ riêng mà không cần cụm GPU đắt tiền. Low‑Rank Adaptation (LoRA) là kỹ thuật giảm tham số huấn luyện xuống vài phần trăm, cho phép fine‑tune trên card RTX 3080/4080 hay thậm chí T4. Dưới đây là quy trình từng bước đã được kiểm chứng trên nhiều dự án thực tế. 1. Chuẩn bị dữ liệu - Thu thập corpus liên quan (ví dụ: tài liệu nội bộ, FAQ, log hội thoại). - Làm sạch: loại bỏ PII, định dạng thống nhất, chia train/val/test 80/10/10. - Tokenize với tokenizer của mô hình gốc (LLaMA‑2‑7B, Mistral‑7B, v.v.) và lưu dưới dạng dataset HuggingFace `datasets.Dataset`. 2. Cấu hình LoRA ```python from peft import LoraConfig, get_peft_model lora_cfg = LoraConfig( r=8, # rank thấp → ít tham số lora_alpha=16, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM" ) model = get_peft_model(base_model, lora_cfg) ``` - `r=8` thường đủ cho tác vụ phân loại hoặc generation ngắn. Tăng `r` nếu cần độ chính xác cao hơn. 3. Huấn luyện với `Trainer` - Sử dụng `bitsandbytes` 4‑bit quantization để giảm VRAM. - Learning rate 2e‑4, scheduler cosine, batch size 2‑4 tùy VRAM. - Gradient accumulation 4‑8 để mô phỏng batch lớn. - Early stopping dựa trên validation loss. 4. Đánh giá và lặp lại - Metrics: perplexity, BLEU/ROUGE (nếu generation), accuracy/F1 (nếu classification). - Nếu kết quả chưa đạt, thử: * Tăng `r` hoặc thêm `target_modules` (k_proj, o_proj). * Thêm dữ liệu augment (back‑translation, paraphrase). * Điều chỉnh learning rate hoặc thêm warmup steps. 5. Xuất mô hình và triển khai - `model.save_pretrained("./lora_adapter")` chỉ lưu adapter (~30‑50 MB). - Khi inference, load base model 4‑bit + adapter qua `PeftModel.from_pretrained`. - Triển khai với `vLLM` hoặc `Text Generation Inference` để tận dụng batching và KV‑cache. Mẹo thực chiến - Luôn version dữ liệu (DVC) và cấu hình LoRA (MLflow) để tái hiện. - Theo dõi GPU memory qua `nvidia-smi` trong training loop để tránh OOM. - Sử dụng `wandb` hoặc `tensorboard` để so sánh nhiều run LoRA khác nhau. - Test latency thực tế trên phần cứng mục tiêu trước khi release. Với quy trình này, bạn có thể đưa một LLM 7B từ generic sang chuyên biệt trong vài tiếng trên một workstation đơn lẻ, tiết kiệm chi phí và thời gian phát triển đáng kể.