Day 31:導入 checklist——三十件事
三十天走完了
前面二十九天,每一天講一個工具或一個決定。
這一天把它們收成一張表。每一列對應一天,寫的是那天最該記住的一件事—— 不是摘要,是你動手時真的會用到的那句。
第一部:認識平台(1–5)
| # | 一件事 |
|---|---|
| 1 | 這不是 ML 的問題,是平台的問題。 你缺的不是模型知識,是「這些工具怎麼串」 |
| 2 | 平台不包含現成模型、自動重訓、自動擋模型上線。期待錯了後面全錯 |
| 3 | 先問「podman 做不行嗎」。 勾不到兩個斷點就別導——這是這 30 天最省錢的一個結論 |
| 4 | 用 ODH 在筆電上裝一套。每條指令你都能自己跑一次,不用等採購 |
| 5 | DataScienceCluster 是總開關。⚠️ Ready=False 不代表故障——Removed 的元件也被算進去 |
第二部:八個核心工具(6–13)
| # | 一件事 |
|---|---|
| 6 | Dashboard 上的每個動作都是在產 CR。做一次,然後 oc get -o yaml 看它產了什麼——最快的學法 |
| 7 | Connection 不是 CRD,是貼了 label 的 Secret。dashboard 顯示正常 ≠ 憑證能用,要真的連一次 |
| 8 | Workbench 只有 PVC 掛載的目錄會留下來。pip install 的東西不會 |
| 9 | Pipeline 的價值不在排程,在血緣。Output[Dataset] 幫你記了誰產生誰 |
| 10 | STORAGE_URI 讓權重不進 image。換模型不用重 build——這是 KServe 最實在的好處 |
| 11 | 部署前先問:我的格式有沒有現成的 runtime? sklearn/xgboost/onnx 都有 |
| 12 | Model Registry 不在必經之路上,所以最容易被跳過,然後就沒人答得出「線上是哪版」 |
| 13 | pod 拿到卡 ≠ 模型在卡上。 只有 nvidia-smi --query-compute-apps 分得出來 |
第三部:一條完整的路(14–18)
| # | 一件事 |
|---|---|
| 14 | 七站六個交接點,②④⑤ 三段平台不會幫你做。評估成熟度就看這三段是人工還是自動 |
| 15 | MLMD 記的是路徑不是內容。檔案被換掉,紀錄不會知道——所以要記 digest |
| 16 | 監控先接延遲、錯誤率、吞吐、輸入分布四個。少於四個會有盲區 |
| 17 | 換版之後 sha256sum /mnt/models/。「換了」和「以為換了」看起來一模一樣 |
| 18 | 在你需要回滾之前,先回滾一次。 沒演練過的回滾等於沒有 |
第四部:企業環境的現實(19–24)
| # | 一件事 |
|---|---|
| 19 | 離線有三件事:搬 image、改路由、給權限。三件錯誤訊息不一樣,照症狀分類別亂試 |
| 20 | 用 kubeadmin 測,你永遠不會發現權限問題。 建個測試帳號走一次 |
| 21 | 「怎麼存」大家都會,「怎麼換」才會出事。輪替要排時間 |
| 22 | 官方最低需求是「平台起得來」,不是「你能做事」。requests 超過 80% 就開始排不進去 |
| 23 | 看到 Serverless / ModelMesh / Accelerator Profile=2.x 的教學。而 2.x→3.x 沒有升級路徑,是重建 |
| 24 | 正式環境的模型部署走 Argo——「誰按了 merge」就是核准紀錄,最便宜的合規補法 |
第五部:驗收與治理(25–30)
| # | 一件事 |
|---|---|
| 25 | 每條驗收問一次:「環境是壞的時候,這條會不會發現?」 不會就是白寫 |
| 26 | 五種假綠同一個結構:你檢查的是「有沒有」,不是「對不對」 |
| 27 | 平台給的是「可以擋」,不是「在擋」。 護欄要驗過它會擋,才算存在 |
| 28 | 定門檻之前先量雜訊。抄來的門檻只有兩種結局:永遠不響,或一直響 |
| 29 | Q2/Q3/Q4(怎麼訓的、誰核准的、做了哪些檢查)事後補不回來 |
| 30 | ——見下 |
第 30 條
這三十天裡,我改口最多次的一句話是:「它看起來是好的。」
Grafana 九個面板是空的,但 Prometheus 有資料。 Pipeline 是綠的,但 step 什麼都沒做。 閘門通過了,但線上跑的還是舊模型。 GPU 被佔著,但模型在 CPU 上算。
這些沒有一個是「壞掉」——每一個都是「看起來是好的」。
所以第 30 條是:
每一個你相信的綠燈,去找出它在事情沒發生時會不會也是綠的。
這件事不需要更好的工具,只需要多問一層。 而它是我在這三十天裡學到最有用的東西。
這個系列的界線
最後把話說清楚:
能給你的:這些工具怎麼用、怎麼壞、怎麼驗。 每條指令都在我自己筆電的 CRC lab 上跑過。
不能給你的:
- 多節點的行為(排程、HA、跨節點網路)——我只有單節點
- 真實負載下的效能——CPU 上跑 LLM 的數字不能外推
- 你們的合規要求——去問法遵
- RHOAI 商業版的差異——我用的是 ODH
以及:這裡沒有一個字是我任職單位的做法。 全部來自我自己的 lab。
如果你只做三件事
清單三十條太長的話,這三件的投報率最高:
- Day 23 的資源盤點——一行指令,避免最貴的規劃錯誤
- Day 28 的反向測試——挑一道門,故意弄壞,看它會不會擋
- Day 30 的七題演練——挑一個模型,計時答完
三件事一個下午做得完,而它們會告訴你缺哪一塊。
謝謝讀完
寫這三十篇的過程中,我修正了不少自己原本以為對的事—— 有些是官方文件已經過時,有些是我自己設計的檢查沒在檢查。 這些修正比原本的內容有價值。
如果你照著做的時候發現我寫錯了,或是你的環境行為不一樣, 留言告訴我。我會查、會改、會標明是誰指出的。
這三十條裡,你們現在做到幾條?
🧪 這篇的實驗環境與 lab 檔案(最後更新 2026-08-30)
叢集
- CRC 2.63.0 · OpenShift 4.22.7 · Kubernetes v1.35.6
- 單節點:13 vCPU / 40 GiB RAM / 120 GB disk
- 宿主:Framework Laptop 16(Ryzen AI 7 350 · 8C/16T · 64 GB RAM · 1 TB NVMe · RTX 5070 顯卡模組)
- ⚠️ 叢集內看不到 GPU(CRC 是 VM,RTX 5070 未 passthrough)
Operator
opendatahub-operator.v3.5.0← 即 RHOAI 3.x 的上游開源版cert-manager-operator.v1.20.0(3.x 的必要相依;2.x 不需要)openshift-pipelines-operator-rh.v1.23.2、openshift-gitops-operator.v1.21.3
DataScienceCluster 開啟的元件
kserve、aipipelines、dashboard、workbenches、modelregistry、kueue(Unmanaged)- 其餘(
ray/trustyai/feast/aigateway…)為Removed
叢集外的依賴(跑在宿主的 podman 上,crc start 不會帶起來)
- Harbor v2.15.2(私有 registry)· MinIO(S3)
模型端
- Python 3.12.13 · PyTorch 2.11.0+cu128 · FastAPI + uvicorn · prometheus-client
lab 檔案
- YAML/Containerfile/腳本:github.com/ryanGTR/openshift-ai-30days
(含 Day 對照表;主機名是佔位符,跑
set-lab-host.sh換成你自己的) - 服務的那個模型:llm-from-scratch(從零手刻的小 GPT)
⚠️ ODH ≠ RHOAI:元件同源,但 namespace 與部分名稱不同
(我這裡是 opendatahub,商用版是 redhat-ods-* 那一套)。
指令的邏輯可以照用,字串要自己對一次。
留言與指正
我特別想知道:這三十條裡,你們現在做到幾條?