iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0

完整程式碼可在 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 / CPU
  • logger_config.py:日誌紀錄,方便分析與除錯

LoRA 的高效訓練設計

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)

這段程式碼就能快速啟動一次最小可跑範例。


PEFT 方法比較:平台角度

方法 訓練參數比例 特點 對平台的意義
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」,慢慢長成「完整的微調平台」。


上一篇
[Day 2] 平台架構全覽:從資料收集到模型部署的全流程
下一篇
[Day 4] 訓練資料管理:版本、偏差與錯誤影響
系列文
打造 AI 微調平台:從系統設計到 AI 協作的 30 天實戰筆記7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言