這裡寫的東西有一個共同點:都在自己的筆電上重現過、跑綠過、或撞壞過。 主要場景是 OpenShift 上的交付鏈——Jenkins、Tekton、Harbor、GitOps——以及圍繞它的供應鏈安全。
配套的 lab 在 ryanGTR/ocp-pipeline-lab:一台有 CRC 的機器,make up,十五分鐘內看到 12 個 task 全綠。
模型那條線在 《從零打造並對齊一個 LLM》:從零刻一個 GPT,把 digest、gate、lineage 同一套紀律搬到模型上,全程可在筆電重現。
Posts
-
Day 31:導入 checklist——三十件事
三十天走完了。這篇把每一天最該記住的一件事收成一張表,可以列印、可以貼在牆上、可以拿去當導入案的起點。 -
Day 30:稽核要問什麼、你要留什麼
稽核不會問「你們用哪個框架」,會問「這個模型是誰核准上線的」。這篇是七個會被問的問題、每一題的證據長什麼樣,以及哪些證據只能事前留。 -
Day 29:漂移監控要量什麼
「模型會退化,所以要監控漂移」——然後呢?量什麼、門檻怎麼定、告警了要做什麼。這篇是一個先量雜訊再定門檻的做法。 -
所以這個平台到底能不能用
三十天、八個功能、十七道關卡。這篇是總評——不是「好不好」,是一個評估者真正需要的數字:從「官方說有」到「我手上能用」,中間要跨幾關,以及那些關卡誰來跨。 -
怎麼把資料放上平台——以及放上去之後你答不答得出它哪來的
四種把資料弄上平台的方式,各自的代價。但真正的問題不是「怎麼放」——是我查了自己平台上那份 99 MB 的語料,除了檔名、日期、大小之外,什麼都查不到。 -
Day 28:模型上線前該有哪些門
平台給你的是「可以擋」的能力,不是「已經在擋」的機制。這篇講一個模型上線前該經過哪幾道門、每道門實際擋得住什麼,以及一個會讓門形同虛設的設計錯誤。 -
從 gate 放行到真的上線,中間那一步是空的
我的 pipeline 有完整的四棒、有 gate、有台帳。gate 也真的放行了一顆模型。然後我去查線上跑的是哪一顆——是四天前的另一顆,而且跟這條 pipeline 完全無關。 -
Day 27:綠燈不等於做完
整條流程全綠,但事情沒發生。這篇整理五種假綠的形態、它們共同的結構,以及每一種對應的檢查怎麼寫。 -
Day 26:怎麼寫 AI 平台的驗收清單
被交辦驗收一套 AI 平台,最後要交的就是這份東西。一條合格的驗收長什麼樣、怎麼避免寫成一份誰都能過的清單。 -
我的驗收清單自己有三個 bug
照文件寫了一份 42 條的驗收清單,實際跑過之後發現三條會誤導——其中一條會讓你以為裝了 80 套 operator。清單也是程式,也要測試。 -
棘輪失效:每一步都合法,二十步之後系統爛掉
我的 gate 規則是「不能比現行版差超過 tol」。這條規則有一個結構性缺陷:每次退一點點都合法,二十次之後累積退步 0.84——而每一步都通過了檢查。 -
Day 25:GitOps——模型部署與平台設定怎麼寫進 git
企業環境裡,oc apply 上 prod 這件事本身就不合格。這篇講模型部署怎麼走 Argo、git 裡該放什麼、哪些平台設定進得去,以及三個會讓 Argo 永遠 OutOfSync 的欄位。 -
Day 24:版本策略——3.x 與 2.x,以及沒有升級路徑這件事
網路上大部分教學是 2.x 的,照做會卡。這篇給一個三十秒的判斷法,列出實際改了什麼,以及一個評估時必須先知道的事實。 -
三十天對帳:我量錯的四次
這個系列每一篇都在講「別人的檢查沒在檢查」。這篇算我自己的帳:三十天裡我量錯四次,其中兩次差點寫進要交出去的文件。 -
Day 23:資源規劃——一個 PoC 要多少機器
「要幾台機器」是評估時第一個被問的問題,而官方的最低需求會讓你估錯。這篇是我筆電上量到的實際數字,以及一個能自己算的方法。 -
假綠的五種形態
這三十天我在同一套平台上撞到五種「顯示正常但實際壞掉」。它們的共同點不是 bug,是檢查本身的設計缺陷——而且每一種都有一句話可以戳破。 -
Day 22:憑證與機敏資料
S3 金鑰、資料庫密碼、API token——這些東西在 AI 平台上會出現在比你想的更多地方。這篇是盤點方法、四個不該放的位置,以及輪替時會斷在哪。 -
私有 registry:為什麼 image 跟模型要分開放
同一份東西,image 進 registry、模型進 S3。這個分法不是潔癖,是因為兩者的生命週期完全不同——以及它怎麼決定你的放行流程長什麼樣。 -
Day 21:權限——誰能做什麼
用 kubeadmin 測,你永遠不會發現權限問題。這篇講 OpenShift AI 的權限分兩層、怎麼給、以及怎麼在使用者踩到之前先自己踩一次。 -
3.x 不會幫你開對外入口:「上線了」和「打得到」是兩件事
ISvc 顯示 READY=True,你拿到的網址卻是 .svc.cluster.local。這是 2.x 換到 3.x 之後最容易忽略的一個差別,而它會在驗收當天才爆出來。 -
Kueue:CRD 說可以,webhook 說不行
把 kueue 設成 Managed 被拒絕,但 CRD 的 enum 裡明明還列著 Managed。這篇是兩層驗證不一致的實例,以及它對「照文件做」的意義。 -
Day 20:離線環境——image 怎麼進來、怎麼拉得到
銀行的叢集連不到 quay.io。這篇講三件事:把 image 搬進來、讓叢集知道去哪找、以及讓它有權限拉——三件都做完才會動。 -
Day 19:下線與回滾——把東西拿掉這件事
教學都教怎麼裝,很少教怎麼拆。但事故當下你需要的是拆,而且要快。這篇是回滾的三個層次、下線的檢查清單,以及刪掉之後會一起消失的東西。 -
線上的 LLM 要監控什麼、怎麼評估
一般服務壞掉會回 500,LLM 壞掉會回一個看起來正常的答案。所以只盯錯誤率和延遲等於沒監控。這篇是四層指標、埋法、以及「監控」和「評估」為什麼是兩件事。 -
Day 18:換版——不重 build image 換一個模型
模型換版比程式換版頻繁得多。這篇講三種換法、各自的代價,以及換完之後怎麼確認線上真的換了。 -
ODH Dashboard 實際長怎樣:一個 project 從頭走到尾
前幾篇都在講 YAML 和指令。這篇改用畫面走一次:project 怎麼建、pipeline 上傳在哪、run 從哪裡看、產出物在哪一頁——以及每一頁上哪個欄位是真的要看的。 -
離線鏡像:operator 宣告 2 顆,實際跑起來要 76 顆
在內網裝 OpenShift AI,最大的坑不是「怎麼鏡像」,是「鏡哪些」。operator bundle 給你的清單,跟實際要跑的差了一個數量級。 -
Day 17:監控——模型服務要看哪四個指標
從應用埋指標、部署 Prometheus 與 Grafana、到面板真的畫出資料。四個步驟,附完整 manifest 與每一步的驗證指令。 -
pod 要到卡 ≠ 模型算在卡上
GPU 被 pod 佔住、但模型其實跑在 CPU 上——這是最貴的一種失敗,而且所有你會看到的畫面都是綠的。這篇是分辨它的唯一乾淨訊號,以及 3.x 的 Hardware Profile 怎麼設。 -
Day 16:產物、版本與血緣——這個模型是哪來的
「這個模型是哪份資料訓出來的」——這題被問到的時候通常已經來不及了。這篇講平台自動記了什麼、沒記什麼、以及你要自己補哪一段。 -
Day 15:在平台上真的訓練一顆模型
把一顆從零寫的小 GPT 丟上 OpenShift AI 訓練:五棒都在容器裡跑、產物落 S3、放行由閘門判定。含每一棒的實測秒數,以及這台平台訓不動的地方。 -
Connection 其實是一個貼了 label 的 Secret
OpenShift AI 的「Connection」不是 CRD。這篇講它到底是什麼、怎麼建,以及為什麼你的 pipeline 明明在用 S3,dashboard 上卻顯示「沒有 connection」。 -
Workbench 被 webhook 擋住了——四個指令查到根因,以及一個我答不出來的問題
兩個 admission webhook 擋住 Notebook 建立。這篇是查根因的過程、一個撐得過重啟的修法、以及一個我查不出答案的矛盾——同一個叢集上有一個五天前建的 Notebook 好好地跑著。 -
Day 14:把八個工具串起來——從資料到上線
前面每天一個工具,今天把它們接成一條路。從一份 CSV 到一個打得到的 endpoint,中間有幾個交接點,以及每個交接點最容易斷在哪。 -
Day 13:資源怎麼分出去——Hardware Profile 寫規則,誰來執行?
誰能要多少 CPU、記憶體、GPU,由 Hardware Profile 決定——這句話只對了一半。這篇把上限實際撞一次,看它到底擋不擋,以及真正在擋的是誰。 -
Model Registry:登記成功,但每一個值都是 0
OpenShift AI 的模型台帳。這篇從開元件、備 DB、建實例到用 API 登記一顆模型全走一次——最後在 API 上踩到一個會讓你的治理數據全部歸零、而且不會報錯的坑。 -
Day 12:Model Registry——模型的戶口名簿
你可以完全不用它就把模型上線——這正是問題。當有人問「線上跑的是哪一版」,你需要一個地方能回答。 -
DataScienceCluster:整套平台的總開關
一個 CR 決定你的叢集上有哪些 AI 元件。這篇講它是什麼、什麼時候你會動到它、怎麼改,以及為什麼「先全開再說」是最貴的選擇。 -
你的門檻憑什麼是 0.05:先去量你的 σ
我的 promotion gate 用 tol=0.05 判斷模型有沒有退步。那個數字是我填的,沒有依據。這篇是把它量出來的過程,以及為什麼你該借的是管制圖而不是 p 值。 -
Day 11:ServingRuntime——內建的十四種模型伺服器
你不需要自己寫載入模型、開 API 的程式,平台內建了十四種伺服器。但「內建」不等於「能用」——這篇講怎麼查、怎麼選,以及為什麼照文件寫的自動配對在剛裝好的叢集上必定失敗。 -
RBAC 缺權限不會回 Forbidden,它會讓 controller 逾時自殺
兩個 controller 冷啟動後 CrashLoopBackOff,log 停在一行 cache sync 逾時。看起來像網路慢,實際上是權限。這個錯誤訊息我在網路上一筆都搜不到。 -
Day 10:InferenceService——把模型變成一個 API
訓練完了,接下來要讓別人打得到。這篇講 KServe 的兩條部署路線、什麼時候該選哪一條,以及每一步怎麼確認它真的起來了。 -
Day 9:第一條 Data Science Pipeline
notebook 跑得動不代表下個月還跑得動。這篇講 DSPA 是什麼、怎麼開起來、怎麼把一段 Python 變成一條會留下紀錄的 pipeline。 -
在 OpenShift AI 上搭一條四棒的模型交付鏈
prepare → train → evaluate → gate。用 Python 寫、編成 YAML、丟上平台跑。這篇是最小可用版本,以及三個當初卡住我的設定。 -
Day 8:Workbench——把 notebook 搬到叢集上
Workbench 就是跑在叢集上的 JupyterLab。這篇講它跟你筆電上的 notebook 差在哪、怎麼開一個、資料和 GPU 怎麼接進去。 -
InferenceService 到底幫你生了什麼
41 行 YAML,換來一個 Deployment、一個 Service、一個自動塞進去的 init container,和三個容器。這篇把它拆開看,並說明哪一樣它不會幫你生。 -
我用錯的量法,差點讓我把工作量翻倍
一個自訂的字數上限,一批「全部超標」的稿子,一個差點做出的錯誤決定。問題不在稿子,在量法。 -
Day 7:把儲存接上——叢集裡的東西怎麼讀到你的資料
workbench 要讀訓練資料、pipeline 要存產物、模型服務要抓權重——都靠這一份設定。這篇是怎麼建、怎麼給不同的東西用、以及怎麼確認它真的能用。 -
怎麼自動截 OpenShift console 和 Grafana 的圖
寫平台文件要大量截圖,手動截會過期。用 Chrome DevTools Protocol + OAuth cookie 全自動化,四個坑一次講完。 -
Day 6:Dashboard 導覽——每個分頁在做什麼
你的資料科學家不會用 oc,他們會打開那個網頁。這篇把 dashboard 每一頁走一次,標出哪一欄是真的要看的。 -
容器裡沒有 curl,而且 port 不是 8080
兩個會讓你在 KServe 上浪費半小時的小事。都不難,但都不會寫在教學裡。 -
Day 5:DataScienceCluster——平台元件的總開關
裝完 operator 之後,平台上什麼都沒有。要有東西,得先建 DataScienceCluster。這篇講它管什麼、怎麼開關元件、怎麼讀它的狀態。 -
監控上線了,九個面板全是壞的
Grafana pod Running、Prometheus target up、dashboard 開得起來——而九個面板一個資料都查不到。根因是一個沒填的欄位。 -
Day 4:在一台筆電上裝一套 OpenShift AI
用 CRC 在自己的機器上跑一套完整的 OpenShift AI。從資源規劃、裝 operator、建 DataScienceCluster,到確認每個元件真的起來——含每一步的驗證指令。 -
Day 3:先問一句——這些用 podman 做不行嗎?
社群教的是 podman 和 docker compose,而且它走得比多數人以為的遠。這篇是我兩邊都做過之後的對照:podman 版做得到什麼、在哪裡斷、以及那個交叉點在哪。 -
平台全綠,但服務是死的
冷啟動之後,DSC 說 KserveReady=True,opendatahub 的 pod 零異常,而模型服務是死的。根因在叢集外面——而叢集的健康檢查只看得到叢集裡的東西。 -
三顆一樣的模型,一顆上線兩顆被擋
同一條 pipeline、同一份資料、同樣的步數,三次訓練出來的模型能力幾乎相同:7.2343 / 7.2370 / 7.2428。一顆上線,兩顆被 gate 擋下。決定它們命運的不是模型。 -
Day 2:一張圖看懂 OpenShift AI 有哪些東西
KServe、Kubeflow、Model Registry、TrustyAI、Kueue、Ray、Feast——官網一個一章,但沒有一章說它們是什麼關係。這篇把它們排進 MLOps 流程,每一步標出關鍵指標。 -
一張版本試紙:怎麼三分鐘看出對方手上的文件是 2.x 的
五個 oc 指令,每個都會直接告訴你這套 OpenShift AI 是 2.x 還是 3.x。附一個我今天才發現的坑:你寫 RawDeployment,叢集會靜默改寫成 Standard。 -
Day 1:這 30 天要教什麼
如果你被交辦「評估一下 AI 平台」,而你會 k8s、不會 ML —— 這個系列是寫給你的。三十天,一天一個工具或一個決定。 -
同一條 gate,三種分母,三種結論
品質閘門擋下了我的模型,我很滿意——護欄有在擋。然後我去看它擋的理由,發現那個數字只可能是 0 或 100。修了兩次分母之後,同一份資料、同一組門檻,我得到三種結論;而修好之後,我又弄丟了另一個模型的身分。 -
llm-d 我跑不起來——但我可以告訴你它需要什麼
CRD 全都在,但三個前置一個都不滿足。這篇不是教學,是一份「你評估 llm-d 時該問廠商什麼」的清單——而叢集自己就會把缺什麼講出來。 -
我的漂移監控說「該重訓了」。它是錯的。
服務上線後什麼時候該重訓 LLM?我的監控回 retrain_suggested: true。查下去發現:它在零漂移的情況下也會這樣說,因為樣本太小。這篇是那個 bug 的解剖,以及一組不會騙你的觸發訊號。 -
OpenShift AI 3.x:為什麼你搜到的教學會壞給你看
2.x 是把 AI 平台架在 Service Mesh / Serverless 上,3.x 把那層整個拆掉。網路上的教學絕大多數是 2.x 的,照做會缺 operator、模型上線模式不同、GPU 設定物件換了名字——而且 2.25 不能升級到 3.x。這篇列出實測到的差異與一組可以當場用的檢查。 -
全景圖:從一台筆電到一個被治理的模型服務
官網文件是按元件分章的——裝什麼、怎麼用某個功能。缺的是「一條完整的路走一次」。這篇是那張圖,標出官網講到哪、我補在哪,以及一個官網目前還在教 2.x 做法的實例。 -
SBOM 有了,還是答不出「誰在用」:四個實測
把成品 digest 綁進 SCA 平台、把依賴樹入帳、把匯出打開——每一步都成功。然後逐條去驗,四件事是錯的,其中兩件是我自己算錯的。 -
哪一步、用什麼工具、看什麼指標
七個流程步驟,各對應哪個工具,以及那一步的關鍵指標——而指標分成「跑完了」和「做對了」兩欄,因為它們是完全不同的兩件事。附官方教學用幾個工具的對照。 -
這一堆工具各是誰:OpenShift AI 的角色分工表
KServe、DSPA、storage-initializer、MinIO、Harbor、Prometheus、cert-manager⋯⋯第一次看到會矇。這篇把每個角色用一句話定位、對應到流程哪一步、以及那一步該看什麼指標——並區分「跑完了」和「做對了」。 -
儀表板全綠,四件事還是錯的:OpenShift AI 驗收實錄
在 lab 上把 Open Data Hub 裝起來、把模型上線、把 pipeline 跑完,全程綠燈。然後逐條去驗,發現四件事是錯的——而且每一件都是靠看儀表板永遠看不出來的。 -
從零刻一個 GPT,然後把交付鏈的紀律套上去
一本線上書、十一章、全程可在筆電重現。模型只有 8M 參數,重點不是模型,是四次『以為對、量了才知道錯』——以及 digest、gate、lineage 這套交付鏈的東西原封不動搬到模型上。 -
用 CRC 在筆電上重現一條企業 OpenShift 交付鏈
Jenkins 帶參數建置 → Tekton 11 個 task → Harbor → GitOps repo,加上變更單號閘門與人工放行。一台有 CRC 的機器,make up,十五分鐘。 -
OpenShift 上的 Tekton buildah 不需要 privileged:SCC、SETFCAP 與 vfs
IBM Cloud-Native Toolkit 的 build task 預設 privileged: true。在沒有 privileged SCC 的 SA 上會 PodAdmissionFailed;其實只要 SETFCAP 加 vfs storage driver 就能跑。 -
tkn pipeline start --showlog 會讓 Jenkins 永遠綠
Jenkins 用 tkn 觸發 Tekton 是很常見的組合。--showlog 把 log 串回來很方便,但它不會把 PipelineRun 的失敗變成非零 exit code——Jenkins 看到的永遠是 SUCCESS。
subscribe via RSS