什麼是 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 權重與原始權重合併,或選擇分開載入切換不同任務。這種設計讓你能夠同時保存多個業務場景的微調版本,大幅提升部署彈性。

環境準備與必要工具

在開始訓練前,你需要準備以下環境:

建議使用虛擬環境管理依賴,避免版本衝突。安裝命令如下:

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% 的參數就完成了訓練任務。

如何評估與部署微調後的模型

訓練完成後,你需要評估模型在業務場景的表現。常見評估方式包括:

  1. 人工評測:請業務人員評估回答品質
  2. 自動化指標:使用 BLEU、ROUGE 或自訂評分函數
  3. 多元測試集:覆蓋不同主題與edge cases

部署時可選擇合併權重或保留 LoRA 適配器。合併後的模型可直接用標準推理框架部署,適合延遲敏感的線上服務。若需要動態切換任務,則保留適配器架構更為彈性。

LoRA 技術讓資源有限的團隊也能訓練專屬 AI 模型,是企業落地生成式 AI 的實用起點。