這篇不是技術文,是一個很短的方法論事故。但它是我最近做過最划算的一次除錯


事情經過

我在寫一批技術文章,自己訂了一個規格:每篇 800–1500 字

寫完 12 篇之後跑了一次品管,量字數,結果是:

12 篇全部超標,最長的是上限的 1.76 倍。

我把這個結果報上去,並且給了兩個建議:把上限改成 2000–2500,或者認真砍。

對方的反應是第三個選項:

「那要不要把每篇拆成兩篇?」

12 篇拆成 24 篇。以那個系列的總篇數限制,這會吃掉整個檔期, 後面真正想寫的東西一篇都放不進去。

我正要開始評估怎麼拆的時候,停了一下,回去看我的量法。


量法錯了

我是拿整個 Markdown 檔直接數字元的。而那些檔案裡有兩種東西, 讀者永遠看不到

  1. 檔頭的 <!-- 重跑紀錄 --> 註解——我自己訂的規矩是發文前刪掉
  2. 程式碼區塊——貼上去是程式碼,不是文字

重新量一次,扣掉這兩項:

  原始 純正文
平均 2,709 1,553
最長 3,620 1,990
超過 2,000 的篇數 12 / 12 0 / 12

註解加程式碼合計約佔每篇 40%。

真正的分佈是貼著 1,500 上下,只有兩篇明顯偏長——而那兩篇都是有實驗的重篇,長是合理的。

沒有一篇需要拆。


我差點做出的決定

如果我沒有回頭檢查量法,接下來會發生的事:

  1. 花幾天把 12 篇拆成 24 篇
  2. 檔期被吃光,原本規劃的重點內容進不去
  3. 拆完之後每篇變得又短又碎,敘事斷掉
  4. 而且問題根本不存在

代價是幾天的工,加上一個系列的結構。而修正成本是十分鐘寫一個腳本。


兩個可以帶走的東西

一、指標和它的量法是兩件事,而錯誤通常在後者。

「12 篇全部超標」這句話本身沒有錯——用我當時的量法,它是真的。 錯的是那個量法量進了不該算的東西

而且注意這個錯誤有多好偽裝:它給出的不是一個離譜的數字, 是一個看起來很合理的壞消息。如果它回報「每篇 50 萬字」,我立刻就會懷疑。 但「超標 1.76 倍」剛好落在「有點糟但可信」的區間。

最危險的錯誤數字,是那些看起來剛好合理的。

二、當指標要求你做一個很貴的決定時,先驗指標。

「拆成 24 篇」是一個高成本、難回頭的動作。 在付出那個成本之前,回頭花十分鐘驗證輸入, 是我做過投資報酬率最高的一次除錯。

反過來說:如果指標建議的動作很便宜(改個標題、調個參數), 那不驗也還好。驗證的力氣應該跟決定的代價成正比。


後來

我寫了一個小腳本,扣掉註解、程式碼區塊和表格之後再數, 並且把量法寫進規格檔——「上限 1900 字,量法是 _wordcount.py, 而不是只寫「上限 1900 字」。

因為一個沒有定義量法的門檻,等於沒有門檻。


你有沒有遇過「指標說有問題,但問題在指標本身」的情況?後來是怎麼發現的?

🧪 這篇的實驗環境與 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.2openshift-gitops-operator.v1.21.3

DataScienceCluster 開啟的元件

  • kserveaipipelinesdashboardworkbenchesmodelregistrykueue(Unmanaged)
  • 其餘(raytrustyaifeastaigateway…)為 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 檔案

⚠️ ODH ≠ RHOAI:元件同源,但 namespace 與部分名稱不同 (我這裡是 opendatahub,商用版是 redhat-ods-* 那一套)。 指令的邏輯可以照用,字串要自己對一次。