第三部分:處理時間與 SLO 監控¶
< 返回目錄 | < 上一題:延遲監控 | 下一題:Token 計費模型 >
從排隊延遲到處理時間¶
Q2 你知道了「排隊要等多久」。但這只是延遲的一部分。
總延遲 = 排隊延遲 + 處理時間
處理時間也是隨機的——不同請求生成的 token 數量不同,每個 token 的生成速度也有波動。
要設延遲告警閾值,你得知道「處理時間的分布」,才能回答:
- P99 是多少?(99% 的請求在多少時間內完成)
- 超時閾值該設多少?(設太短會誤殺正常請求,設太長會拖慢故障偵測)
第 3 題:響應時間分布分析¶
(a) 響應時間分布¶
3 分 ・ 大二
第一個問題:響應時間不是固定的——有時快、有時慢。這種「隨機等待」該怎麼描述?
你需要知道:建模響應時間的分布
觀察到響應時間有一個重要特性:無記憶性——已經等了 1 秒,接下來還要等多久,跟「沒等過」是一樣的。(GPU 不會因為你等久了就加速處理)
題目:
假設單次響應時間 \(T\) 服從參數為 \(\lambda\) 的分布,滿足無記憶性:
- 從無記憶性推導 \(P(T > t)\) 的形式
- 若平均響應時間 \(E[T] = 2\) 秒,求 \(\lambda\)
- 計算 \(P(T > 5)\)(響應時間超過 5 秒的機率)
提示
令 \(g(t) = P(T > t)\)。無記憶性意味著 \(g(s+t) = g(s) \cdot g(t)\)。什麼函數滿足這個性質?
解答
-
令 \(g(t) = P(T > t)\)。由無記憶性:
\[g(s+t) = g(s) \cdot g(t)\]這是 Cauchy 函數方程,連續解為 \(g(t) = e^{-\lambda t}\)(\(\lambda > 0\))
所以 \(P(T > t) = e^{-\lambda t}\),即 \(T \sim \text{Exp}(\lambda)\)
-
\(E[T] = \frac{1}{\lambda} = 2\) 秒 \(\Rightarrow \lambda = 0.5\) /秒
-
\(P(T > 5) = e^{-0.5 \times 5} = e^{-2.5} \approx 0.082\)
約 8.2% 的請求會超過 5 秒。
這個計算有什麼用?
評估超時風險:如果設定超時為 5 秒,約 8.2% 的請求會被中斷。這可能太高了!
設計超時閾值:若要求「超時率 < 1%」,需要 \(P(T > t_0) < 0.01\):
數學小結:Exponential 分布的無記憶性
Exponential 分布 是唯一具有無記憶性的連續分布。
無記憶性的直覺: - 「等了 1 秒還沒好」不會讓你更接近完成 - 每個瞬間「完成」的機率是恆定的 \(\lambda dt\)
這對建模「隨機等待時間」非常有用。
(b) 更複雜的分布¶
4 分 ・ 大三
新的問題:Exponential 假設「無記憶性」,但實際 LLM 響應時間不滿足這個假設!
- 輸出越長的請求,「已經生成了很多 token」意味著「還要生成更多」
- 響應時間的分布通常是「右偏」的——大部分請求較快,少數請求很慢
你需要知道:更符合實際的響應時間模型
題目:
假設 LLM 生成 \(n\) 個 token,每個 token 的生成時間獨立同分布 \(T_i \sim \text{Exp}(\lambda)\)。總響應時間 \(S_n = T_1 + T_2 + \cdots + T_n\)。
- 推導 \(S_n\) 的 PDF
- 若 \(n = 100\)(生成 100 個 token),\(\lambda = 50\)(每秒生成 50 個 token),計算 \(E[S_n]\) 和 \(\text{Var}(S_n)\)
- 計算 \(P(S_{100} > 3)\)(生成 100 token 超過 3 秒的機率)
解答
-
\(S_n = \sum_{i=1}^n T_i\),各 \(T_i\) 獨立同分布 \(\text{Exp}(\lambda)\)。
\(S_n \sim \text{Gamma}(n, \lambda)\),PDF 為:
\[f_{S_n}(t) = \frac{\lambda^n t^{n-1} e^{-\lambda t}}{(n-1)!}, \quad t \geq 0\] -
\(n = 100\),\(\lambda = 50\):
\[E[S_{100}] = \frac{100}{50} = 2 \text{ 秒}\]\[\text{Var}(S_{100}) = \frac{100}{50^2} = 0.04 \text{ 秒}^2, \quad \sigma = 0.2 \text{ 秒}\] -
常態近似:\(S_{100} \approx N(2, 0.04)\)
\[P(S_{100} > 3) \approx 1 - \Phi\left(\frac{3 - 2}{0.2}\right) = 1 - \Phi(5) \approx 0\]幾乎不可能!但這是因為 \(n\) 固定。實際上 \(n\) 也是隨機的...
這個計算有什麼用?
Gamma 分布 比 Exponential 更適合建模「多步驟完成」的總時間。
當 \(n\) 很大時,Gamma 近似 Normal(中央極限定理),波動相對較小。
進階挑戰:用 MGF 求 Gamma 的期望與變異數¶
3 分 ・ 大三
直接積分太麻煩?用 MGF 可以一次搞定所有動差!
你需要知道:\(E[X^k] = M^{(k)}(0)\)(MGF 在 0 點的第 \(k\) 階導數)
題目:已知 \(\text{Gamma}(n, \lambda)\) 的 MGF 為 \(M(t) = \left(\frac{\lambda}{\lambda - t}\right)^n\)
- 求 \(M'(t)\),代入 \(t=0\) 得 \(E[X]\)
- 求 \(M''(t)\),代入 \(t=0\) 得 \(E[X^2]\)
- 計算 \(\text{Var}(X) = E[X^2] - (E[X])^2\)
提示
用連鎖法則:\(\frac{d}{dt}\left(\frac{\lambda}{\lambda-t}\right)^n = n \left(\frac{\lambda}{\lambda-t}\right)^{n-1} \cdot \frac{\lambda}{(\lambda-t)^2}\)
解答
Step 1:求 \(E[X]\)
Step 2:求 \(E[X^2]\)
Step 3:求 \(\text{Var}(X)\)
這個技巧有什麼用?
考試必備:很多題目會要求「用 MGF 求期望和變異數」。
記憶技巧:MGF 的導數在 \(t=0\) 處給出動差
- \(M'(0) = E[X]\)(一階動差)
- \(M''(0) = E[X^2]\)(二階動差)
- \(\text{Var}(X) = M''(0) - [M'(0)]^2\)
數學小結:MGF 的動差公式
| 動差 | 公式 | 應用 |
|---|---|---|
| \(E[X]\) | \(M'(0)\) | 一階導數代入 0 |
| \(E[X^2]\) | \(M''(0)\) | 二階導數代入 0 |
| \(\text{Var}(X)\) | \(M''(0) - [M'(0)]^2\) | 結合一二階 |
| \(E[X^n]\) | \(M^{(n)}(0)\) | \(n\) 階導數代入 0 |
© 隨機輸出長度¶
4 分 ・ 碩一
更真實的模型:不只每個 token 的生成時間是隨機的,輸出長度 \(N\) 本身也是隨機的。
你需要知道:當「步數」和「每步時間」都是隨機時,總時間的分布
題目:
設輸出 token 數 \(N \sim \text{Pois}(\mu_N)\)(\(\mu_N = 100\)),每個 token 生成時間 \(T_i \sim \text{Exp}(\lambda)\)(\(\lambda = 50\)),\(N\) 與 \(\{T_i\}\) 獨立。總響應時間 \(S = \sum_{i=1}^N T_i\)。
- 用全期望公式計算 \(E[S]\)
- 用全變異公式計算 \(\text{Var}(S)\)
- 比較 (b) 中「\(n\) 固定」和這裡「\(N\) 隨機」的變異數差異
提示
全期望:\(E[S] = E[E[S|N]]\)
全變異:\(\text{Var}(S) = E[\text{Var}(S|N)] + \text{Var}(E[S|N])\)
解答
-
全期望:
\[E[S|N] = N \cdot E[T] = \frac{N}{\lambda}\]\[E[S] = E\left[\frac{N}{\lambda}\right] = \frac{E[N]}{\lambda} = \frac{100}{50} = 2 \text{ 秒}\] -
全變異:
\[\text{Var}(S|N) = N \cdot \text{Var}(T) = \frac{N}{\lambda^2}\]\[E[\text{Var}(S|N)] = \frac{E[N]}{\lambda^2} = \frac{100}{2500} = 0.04\]\[\text{Var}(E[S|N]) = \text{Var}\left(\frac{N}{\lambda}\right) = \frac{\text{Var}(N)}{\lambda^2} = \frac{100}{2500} = 0.04\]\[\text{Var}(S) = 0.04 + 0.04 = 0.08 \text{ 秒}^2, \quad \sigma = 0.28 \text{ 秒}\] -
比較:
模型 \(\text{Var}(S)\) \(\sigma\) \(n\) 固定 = 100 0.04 0.2 秒 \(N \sim \text{Pois}(100)\) 0.08 0.28 秒 「\(N\) 隨機」增加了額外的變異來源,\(\sigma\) 增加 40%!
這個計算有什麼用?
理解變異來源:響應時間的波動來自兩部分: 1. 每個 token 生成時間的波動(\(E[\text{Var}(S|N)]\)) 2. 輸出長度的波動(\(\text{Var}(E[S|N])\))
如果想降低波動,可以:限制最大輸出長度、使用更穩定的解碼策略。
(d) P99 延遲計算¶
4 分 ・ 碩一
現在你可以回答最關鍵的問題:P99 延遲是多少?
你需要知道:求分布的分位數
題目:
使用 © 的模型(\(E[S] = 2\) 秒,\(\text{Var}(S) = 0.08\) 秒²),假設 \(S\) 近似 Normal。
- 計算 P50(中位數)、P90、P99 延遲
- 若客戶要求 P99 ≤ 10 秒,我們能承諾嗎?
- 若 P99 實際是 3 秒,反推 \(\sigma\) 是多少?
解答
-
\(S \approx N(2, 0.08)\),\(\sigma = 0.28\) 秒
- P50 = \(\mu\) = 2 秒
- P90 = \(\mu + 1.28\sigma\) = \(2 + 1.28 \times 0.28\) = 2.36 秒
- P99 = \(\mu + 2.33\sigma\) = \(2 + 2.33 \times 0.28\) = 2.65 秒
-
P99 = 2.65 秒 ≪ 10 秒,可以承諾!
但要注意:這是「正常情況」。系統過載、GPU 故障時可能更高。
-
若 P99 = 3 秒:
\[\mu + 2.33\sigma = 3 \Rightarrow 2 + 2.33\sigma = 3 \Rightarrow \sigma = 0.43 \text{ 秒}\]
這個計算有什麼用?
制定 SLO:
| 指標 | 數值 | 意義 |
|---|---|---|
| P50 | 2 秒 | 一半請求在 2 秒內完成 |
| P90 | 2.4 秒 | 90% 請求在 2.4 秒內完成 |
| P99 | 2.7 秒 | 99% 請求在 2.7 秒內完成 |
設定超時:通常設為 P99 的 2-3 倍,如 6-8 秒。
進階挑戰:P99 延遲的真正含義¶
4 分 ・ 大三
但你發現一個問題:P99 = 2.65 秒是用 Normal 近似算的,但原始分布是 Gamma。而且,P99 本身也是隨機的——今天測 2.65 秒,明天可能是 2.70 秒。P99 的分布是什麼?
你需要知道:Order Statistics(順序統計量)——樣本排序後第 \(k\) 個值的分布
題目:設 \(T_1, \ldots, T_n \stackrel{iid}{\sim} F(t)\),令 \(T_{(1)} \leq T_{(2)} \leq \cdots \leq T_{(n)}\) 為順序統計量。
- 推導最大值 \(T_{(n)}\) 的 CDF:\(F_{T_{(n)}}(t) = ?\)
- 若 \(T_i \sim \text{Exp}(\lambda)\),求 \(E[T_{(n)}]\) 並與 \(F^{-1}(0.99)\) 比較
- 推導第 \(k\) 個順序統計量 \(T_{(k)}\) 的 PDF(一般公式)
- 用順序統計量解釋:為什麼「100 個樣本的最大值」不等於「P99」?
解答
Step 1:\(T_{(n)}\) 的 CDF
\(T_{(n)} \leq t\) 意味著所有 \(T_i\) 都 \(\leq t\):
PDF:\(f_{T_{(n)}}(t) = n [F(t)]^{n-1} f(t)\)
Step 2:Exponential 情況
\(F(t) = 1 - e^{-\lambda t}\),\(f(t) = \lambda e^{-\lambda t}\)
使用公式(或查表):
其中 \(H_n = 1 + \frac{1}{2} + \cdots + \frac{1}{n}\) 是調和級數。
當 \(n = 100\),\(H_{100} \approx 5.19\),若 \(\lambda = 1\):
- \(E[T_{(100)}] \approx 5.19\) 秒
- \(F^{-1}(0.99) = -\frac{\ln(0.01)}{\lambda} = 4.61\) 秒
結論:\(E[\text{樣本最大值}] > \text{理論 P99}\)!
Step 3:\(T_{(k)}\) 的 PDF(一般公式)
這可以用組合論推導:第 \(k\) 個順序統計量在 \(t\) 處,需要恰好有 \(k-1\) 個樣本 \(< t\),\(n-k\) 個樣本 \(> t\)。
Step 4:最大值 vs P99
- 理論 P99:\(F^{-1}(0.99)\) 是分布的 99% 分位數,是一個常數
- 樣本最大值:\(T_{(n)}\) 是一個隨機變數,其期望值通常 > 理論 P99
對於 \(n = 100\) 個樣本: - 樣本的第 99 個順序統計量 \(T_{(99)}\) 才是「樣本 P99」 - 但 \(T_{(99)}\) 的期望仍不完全等於理論 P99
這個計算有什麼用?
監控實務:
| 概念 | 定義 | 用途 |
|---|---|---|
| 理論 P99 | \(F^{-1}(0.99)\) | 設定 SLO 目標 |
| 樣本 P99 | 100 個樣本中第 99 大的值 | 實際測量值 |
| 樣本最大值 | 100 個樣本中最大的值 | 更極端的指標 |
注意:樣本 P99 的變異性隨樣本量增加而減小。
數學小結:Order Statistics
| 性質 | 公式 |
|---|---|
| \(T_{(n)}\) 的 CDF | \([F(t)]^n\) |
| \(T_{(1)}\) 的 CDF | \(1 - [1-F(t)]^n\) |
| \(T_{(k)}\) 的 PDF | \(\frac{n!}{(k-1)!(n-k)!} [F(t)]^{k-1} [1-F(t)]^{n-k} f(t)\) |
| Exp 最大值期望 | \(E[T_{(n)}] = \frac{H_n}{\lambda}\)(調和級數) |
考試技巧:Order Statistics 常與 Uniform、Exponential 分布結合考。
第 3 題小結:你的處理時間監控工具箱¶
「單次處理時間分布?」
├─► 工具:Exponential(無記憶假設)
│
▼
「多步驟的總時間?」
├─► 工具:Gamma(n 個 Exponential 的和)
│
▼
「步數也是隨機的?」
├─► 工具:全期望、全變異公式
│
▼
「P99 該設多少?」
├─► 工具:Normal 近似、分位數計算
│
▼
「超時閾值該設多少?」
└─► 經驗法則:P99 的 2-3 倍