完整程式碼可在 GitHub 專案中找到:Finetune-30-days-demo / day-6
在前幾天,我們已經能順利完成訓練、管理資料、集中配置。但隨著實驗次數一多,新的問題立刻浮現:
問題其實不在模型,而在於 結果沒有家。
所以 Day 6 的目標,就是幫每一次實驗建立一個完整的「家」。
每次訓練,系統會自動建立一個新的實驗資料夾:
results/
└── {experiment_name}_{timestamp}/
├── logs.txt # 訓練日誌
├── config.yaml # 當次有效配置
├── metrics.json # 訓練與評估指標
└── artifacts/ # 模型與相關產物
└── final_model/
{experiment_name}
來自配置或 CLI{timestamp}
保證唯一性,避免覆蓋舊實驗一次實驗的所有資訊都會被收進這個資料夾,包括:
👉 結果不再是散落的檔案,而是 可追蹤、可比較、可重現的實驗資產。
為了方便分析,我把日誌分成兩條「軌道」:
logs.txt
,並以 PROGRESS
標籤區隔。例子:
2024-03-15 14:30:22 - INFO - 載入模型與 tokenizer...
2024-03-15 14:30:23 - PROGRESS - Step 10: loss=0.6932 | lr=0.0005
這樣一來,讀 log 檔時就能快速區分「系統訊息」與「訓練數據」。
Day 6 的重點不只是把檔案整理好,而是替後續的功能奠定基礎。透過實驗資料夾的自動化建立與完整封裝,我們讓日誌、配置、指標與模型產物都集中在同一處,結果因此變得可追蹤、可比較、也能完整重現。這樣的結構化設計,不僅解決了「實驗沒有家」的混亂問題,也為接下來的任務排程、模型評估與實驗追蹤做好準備,讓實驗成果真正成為可管理、可積累的資產。
📎 AI 協作記錄:今日開發指令
請幫我修改 train_lora_v2.py,讓每次訓練開始時自動建立一個專屬資料夾(experiment run folder),並把所有結果集中保存。
需求:
1. 資料夾命名規則:
results/{experiment_name}_{timestamp}/
- experiment_name 從 config.experiment_name 取得
- timestamp 使用 YYYYMMDD_HHMMSS
2. 資料夾結構:
- logs.txt(寫入訓練過程的日誌)
- config.yaml(保存本次有效配置)
- metrics.json(保存最終評估指標)
- artifacts/(保存模型、checkpoint、圖表等)
3. 修改 logger 與保存流程,確保所有輸出都寫入該資料夾
4. 確保舊實驗不會被覆蓋,每次都建立新資料夾