模型訓好只是開始:怎麼記住每一次實驗、怎麼把「最好的那版」變成「線上那版」、怎麼讓資料一更新就自動重訓、 怎麼擋下不合格的模型。這條主線用 MLflow(實驗追蹤、模型註冊)與 Dagster(資產管線、排程、感測器) 兩大熱門工具,每課都在 molab 免費環境真的跑一遍,最後串成一條會自己運轉的管線。 有 Python 與基礎 ML 背景即可,照順序上;主線之後的補充系列把上線後會遇到的事一件件補齊: 模型服務、監控、自動調參、資料驗證、LLM 追蹤、特徵倉、資料版本、模型測試、可解釋性。
訓好的模型準確率一路從 0.94 掉到 0.45——拉桿玩漂移速度、定期重訓、監控觸發、延遲標籤, 親眼看到三種策略的差別,再把系列裡每一課的零件放回這條時間軸上。
開始上課 → MLFLOW · 01上週 AUC 0.95、今天 0.92,當時參數是什麼沒人記得。把每次訓練記成 run:params/metrics/tags/artifacts、 有 step 的曲線、一行 autolog、nested runs 掃參數,再用 search_runs 像查資料庫一樣查實驗。
開始上課 → MLFLOW · 02模型+規格+環境打包成一個資料夾、signature 擋下少一欄的輸入、Registry 給名字與版本、 alias 一行晉升或回滾、evaluate 一行產出 8 個指標 5 張圖、自訂 pyfunc 把前後處理一起包進部署單位。
開始上課 → DAGSTER · 03用 @asset 宣告「這份資料怎麼來的」,依賴自動連成圖;每次實體化留下列數與預覽、換 IO manager 資產程式一字不改、 asset check 當品質閘門——拉高門檻看下游被擋、看 deps 打錯字的沉默排序錯誤。
開始上課 → DAGSTER · 04誰來按執行、什麼時候按?每天凌晨兩點的 cron、新檔案一進來就跑的 sensor、上游更新下游自動跟的 eager 條件; 分割資產一天一片、漏掉四片怎麼補跑、重試策略——全部在 notebook 裡用 evaluate_tick 親眼看它會發什麼 run。
開始上課 → CAPSTONE · 05前四課的零件接成一條真的會動的線:資料 → 訓練(記進 MLflow)→ 評估 → asset check 品質閘 → 通過才移 champion。 四次執行親眼看:第一版上線、弱模型被擋、更強的晉升、資料漂移被擋;再從 Registry 反查回 Dagster run。
開始上課 →批次評分 500 列 10 毫秒、線上 API 一筆 15 毫秒——差 300 倍的成本怎麼選;自己包 FastAPI vs 一行 mlflow models serve, 載一次與每次載差 8–10 倍;少一欄回 400 的原文;alias 換版之後 API 什麼時候才拿到新模型。
開始上課 → 補充 B · MONITORINGPSI 與 KS 檢定自己算一遍才看得懂工具:沒漂移的資料 KS 也會 p<0.05、小漂移 PSI 會隨樣本數騙人; 沒有標籤也能看的預測漂移、Evidently 報告、連續 N 次超標才重訓,再把監控接回 Dagster 的檢查與感測器。
開始上課 → 補充 C · HPOstudy/trial/objective 三個概念,25 次試驗 20 秒找到 0.968;參數重要度一眼看出 max_depth 決定九成; 剪枝省三分之一時間;每個 trial 都是 MLflow 的 nested run——還誠實地示範小空間裡格點掃描反而贏。
開始上課 → 補充 D · DATA VALIDATION管線最常見的故障不是 bug,是上游資料悄悄變了。逐欄型別、範圍、唯一、允許值寫成 schema,lazy 一次列出全部違約、 合約存成 YAML 進版控,再接成 Dagster 的擋門檢查——壞資料進不了訓練。
開始上課 → 補充 E · TRACING · LLMOPSLLM 應用出錯只看得到最後一句話——把一次請求拆成 retriever → prompt → llm 的 span 樹,看每步的輸入輸出與毫秒; 人工標記與程式化 scorer 評分、Prompt Registry 給 prompt 版本與 alias,哪個回答是哪一版 prompt 一查就知道。
開始上課 → 補充 F · FEATURE STORE「拿最新一筆」的特徵有 68% 跟正確答案不一樣、最遠偷看到未來 7.9 天——point-in-time join 才是對的; Entity/FeatureView/ttl 三個定義,離線訓練集與線上毫秒級取特徵完全同一份,20 位客戶對答案全等。
開始上課 → 補充 G · DATA VERSIONINGgit 只存 89 bytes 的指標檔,470 KB 的資料放 cache;改一格資料 git diff 只有一行 md5,git checkout+dvc checkout 就回到上個月; dvc.yaml 管線依賴沒變就 skip、params/metrics diff 一眼看出調參前後,push 到遠端同事 pull 就有。
開始上課 → 補充 H · ML TESTINGAUC 0.968 不是驗收。合約、表現、切片、不變性、方向性、黃金樣本十條測試 0.2 秒跑完;換上淺樹或打亂標籤的壞模型, 各紅六條但紅的不同組——測試就是把 code review 的直覺自動化,exit code 當註冊閘門。
開始上課 → 補充 I · EXPLAINABILITY三種特徵重要度前三名一致、第四名分家,純亂數欄位卻在內建重要度排第 11;SHAP 把每筆預測拆成「基準 0.488 + 各特徵貢獻」加總對得起來; 洩漏欄位一眼現形、禁用欄位檢查會被代理特徵繞過、同模型吃漂移資料排名一名都不動。
開始上課 → 補充 J · ONNXpickle 綁 Python 又慢:一行 to_onnx 轉成通用運算圖,檔案剩一半、單筆推論從 6 毫秒變 0.008 毫秒(500 倍以上)、 機率差不到 1e-6;float32 型別與欄數是硬合約,餵錯 onnxruntime 當場擋下。
開始上課 →