Day 10:實驗追蹤與模型註冊—MLflow 與 champion/challenger
昨天資料有了版本。今天處理另外兩根柱子:這次訓練用了什麼設定、跑出什麼結果、產出的模型在哪裡。
這是 Day 08 診斷表第 3、5 題的內容,也是導入成本最低、痛感解除最快,投資報酬率最高的一天。
今天要解決的問題
三個熟悉的場景:
場景一:Excel 實驗紀錄。 有人在共用 Excel 上記「模型 A:lr=0.01,AUC=0.87」。兩週後有人問「那個 0.89 的是怎麼跑出來的」——沒人記得,因為那次忘了記。
場景二:模型檔案考古學。 資料夾裡躺著 model.pkl、model_v2.pkl、model_final.pkl、model_final_真的.pkl。沒有人知道線上跑的是哪一個。
場景三:回滾要改程式碼。 新模型上線後效果不好要回滾,發現服務程式碼裡寫死了 joblib.load("model_v3.pkl"),要改程式碼、重建映像、重新部署——在事故當下,這三個步驟每一步都是風險。
📊 職缺訊號
「模型版本與實驗管理」在 MLOps 職缺中只佔 7.2%,是六項任務中最低的。但別誤讀這個數字——它低,是因為多數團隊還沒走到這一步(Day 08 的成熟度分布),不是因為不重要。在面試中,能講清楚 champion/challenger 機制的候選人,通常會被判定為「有實際上線經驗」。
一、現象:實驗追蹤要記什麼
一次訓練要記錄的東西,可以整理成四類:

圖 10-1:實驗追蹤系統的元件與資料流(示意架構)。Tracking 記錄過程、Registry 管理產出、Artifacts 存放檔案,服務端只透過 Registry 取用模型。
| 類別 | 內容 | 為什麼要記 |
|---|---|---|
| 參數(params) | 學習率、樹的數量、資料版本 tag、seed | 重現的必要條件 |
| 指標(metrics) | AUC、F1、loss 曲線、各切片的表現 | 比較與門檻判斷 |
| 產出(artifacts) | 模型檔、混淆矩陣圖、特徵重要度、metrics.json | 交付與稽核 |
| 來源(tags) | Git commit、資料雜湊、執行者、環境 | 出事時的追溯線索 |
第四類最常被忽略,卻最重要。 半年後模型出問題,你要能回答「這個模型是誰、用哪個 commit、哪份資料、什麼時候訓練出來的」——這四個問題答不出來,就無法判斷責任與修復方向。
二、原理:Registry 讓模型與程式碼解耦
模型註冊表(Model Registry)解決的是場景三:回滾不該需要改程式碼。

圖 10-2:模型註冊表的別名機制(示意流程)。服務端只認 @champion 這個別名,晉升與回滾都是「移動別名」,不需要改程式碼或重新部署。
這個設計的價值在於把「哪個版本是現行版」的決策,從程式碼移到了註冊表。事故當下,回滾是一行指令,而不是一次部署。
