1. 20:31 13/10/2026
## 1. Tại sao chọn LoRA/QLoRA trên GPU đơn?
- **Chi phí thấp**: Chỉ cần một GPU 24 GB (RTX 3090/4090) thay vì cụm đa GPU.
- **Tốc độ lặp nhanh**: LoRA chỉ huấn luyện <1 % tham số, QLoRA nén 4‑bit giúp vừa vặn bộ nhớ.
- **Dễ dàng versioning**: Các adapter LoRA nhỏ gọn, thuận tiện cho Model Registry.
## 2. Chuẩn bị dữ liệu
1. **Định dạng JSONL** – mỗi dòng: `{"prompt": "...", "completion": "..."}`.
2. **Lọc và cân bằng** – loại bỏ mẫu trùng lặp, đảm bảo tỷ lệ lớp cân bằng.
3. **Split** – 90 % train, 10 % validation; lưu dưới `data/train.jsonl`, `data/val.jsonl`.
## 3. Cài đặt môi trường
```bash
pip install torch==2.3 transformers==4.41 peft==0.11 bitsandbytes==0.43 accelerate==0.30
```
- Sử dụng `accelerate config` chọn **single‑GPU**, **fp16** (hoặc **bf16** nếu GPU hỗ trợ).
## 4. Cấu hình LoRA/QLoRA
```python
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
lora_cfg = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=["q_proj","v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-v0.1",
load_in_4bit=True, # QLoRA
device_map="auto",
quantization_config=BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16
)
)
model = prepare_model_for_kbit_training(model)
model = get_peft_model(model, lora_cfg)
```
## 5. Huấn luyện với Gradient Checkpointing
- Bật `model.gradient_checkpointing_enable()` để giảm VRAM.
- Sử dụng `Trainer` của 🤗 Transformers:
```python
training_args = TrainingArguments(
output_dir="outputs/lora-mistral",
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
learning_rate=2e-4,
num_train_epochs=3,
fp16=True,
logging_steps=10,
evaluation_strategy="steps",
eval_steps=200,
save_strategy="steps",
save_steps=200,
report_to="tensorboard"
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_ds,
eval_dataset=val_ds,
data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False)
)
trainer.train()
```
## 6. Xuất adapter và serving
- Adapter được lưu tại `outputs/lora-mistral/adapter_model.bin`.
- **Serving nhẹ**: load base model 4‑bit + adapter qua `PeftModel.from_pretrained`.
- Triển khai với **FastAPI + vLLM** hoặc **Triton** để tận dụng batching liên tục.
## 7. Mẹo thực chiến
- **Early stopping** dựa trên validation loss để tránh over‑fitting.
- **Learning rate scheduler** cosine với warmup 0.03 × total steps.
- **Logging**: theo dõi `train/loss`, `eval/loss`, `gpu_memory_allocated` trên TensorBoard.
- **Versioning**: đẩy adapter lên Model Registry (MLflow/DVC) kèm metadata: base model, rank, dataset hash.
## 8. Kết luận
Với LoRA/QLoRA, một GPU đơn đủ sức fine‑tune mô hình 7‑13B trong vài giờ, chi phí thấp và dễ dàng tích hợp vào pipeline CI/CD. Hãy bắt đầu từ một dataset nhỏ, đo lường latency serving, sau đó mở rộng rank hoặc dataset khi cần độ chính xác cao hơn.