iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
生成式 AI

打造 AI 微調平台:從系統設計到 AI 協作的 30 天實戰筆記系列 第 5

[Day 5] 訓練參數與 Config 設計:建立統一的配置系統

  • 分享至 

  • xImage
  •  

完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-5

從今天開始,為了呼應這個系列的主題——AI 協作實戰筆記,我會在文章的末尾加上一個小小的「附錄」,整理我當天在 Cursor 下給 AI 的主要指令。
這些指令通常會生成一個能跑的初稿,但實際開發中我會再針對參數驗證、檔案結構與維護性做額外修改。


在 Day 4,我們解決了資料版本與品質的問題。接下來遇到的新挑戰是:隨著專案規模增加,訓練參數開始散落各處 —— 有些寫在 train_lora.py,有些藏在 Makefile。這樣會帶來三個痛點:

  1. 不一致:同一參數可能在不同地方被定義或覆寫,行為難以追蹤。
  2. 缺乏驗證:錯誤設定(例如 batch size = 0、學習率為負)往往要等到訓練途中才爆炸。
  3. 實驗不可重現:幾週後回頭看結果,卻找不到當時用過哪些參數。

因此,Day 5 的任務就是:打造單一可信來源(Single Source of Truth)的配置系統,讓實驗能夠一致、安全、可重現。


Config 系統設計

1. 集中管理與驗證

在 app/config.py 中,用 Pydantic 定義 Config,集中管理所有參數並自動驗證:

class TrainingConfig(BaseModel):
    learning_rate: float = Field(5e-4, gt=0, le=1e-2)
    batch_size: int = Field(2, ge=1, le=64)
    epochs: int = Field(1, ge=1, le=100)

class Config(BaseModel):
    experiment_name: str = "default_experiment"
    training: TrainingConfig = TrainingConfig()

這樣能避免參數散落各處,並在訓練前就擋下無效設定。

2. YAML 配置檔

所有預設值統一寫在 config/default.yaml,修改時不用動程式碼:

experiment_name: "lora_sst2_baseline"
training:
  learning_rate: 5.0e-4
  batch_size: 2
  epochs: 1

參數的優先序是:

CLI > YAML > Defaults

例如:

python app/train_lora_v2.py --learning_rate 0.002

會覆寫掉 YAML 的設定。

3. 配置保存與回溯

新版 train_lora_v2.py 在訓練開始時,會自動保存「當下有效配置」到 results/configs/,並以 實驗名稱 + 準確率 + 時間戳 命名:

custom_experiment_acc0.8765_20240315_143022.yaml

這樣能避免覆蓋、方便比對,也能完整回溯實驗設定。


這次重構雖然沒有直接提升模型的準確率,但卻帶來了三個重要的改進:參數來源統一,避免了不一致;在訓練開始前就透過 Pydantic 驗證,確保設定安全;每次實驗都保存唯一的配置檔,讓結果可完整回溯。這些改進看似基礎,卻是平台工程化的核心步驟。若沒有穩固的配置管理,後續不管是分散式訓練、Kubernetes 部署,甚至多使用者環境,都只會變成失控的「黑箱實驗」。


📎 AI 協作記錄:今日開發指令

請幫我完成以下優化:

1. 建立一個 app/config.py,新增 TrainConfig 類別,使用 Pydantic 定義以下參數:
   - learning_rate (float, 預設 5e-4, 必須 > 0)
   - batch_size (int, 預設 2, 必須 >= 1)
   - epochs (int, 預設 1, 必須 >= 1 且 <= 10)
   - experiment_name (str, 預設 "lora_experiment")

2. 在 app/config.py 中新增 load_config 函數,能讀取 config/default.yaml,並回傳 TrainConfig 物件。

3. 建立 config/default.yaml,內容包含:
   experiment_name: "lora_sst2_baseline"
   learning_rate: 5.0e-4
   batch_size: 2
   epochs: 1

4. 修改 train_lora.py:
   - 匯入 load_config 並載入設定
   - 在訓練開始前將有效配置保存到 results/effective_config.yaml,使用 YAML 格式輸出。


上一篇
[Day 4] 訓練資料管理:版本、偏差與錯誤影響
下一篇
[Day 6] 日誌與結果管理:讓每次實驗有自己的家
系列文
打造 AI 微調平台:從系統設計到 AI 協作的 30 天實戰筆記7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言