前一篇處理「寫一份真的能用的 AI 平台 Postmortem」,這篇進一步討論「容量規劃:下一個使用者來之前要先知道什麼」。共同的量測條件是前後比較的基礎。
把 benchmark 與 SLO 轉成可用容量,建立「模型 × 併發 × context × GPU」的簡化規劃表。
平均 GPU utilization 很容易誤導。真正要規劃的是尖峰 arrival rate、各 workload 的 service time、可接受的 queue wait、模型常駐需求與 headroom。容量表至少應列出每個服務的 GPU/VRAM、CPU、RAM、storage、峰值 QPS/併發與 SLO。
保留 headroom 不是浪費,而是用來吸收尖峰、故障轉移、模型載入與 maintenance。沒有 headroom 的系統,任何小波動都可能成為事故。
VRAM 不是只有模型權重。實務上還會被 KV cache、context length、batch、並發與 runtime overhead 吃掉。先用簡化模型預估,再用實測校正。真正有價值的是「預估誤差多少、誤差來自哪裡」,而不是把容量規劃寫成一個看似精確的公式。
先把「把 concurrency 曲線換算成 SLO 內的安全容量」需要固定的輸入、版本與環境集中在同一份小型測試計畫;函式名稱代表實際工具。
plan = {
"change": '把 concurrency 曲線換算成 SLO 內的安全容量',
"fixed": ("input", "version", "environment"),
"metrics": ('每級負載 throughput', 'P95', 'GPU', 'headroom'),
}
for round_no in range(1, 4):
sample = run_once(plan) # 接上實際壓測或維運工具
save_sample(round_no, sample)
驗證可從「把 concurrency 曲線換算成 SLO 內的安全容量」開始。先以未施加變更的狀態建立 baseline,再執行目標條件,最後確認服務能回到穩定狀態。三個階段使用相同輸入與觀察時間窗,可降低 warm-up、cache 與背景工作造成的誤判。若測試包含故障或資源壓力,應限定在隔離環境,事先設定停止條件與復原方式。
觀察資料要同時涵蓋使用者體感、服務行為與主機資源。這篇優先比較:每級負載 throughput、P95、GPU、headroom。單看資源使用率無法代表服務健康;吞吐提高也可能伴隨排隊、錯誤率或尾端延遲惡化。至少重複三輪並保留每輪條件,才能區分穩定趨勢與偶發尖峰。
確認監控能回答「何時開始、影響多大、哪一層先異常」,並為超時、容量與復原設定可操作門檻。所有門檻都應對應負責人與處置方式;無法觸發行動的數字只適合分析,不適合作為告警。
結果可分成使用者影響、服務訊號與資源訊號三層閱讀。先確認錯誤率與延遲是否超出承諾,再沿時間線追查 queue、依賴與主機資源。若只有 GPU 或 CPU 使用率改變,但使用者指標沒有同步變化,只能視為線索,不能直接宣告根因。
單次測試適合發現風險,不足以證明長期容量。正式採用前還要加入較長時間的穩定性測試與版本回歸,確認重新啟動、流量波動及依賴短暫異常不會改變原本結論。
判讀不只看最大或最漂亮的數字。這一天真正要回答的是:容量以 SLO 可接受區間計算,不用峰值吞吐。
如果核心指標改善,但錯誤率、尾端延遲、資源成本或恢復能力變差,這代表取捨,而不是無條件進步。相反地,沒有改善也不是無效結果;至少能排除一條看似合理、實際上不值得增加複雜度的路。
今天的工程判斷是:容量以 SLO 可接受區間計算,不用峰值吞吐。無論結果支持或否定原本假設,都必須保留完整條件,才能和下一天的實驗串在一起。
下一篇將處理:備份什麼才算 AI 平台備份。