什麼是 LoRA?為什麼選擇它來微調 LLM?
LoRA(Low-Rank Adaptation)是一種高效的模型微調技術,透過在預訓練模型旁新增可訓練的低秩矩陣,大幅降低訓練參數量。傳統 Fine-tuning 需要調整數十億參數,而 LoRA 只需訓練約 0.1%-1% 的參數就能達到接近全參數微調的效果。
對於資源有限的企業或個人開發者而言,LoRA 能在消費級 GPU 上完成訓練,記憶體需求也大幅降低。這使得中小型團隊也能打造符合業務需求的專屬 AI 模型。
LoRA 的核心原理
LoRA 的核心思想是假設模型權重的更新可以用低秩矩陣近似表示。具體來說,它在 Transformer 的注意力權重矩陣(如 Wq、Wk、Wv、Wo)旁新增兩個小型矩陣 A 和 B,訓練時只更新這兩個矩陣,原始權重保持不變。
推理時,可以將 LoRA 權重與原始權重合併,或選擇分開載入切換不同任務。這種設計讓你能夠同時保存多個業務場景的微調版本,大幅提升部署彈性。
環境準備與必要工具
在開始訓練前,你需要準備以下環境:
- Python 3.8 以上
- CUDA 11.8 或更高版本的 GPU
- Transformers 庫(HF生態系)或 PEFT 庫
- 足夠的訓練資料(建議至少 100-500 條高品質問答對)
建議使用虛擬環境管理依賴,避免版本衝突。安裝命令如下:
pip install transformers peft datasets torch accelerate
實際演練:使用 LoRA 微調 TinyLlama
以下程式碼展示如何使用 PEFT 庫對 TinyLlama(1.1B參數)進行 LoRA 微調:
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments
from peft import LoraConfig, get_peft_model, TaskType
from datasets import Dataset
import torch
# 載入模型與 tokenizer
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype=torch.float16,
device_map="auto"
)
# 設定 LoRA 參數
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
r=8,
lora_alpha=16,
lora_dropout=0.05,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
bias="none"
)
# 包裝模型
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 輸出:trainable params: 2,097,152 || all params: 1,100,538,240 || trainable%: 0.19
# 訓練參數設定
training_args = TrainingArguments(
output_dir="./lora_tinyllama",
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
num_train_epochs=3,
learning_rate=2e-4,
fp16=True,
logging_steps=10,
save_strategy="epoch"
)
# 開始訓練
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
data_collator=data_collator,
)
trainer.train()
上述程式碼中,r=8 表示 LoRA 的秩 rank 值,數值越大訓練參數越多但可能效果更好。trainable%: 0.19% 說明 LoRA 只用不到 0.2% 的參數就完成了訓練任務。
如何評估與部署微調後的模型
訓練完成後,你需要評估模型在業務場景的表現。常見評估方式包括:
- 人工評測:請業務人員評估回答品質
- 自動化指標:使用 BLEU、ROUGE 或自訂評分函數
- 多元測試集:覆蓋不同主題與edge cases
部署時可選擇合併權重或保留 LoRA 適配器。合併後的模型可直接用標準推理框架部署,適合延遲敏感的線上服務。若需要動態切換任務,則保留適配器架構更為彈性。
LoRA 技術讓資源有限的團隊也能訓練專屬 AI 模型,是企業落地生成式 AI 的實用起點。