iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
IT Operation

地端生成式 AI 平台 SRE 實戰:GPU 資源治理、可觀測性與災難復原系列 第 4

Day 04|建立 Baseline:目前這台 AI 平台到底有多快

  • 分享至 

  • xImage
  •  

昨天我把 TTFT、end-to-end latency、queue wait 與 availability 寫成暫定 SLO。寫完後馬上出現一個很實際的問題:我連這個平台在固定條件下的正常值都還不知道,怎麼判斷變慢了?

所以今天不調參數,也不追求一個漂亮的 tokens/s。我先定義一份後面可以反覆重跑的 baseline contract。


現在手上的資料,還不是推論 Baseline

Repository 裡已經有一次 safe capability scan,manifest 明確寫著:

workload_executed: false
inference_benchmark: false
nvidia-gpu-telemetry: unsupported

這次 scan 有的用途:證明收集器能在不讀取敏感環境資訊的條件下運作,但沒有發出模型請求,也沒有取得 GPU telemetry,因此不能用來回答 TTFT、P95、throughput、GPU utilization 或 VRAM。

這是今天的第一個結論:

收集到主機資訊,不等於已經建立 AI 服務效能基準。

先把「相同條件」寫清楚

只記錄延遲還不夠。如果下次重跑時換了模型、輸入、輸出上限或 runtime,兩個數字就沒有可比性,把 Day 04 的變因固定為:

項目 Day 04 規則 為什麼要固定
Model 記錄完整模型名稱與版本 模型與量化方式會改變速度與記憶體佔用
Runtime 記錄 serving runtime 與版本 Day 06 要比較 Ollama 與 vLLM
Prompt set 使用固定 synthetic JSONL 避免每次輸入長度與內容不同
Generation temperature=0、固定 max_tokens 降低輸出差異造成的干擾
Warm-up 暖機請求不納入統計 把初次載入與穩定服務分開
Repetition 每個 prompt 至少三次 單次請求無法形成 percentile
Concurrency 固定為 1 Day 07 才提高併發,不混在今天

將三個公開 synthetic prompts 放在 datasets/synthetic/inference/day04-prompts.jsonl。內容只涵蓋摘要、短解釋與概念比較,不包含工作資料。

要量的不只是總時間

Day 03 已經把使用者感受拆成多個 SLI。Day 04 的 runner 也沿用同樣的拆法:

  • TTFT:從發出請求到第一個非空 content token。
  • End-to-end latency:從發出請求到 stream 結束。
  • Output tokens/s:伺服器有回傳 completion token usage 時才計算。
  • Success count:完整成功讀完 stream 的請求數。
  • P50/P95:保留中央趨勢,也不把尾延遲隱去。

寫的 labs/sre/benchmark_openai_stream.py 只儲存數值,不保留模型回答、endpoint、header 或憑證。執行方式是:

python3 labs/sre/benchmark_openai_stream.py \
  --base-url <AUTHORIZED_OPENAI_COMPATIBLE_V1_URL> \
  --model <MODEL_ID> \
  --repetitions 3 \
  --warmup 1 \
  --max-tokens 128 \
  --output <PUBLIC_SAFE_RESULT_JSON>

這個 runner 刻意不做 concurrency test。今天如果一邊測 baseline、一邊改併發,後面看到 P95 上升時就不知道是哪個變因造成。

GPU 數字必須和請求時間對得上

只在另一個時間點執行 nvidia-smi,不能解釋某一筆慢請求當下發生什麼事。操作文件會要求執行者同步取得:

timestamp, gpu_utilization, memory_used, memory_total

文章只需要去識別後的時間序列,不需要 GPU UUID、hostname 或個人環境資訊。如果執行環境無法取得 NVIDIA telemetry,就把 GPU 欄位標示為未驗證,不用別的主機資料代替。

Baseline 回來後,我會怎麼判讀

我不會先設定「多少 tokens/s 才叫快」。我會先檢查:

  1. 所有請求是否都在同一份 contract 下執行。
  2. warm-up 是否已與正式樣本分開。
  3. P50 與 P95 之間是否出現明顯落差。
  4. 慢請求的時間是否對應 GPU、VRAM 或其他系統訊號變化。
  5. 重跑結果是否仍在相近範圍。

直到這些條件都能回答,才會把結果當成後續 Ollama/vLLM、concurrency、OOM 與容量規劃的對照組。

今天的結論

今天最關鍵的發現是:現有 capability scan 沒有跑 workload,所以目前沒有可以公開宣稱的推論效能 baseline。

我已經把輸入、runner、變因、指標與去識別規則固定下來。等操作結果回來後,才能用實際 TTFT、P50、P95、throughput、GPU utilization 與 VRAM 補完這份基準。

下一篇會接著問:即使已經拿到 GPU 使用率,為什麼還是不夠?

下一篇:Day 05|GPU 可觀測性:只看 nvidia-smi 為什麼不夠


參考資料

  1. Google SRE Workbook, Implementing SLOs
  2. vLLM Documentation, OpenAI-Compatible Server
  3. NVIDIA, System Management Interface SMI

本篇目前只完成 baseline contract 與 runner 驗證,尚未產生可宣稱的推論效能結果。


上一篇
Day 03|先定 SLI/SLO,再談監控
下一篇
Day 05|GPU 可觀測性:只看 nvidia-smi 為什麼不夠
系列文
地端生成式 AI 平台 SRE 實戰:GPU 資源治理、可觀測性與災難復原10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言