完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-3
在上一篇,我們從高層視角看過微調平台的完整架構。
今天則聚焦在核心技術 —— PEFT(Parameter-Efficient Fine-Tuning,參數高效微調)。
PEFT 是一整套方法論,包含 LoRA、Prefix Tuning、Prompt Tuning、Adapter 等多種做法,而其中最常被採用、也最適合平台化落地的,就是 LoRA(Low-Rank Adaptation)。
LoRA 的特點是只需更新極少量參數,就能在保持模型效果的前提下,大幅降低訓練需求。這意味著,即使在 M3 筆電或中階 GPU 上,也能跑出可用的微調成果。這正是平台化能夠實現的關鍵基礎。
在本日的專案中,主要包含以下檔案:
train_lora.py
:模型加載、訓練與評估Makefile
:環境管理,支援 M3 / GPU / CPUlogger_config.py
:日誌紀錄,方便分析與除錯LoRA 的核心概念是 僅更新少量參數,以矩陣分解的方式降低計算量。
在 Hugging Face Transformers 的支持下,可以非常自然地套用:
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
model = AutoModelForCausalLM.from_pretrained("facebook/opt-350m")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
lora_config = LoraConfig(r=8, lora_alpha=16, target_modules=["q_proj","v_proj"])
model = get_peft_model(model, lora_config)
print(model)
這段程式碼就能快速啟動一次最小可跑範例。
方法 | 訓練參數比例 | 特點 | 對平台的意義 |
---|---|---|---|
Full fine-tune | 100% | 高準確率,需求大 | 成本過高,不適合平台化 |
LoRA | <10% | 效率與效果兼顧,最常用 | 默認方法,適合大多數場景 |
Prefix Tuning | <1% | 訓練極快,適合 NLP 任務 | 可作為「快速測試模組」 |
Prompt Tuning | <1% | 適合大規模多任務場景 | 提供「輕量級任務切換」選項 |
Adapter Tuning | 5–10% | 擴展性佳,可重複利用 | 適合建立「模型插件市場」 |
可以看到,LoRA 在 效率 與 靈活度 間取得平衡,是最實務化的平台基礎技術。
num_train_epochs = 1
learning_rate = 5e-4
per_device_train_batch_size = 2
logging_steps = 10
lora_config = LoraConfig(
r=8,
lora_alpha=16,
target_modules=["q_lin", "v_lin"],
lora_dropout=0.1,
bias="none",
task_type="SEQ_CLS"
)
在這次最小範例中,模型僅更新約 1% 的參數,就能在單輪訓練中達到 84% 的準確率。
Epoch Training Loss Validation Loss Accuracy
1/1 0.42 0.38 84.5%
從 log 也能看到:
2025-08-17 14:56:13,213 - INFO - ✅ 模型載入完成: distilbert-base-uncased
2025-08-17 14:56:18,979 - INFO - 📊 可訓練參數: 739,586 / 67,694,596 (1.09%)
2025-08-17 14:56:20,043 - INFO - 🚀 開始訓練...
整體來說,loss 在單輪訓練中穩定下降,驗證了流程的正確性。而且這樣的訓練大約只需要 5–10 分鐘 就能跑完,對於筆電或中階 GPU 來說非常友好。即便只訓練一個 epoch,模型表現已達到可用水準,足以作為後續平台開發的基礎單元。
今天的文章示範了在 M3 筆電 上,用 LoRA 成功跑完一個最小的微調範例。這算是整個專案的 起跑點。接下來,我會在這個基礎上往外擴展:先挑戰更複雜的任務(像是文本生成、分類、摘要),再把訓練流程放進任務排程系統(Celery / Redis),讓它能一次處理多個任務。同時也會加入結果監控,把訓練指標收集起來做可視化。最後,會把這套流程搬上伺服器或雲端,支援多節點訓練。
一步一步走下去,專案就會從「能在單機跑的 demo」,慢慢長成「完整的微調平台」。