前一篇處理「GPU Contention Benchmark:共享之後真的比較划算嗎」,這篇進一步討論「Scheduler 實驗:Affinity、Priority、Sharing 到底改變了什麼」。共同的量測條件是前後比較的基礎。
以固定負載比較數種策略,將 scheduler events 與服務效能串起來,不只看 Pod 有沒有 Running。
預設排程會經過 filtering 與 scoring,把 Pod 放到符合資源與 constraint 的 Node。對整卡 GPU request,核心問題是 Node 是否還有足夠的 extended resource。
但 GPU inference 的服務品質還取決於 VRAM、model cache、NUMA、storage、其他 workload 與 sharing 策略。因此排程成功只是第一步,後續必須用實測把 placement 和 latency/throughput 連起來。
GPU 型號、用途與服務層級可以透過 label 表達,但 label 越多,維護成本也越高。建議把「硬限制」放 required affinity,把「偏好」放 preferred affinity,並把每個 label 的來源與責任人寫進叢集文件。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: accelerator
operator: In
values: ["nvidia-gpu"]
這份 YAML 將「以固定 Pods 重跑 affinity、priority 與 sharing 組合」的變因與觀察欄位留在版本控制中,再由實際 workload 引用。
apiVersion: v1
kind: ConfigMap
metadata:
name: day20-experiment
namespace: ai-lab
data:
change: "以固定 Pods 重跑 affinity、priority 與 sharing 組合"
fixed: "image, model, input"
metrics: "placement, Pending, preemption, latency"
repeats: "3"
驗證可從「以固定 Pods 重跑 affinity、priority 與 sharing 組合」開始。除了保存 manifest 的期望狀態,也要同步觀察 scheduler event、Pod 狀態轉換、node/GPU 資源與實際請求結果。Kubernetes 顯示 Running 只代表容器已啟動,不代表模型已載入、服務已 Ready,更不代表使用者請求符合 SLO。
這篇優先比較:placement、Pending、preemption、latency。測試時應準備一組不套用目標策略的對照組,再以相同 workload 套用新策略。若 placement 改善但等待時間、重啟次數或服務錯誤增加,代表問題只是從排程層移到執行層,不能直接判定方案有效。
kubectl get pods 的最終狀態,忽略 Pending reason、event 順序與 readiness 變化。部署前應確認 request/limit、affinity、taint、priority、probe 與 disruption policy 是否互相一致。變更後除了檢查 rollout,也要送出代表性請求,核對服務延遲、錯誤率與 GPU 指標。回滾條件需先定義,避免故障發生後才臨時決定是否撤回。若策略依賴特定 GPU 型號或叢集功能,也要明列適用條件,避免在不同 node pool 套用後得到相反結果。
排程結果要和服務結果放在同一條時間線:先看 Pod 為何被放到某個節點,再看模型何時 Ready,最後核對請求是否成功。只改善 placement 卻讓 cold start 或資料下載變慢,仍然可能造成更長的使用者等待時間。
策略通過單次測試後,還要在 rollout、drain 與節點重新加入時重跑。這些事件會重新觸發排程與模型載入,最容易暴露 topology、storage、probe 與 disruption policy 之間的衝突。
判讀不只看最大或最漂亮的數字。這一天真正要回答的是:用同一 workload 分離各排程機制的效果。
如果核心指標改善,但錯誤率、尾端延遲、資源成本或恢復能力變差,這代表取捨,而不是無條件進步。相反地,沒有改善也不是無效結果;至少能排除一條看似合理、實際上不值得增加複雜度的路。
今天的工程判斷是:用同一 workload 分離各排程機制的效果。無論結果支持或否定原本假設,都必須保留完整條件,才能和下一天的實驗串在一起。
下一篇將處理:DCGM + Prometheus:Kubernetes 裡怎麼看懂 GPU。