跳轉到

綜合應用案例:LLM API 服務監控(探索版)

本案例以「大型語言模型 API 服務監控」為場景,用 SRE 解決問題的視角 探索機率分布。你將扮演 SRE 工程師,從實際問題出發,逐步發現「為什麼需要這個數學工具」。

設計理念:不是「先學分布,再找應用」,而是「遇到問題 → 需要什麼資訊 → 引入數學工具」。


場景背景

你是某 AI 公司的 SRE 工程師,負責維運一套類似 OpenAI API 的 LLM 推論服務。

什麼是 SRE?

SRE(Site Reliability Engineering,網站可靠性工程)是 Google 在 2003 年提出的角色,核心理念是「用軟體工程的方法解決運維問題」。

領域 工作內容
監控告警 設計 metrics、建立 dashboard、設定告警閾值
可靠性 確保系統達成 SLO(如 99.9% 可用性)
容量規劃 預測流量、規劃資源、成本優化
事故響應 On-call 輪值、故障排查、寫 postmortem

本案例中的問題正是 SRE 日常會遇到的:失敗率多高要告警?需要幾台 GPU?P99 延遲是多少?

根據歷史監控數據:

參數 符號 數值 說明
請求成功率 \(p\) \(0.95\) 單次 API 請求成功完成的機率
平均請求率 \(\lambda\) \(200\) 次/秒 尖峰時段每秒平均請求數
平均響應時間 \(\mu\) \(2\) 單次請求的完整響應時間(非流式)
服務等級目標 SLO \(99.9\%\) 可用性 月度目標
關於響應時間的說明

本案例假設 非流式(non-streaming) 場景:客戶端等待完整回覆後才收到響應。

實際 LLM 的響應時間受多種因素影響,波動很大:

  • 輸入長度:prompt 越長,prefill 時間越長
  • 輸出長度:生成 token 數越多,總時間越長
  • 系統負載:排隊等待時間

因此響應時間通常不是常數,而是服從某種分布(如 Gamma 或 Log-Normal)。第 3 題會深入探討這個問題。

失敗原因分類

  • GPU 記憶體不足(40%)
  • 推論超時(35%)
  • 模型載入錯誤(15%)
  • 其他錯誤(10%)

第一部分:告警系統設計


場景:凌晨三點,你被告警叫醒

手機震動,PagerDuty1 顯示:「API 請求失敗」。你睡眼惺忪地看著螢幕,腦中閃過第一個念頭:

「又來了?」

這已經是本週第五次被單次失敗叫醒。每次查完都發現系統正常——只是偶發的單次失敗。

你決定:受夠了這種無效告警,要重新設計一個真正有用的告警系統。

你開始思考問題的根源:現在的告警是「事件驅動」的——每發生一次失敗就觸發。但這個觀察維度根本沒有判斷力,因為正常系統本來就會偶爾失敗。

你需要換一個觀察維度:不看「這一次失敗了沒」,而是看「這段時間內,失敗的次數是否異常」。這就把問題從「單一事件的是非題」變成「時間窗口內的統計量」。

但問題來了:什麼叫「異常」?要回答這個,你得先知道「正常」長什麼樣——正常系統在一段時間內,預期會失敗幾次?波動範圍多大?超過多少才算不正常?這些問題,需要建立「正常狀態的數學模型」來回答。


第 1 題:從「一次失敗」到「完整告警系統」

這道題將帶你從「一個請求失敗了」這個簡單觀察出發,逐步建立完整的數學工具箱。每個小題解決一個具體問題,最後你會發現:這些工具有一個共同的名字。


(a) 單次請求的判斷力

3 分大二

監控系統剛收到一個請求失敗的通知。同事緊張地問:「系統是不是掛了?」

你需要知道:正常系統下,單次請求失敗的機率是多少?

題目

  1. 定義隨機變數 \(X\) 表示單次請求結果(成功 = 1,失敗 = 0)。若系統正常時成功率 \(p = 0.95\),寫出 \(P(X=0)\)\(P(X=1)\)

  2. 從定義出發,計算 \(E[X]\)(不可直接套公式)

解答
  1. \[P(X = 1) = 0.95, \quad P(X = 0) = 0.05\]

    這可以統一寫成:\(P(X = x) = p^x (1-p)^{1-x}\),其中 \(x \in \{0, 1\}\)

  2. \[E[X] = \sum_{x \in \{0,1\}} x \cdot P(X=x) = 0 \times 0.05 + 1 \times 0.95 = 0.95\]

    為什麼這樣算就是「期望值」?

    這個公式其實是「加權平均」:每個可能的值 \(x\),乘以它出現的機率 \(P(X=x)\),再加總。機率越大的值,對平均的貢獻越大。

    直覺上,如果你做 1000 次實驗:大約 950 次得到 1,50 次得到 0。全部加起來除以 1000:

    \[\frac{950 \times 1 + 50 \times 0}{1000} = \frac{950}{1000} = 0.95\]

    這正是 \(E[X]\) 的值。所以期望值代表「長期下來的平均結果」。

這個計算有什麼用?

回答你的問題:光看一次失敗,判斷不了系統是否異常。因為 \(P(X=0) = 0.05\),正常系統平均每 20 次請求就會失敗一次——這是「底噪」,不是故障。

建立基準線\(E[X] = 0.95\) 代表「長期下來,平均每 100 次請求有 95 次成功」。這是你告警系統的**基準線**。

週期 請求數 \(n\) 預期失敗 = \(n \times 0.05\)
10 秒 2,000 100 次
1 分鐘 12,000 600 次
5 分鐘 60,000 3,000 次

(b) 正常波動的範圍

3 分大二

好,你知道正常失敗率是 5% 了。那直接設「超過 5% 就告警」不行嗎?

問題是:5%(期望值)是「中線」,不是「上界」

你盯著 dashboard 看了幾天,發現每分鐘的失敗次數都不一樣:612、589、623、571、608... 系統都正常,但數字在 600 上下跳動。這是因為每次請求成功或失敗本身就有隨機性,觀測值天生會波動。

期望值是這個波動的「中心點」——大約 50% 的正常觀測會在期望值以上,50% 在以下。如果用期望值當閾值,你會有一半的時間在告警,但系統根本沒壞。

所以問題變成:正常波動的「邊界」在哪裡? 超過多少才算「真的不正常」而不是「運氣差一點」?

你需要知道:正常波動的範圍有多大?

要回答這個,你需要知道 變異數——它量化「波動幅度」。有了它,你才能設一個合理的閾值:高於正常波動範圍才告警。

題目:從定義出發,計算 \(\text{Var}(X)\)

解答
\[\text{Var}(X) = E[X^2] - (E[X])^2\]

\(X^2\) 是什麼?它是一個新的隨機變數,定義為「對 \(X\) 的每個取值平方」。由於這裡 \(X \in \{0, 1\}\),而 \(0^2 = 0\)\(1^2 = 1\),所以 \(X^2 = X\),於是:

\[E[X^2] = E[X] = 0.95\]
\[\text{Var}(X) = 0.95 - 0.95^2 = 0.95 \times 0.05 = 0.0475\]

為什麼這樣算就是「波動幅度」?

變異數的原始定義是 \(\text{Var}(X) = E[(X - \mu)^2]\),也就是「每次結果離平均值的偏差,取平方,再算期望」。

為什麼要平方?因為偏差有正有負(有時高於平均,有時低於平均),直接加總會互相抵消。平方後全變正數,就能累積起來。

從原始定義到計算公式

\[E[(X - \mu)^2] = E[X^2 - 2\mu X + \mu^2]\]

期望值的線性性質(常數可以提出來、加法可以拆開):

\[= E[X^2] - 2\mu E[X] + \mu^2 = E[X^2] - 2\mu^2 + \mu^2 = E[X^2] - \mu^2\]

因為 \(\mu = E[X]\),所以 \(\text{Var}(X) = E[X^2] - (E[X])^2\)

直覺驗證:如果做 1000 次實驗:

  • 950 次得到 1,偏差 = \(1 - 0.95 = 0.05\),平方 = \(0.0025\)
  • 50 次得到 0,偏差 = \(0 - 0.95 = -0.95\),平方 = \(0.9025\)

加權平均:\(0.95 \times 0.0025 + 0.05 \times 0.9025 = 0.0475\)

這就是變異數。它代表「平均來說,結果離期望值有多遠(的平方)」。

這個計算有什麼用?

設計告警 buffer:假設觀察 \(n\) 次請求,失敗次數 \(F = \sum_{i=1}^{n} (1 - X_i)\)。由於獨立性:

\[\text{Var}(F) = n \cdot \text{Var}(1-X) = n \cdot \text{Var}(X) = n \times 0.0475\]

標準差 \(\sigma_F = \sqrt{n \times 0.0475}\)

告警邏輯if 失敗次數 > 預期 + k × 標準差 → 告警

例如 \(n = 12000\)(1 分鐘),\(\sigma_F = \sqrt{12000 \times 0.0475} \approx 23.9\)

\(k = 3\),則「失敗次數 > 600 + 72 = 672」才告警。

數學小結:你剛才發現了 Bernoulli 分布

你定義的 \(X\)——只有 0 和 1 兩個值、機率分別為 \(1-p\)\(p\)——數學上叫做 Bernoulli 分布,記作 \(X \sim \text{Bernoulli}(p)\)

性質 公式
PMF \(P(X=x) = p^x(1-p)^{1-x}\)\(x \in \{0,1\}\)
期望值 \(E[X] = p\)
變異數 \(\text{Var}(X) = p(1-p)\)

© 告警閾值設計

4 分大三

現在你有兩個數字:

  • 期望值:正常情況下失敗次數的「中線」
  • 標準差:正常波動的「幅度」(變異數開根號,讓單位一致)

怎麼用這兩個數字設閾值?直覺的做法是:中線往上推幾倍波動幅度,就是「正常範圍的邊界」

\[\text{閾值} = \text{期望} + k \times \text{標準差}\]

這裡的 \(k\) 代表「容忍幾倍波動」。但為什麼需要 \(k\)?直覺上 1 倍波動不就是「正常範圍」了嗎?

問題是:1 倍標準差只能覆蓋「大部分」正常情況,不是「幾乎全部」\(k\) 越大,覆蓋的正常情況越多,誤報越少——但也越可能漏掉真正的故障。

\(k\) 是一個業務決策,取決於你對誤報的容忍度:

  • 告警很重要、寧可誤報不可漏報 → \(k\) 小一點
  • 告警成本高、不想半夜被吵醒 → \(k\) 大一點

但問題來了:給定一個 \(k\),誤報率「具體」是多少?

  • \(k\) 太小 → 正常波動也會觸發(誤報
  • \(k\) 太大 → 真正故障也不告警(漏報

你需要知道:給定 \(k\),誤報率是多少?

如果你能算出這個,選 \(k\) 就有數學依據了。比如:「我每個月最多能接受被誤報叫醒 3 次,對應的誤報率是多少?\(k\) 應該設多少?」

要精確回答這個問題,光知道期望和標準差還不夠——你得知道「\(n\) 次請求中失敗幾次」的 完整分布,才能算出「超過閾值的機率」。

這裡有一個建模上的轉換:前面我們一直在講「週期」(1 分鐘、10 秒),但數學上我們用「\(n\) 次請求」來表達。週期只是決定了 \(n\) 的大小:

週期 請求次數 \(n\)
10 秒 2,000(200 次/秒 × 10 秒)
1 分鐘 12,000
5 分鐘 60,000

這樣我們就把時間維度抽象掉,專注於一個更簡單的問題:「\(n\) 次請求中,成功幾次?」


(c-1) 推導成功次數的機率公式

\(S_n\) =「\(n\) 次獨立請求中,成功的次數」。推導 \(P(S_n = k)\) 的公式(\(k\) 次成功的機率)。

提示

\(S_n = k\) 表示「\(n\) 次中恰好 \(k\) 次成功」。有多少種選法?每種選法的機率是多少?

解答

思考過程

  1. 先想一種「特定排列」,比如「前 k 次都成功,後 n-k 次都失敗」
  2. 這種特定排列的機率 = \(p^k \times (1-p)^{n-k}\)
  3. 但「恰好 k 次成功」不只這一種排列,成功可以落在任意位置
  4. 從 n 個位置選 k 個當成功,有 \(\binom{n}{k}\) 種選法
  5. 每種選法機率一樣,所以總機率 = 選法數 × 單一排列機率

結論

\[P(S_n = k) = \binom{n}{k} p^k (1-p)^{n-k}, \quad k = 0, 1, \ldots, n\]

(c-2) 從單次統計量到週期統計量

前面 (b) 題建立了告警的概念:「期望 + k 倍標準差」。但那是針對單次請求 \(X\) 的。

實際監控時,你不會看「這一次請求成功沒」,而是看「這一分鐘內失敗了幾次」。所以要把告警公式應用到 \(S_n\)(n 次請求的成功總數)上:

\[\text{閾值} = E[S_n] + k \times \sigma(S_n)\]

問題是:\(E[S_n]\)\(\text{Var}(S_n)\) 怎麼從 \(E[X]\)\(\text{Var}(X)\) 算出來?

題目:證明 \(E[S_n] = n \cdot E[X]\)\(\text{Var}(S_n) = n \cdot \text{Var}(X)\)

解答

期望值

  1. \(S_n = X_1 + X_2 + \cdots + X_n\)(定義)
  2. \(E[S_n] = E[X_1 + X_2 + \cdots + X_n]\)
  3. \(= E[X_1] + E[X_2] + \cdots + E[X_n]\)(期望值的線性性質:和的期望 = 期望的和)
  4. \(= n \cdot E[X]\)(每個 \(X_i\) 期望都一樣)
  5. \(= n \cdot p\)

為什麼 \(E[X] = p\)

這是 Bernoulli 分布的特性。因為我們用 0 表示失敗、1 表示成功:

\[E[X] = 0 \times (1-p) + 1 \times p = p\]

「失敗」的貢獻是 0(0 乘以任何東西都是 0),「成功」的貢獻剛好就是它的機率 p。這不是數學巧合,而是 0/1 編碼的結果。

變異數

  1. \(\text{Var}(S_n) = \text{Var}(X_1 + X_2 + \cdots + X_n)\)
  2. \(= \text{Var}(X_1) + \text{Var}(X_2) + \cdots + \text{Var}(X_n)\)獨立時,和的變異數 = 變異數的和)
  3. \(= n \cdot \text{Var}(X)\)
  4. \(= n \cdot p(1-p)\)

為什麼 \(\text{Var}(X) = p(1-p)\)

同樣從 Bernoulli 的 0/1 結構推導。(b) 題算過:\(\text{Var}(X) = E[X^2] - (E[X])^2 = p - p^2 = p(1-p)\)

對接前面的週期概念

\(E[S_n] = n \times E[X]\),就是「單次請求的成功率 × 週期內的請求數 = 週期內的成功次數期望」。

週期 \(n\) \(E[S_n] = n \times 0.95\)
10 秒 2,000 1,900 次成功
1 分鐘 12,000 11,400 次成功

這樣就把「週期」和「成功次數分布」連接起來了。


(c-3) 計算誤報率,評估方案可行性

假設你打算用「期望 − 2 倍標準差」當閾值(成功次數太低就告警)。

\(n = 100\)\(p = 0.95\)\(k = 2\)

  1. 計算 \(E[S_n]\)\(\sigma(S_n)\)
  2. 算出閾值
  3. 計算誤報率 \(P(S_n \leq \text{閾值})\)
  4. 如果監控系統每分鐘檢查一次,這個誤報率在業務上可接受嗎?
解答

1. 計算期望和標準差

  • \(E[S_n] = n \times p = 100 \times 0.95 = 95\)
  • \(\sigma = \sqrt{\text{Var}(S_n)} = \sqrt{n \times p \times (1-p)} = \sqrt{100 \times 0.95 \times 0.05} = \sqrt{4.75} \approx 2.18\)

2. 計算閾值

閾值 \(= E[S_n] - k \times \sigma = 95 - 2 \times 2.18 \approx 90\)

(成功次數低於 90 就告警,即失敗超過 10 次)

3. 計算誤報率

\[P(S_n \leq 90) \approx \Phi\left(\frac{90.5 - 95}{2.18}\right) = \Phi(-2.06) \approx 0.020\]

誤報率約 2%

4. 業務評估

2% 意味著每 50 次檢查就會誤報 1 次。

如果監控系統每分鐘檢查一次:

  • 每小時 60 次檢查 → 平均每小時誤報 1.2 次
  • 每天誤報約 29 次

結論:k = 2 這個閾值太鬆了,你會被正常波動吵死,不可接受。


(c-4) 調整閾值,滿足業務需求

(c-3) 告訴你 k = 2 會導致每小時被吵醒 1 次。主管說:「這太誇張了,我希望每週最多被誤報叫醒 1 次。」

k 該調到多少?

解答

從業務需求反推誤報率

  • 每週 = 7 × 24 × 60 = 10,080 分鐘 = 10,080 次檢查
  • 最多誤報 1 次 → 誤報率 ≤ 1/10,080 ≈ 0.01%

反推 k

設閾值為「失敗次數 > \(\mu + k\sigma\)」,誤報率 ≈ \(\Phi(-k)\)

要讓 \(\Phi(-k) \leq 0.0001\),查表得 \(k \approx 3.7\)

結論

從 k = 2 調整到 k = 3.7,誤報率從 2% 降到 0.01%。

以 1 分鐘為週期(n = 12,000):

  • 期望失敗次數 = 600,標準差 ≈ 23.9
  • 原閾值(k=2):600 + 2 × 23.9 = 648
  • 新閾值(k=3.7):600 + 3.7 × 23.9 ≈ 688

告警規則:1 分鐘內失敗超過 688 次才告警。

小結:完整的告警設計流程

回顧整個過程,你完成了一個完整的告警系統設計:

  1. (a) 算出單次請求的期望值 → 建立基準線
  2. (b) 算出變異數 → 知道正常波動範圍
  3. (c-1) 推導完整分布 → 能精確計算任意閾值的誤報率
  4. (c-2) 把單次統計量擴展到週期 → 連接業務場景
  5. (c-3) 給定閾值算誤報率 → 評估方案
  6. (c-4) 給定誤報率反推閾值 → 滿足業務需求

這就是用數學解決實際問題的完整流程。

數學小結:你剛才發現了 Binomial 分布

\(n\) 個獨立 Bernoulli 的和,數學上叫做 Binomial 分布,記作 \(S_n \sim B(n, p)\)

性質 公式
PMF \(P(S_n=k) = \binom{n}{k} p^k (1-p)^{n-k}\)
期望值 \(E[S_n] = np\)
變異數 \(\text{Var}(S_n) = np(1-p)\)

進階挑戰:不知道分布怎麼辦?

3 分大二

前面的推導依賴三個假設:

  1. 每次請求獨立
  2. 每次只有成功或失敗
  3. 成功率固定是 0.95

但 PM 質疑:「這些假設在實際場景中真的成立嗎?」

  • 獨立性可能不成立:如果一台 GPU 掛了,會同時影響很多請求,它們就不是獨立的
  • 成功率可能不固定:尖峰時段負載高,成功率可能下降;凌晨負載低,成功率可能更高
  • 可能有其他複雜因素:網路波動、請求排隊效應...

當這些假設不完全成立時,Binomial 公式就不一定準了。有沒有更穩健的方法?

你需要知道:Chebyshev 不等式——只需要知道期望和變異數,不管分布長什麼樣都成立!

Chebyshev 不等式:對任意分布, $\(P(|X - \mu| \geq k\sigma) \leq \frac{1}{k^2}\)$

題目:設 1 分鐘處理 \(n = 1200\) 次請求,失敗次數 \(F\) 的期望 \(\mu = 60\),標準差 \(\sigma = 7.55\)

  1. 用 Chebyshev 不等式估計 \(P(F > 90)\) 的上界
  2. 與 Binomial 精確計算(或常態近似)比較
  3. 討論 Chebyshev 為什麼「保守」
提示

\(F > 90\) 意味著 \(|F - 60| > 30\)。先把 30 換算成幾個標準差。

解答

Step 1:Chebyshev 估計

\(F > 90\) 意味著 \(|F - 60| > 30 = 3.97\sigma\)

\[P(|F - 60| \geq 30) \leq \frac{1}{3.97^2} \approx 0.063\]

所以 \(P(F > 90) \leq 0.063\)(實際更小,因為只考慮右尾)

Step 2:常態近似

\[P(F > 90) = P\left(Z > \frac{90 - 60}{7.55}\right) = P(Z > 3.97) \approx 0.00004\]

Step 3:比較

  • Chebyshev:\(\leq 6.3\%\)(保守)
  • 常態近似:\(\approx 0.004\%\)(精確)
  • 差異:Chebyshev 高估了約 1500 倍!
這個不等式有什麼用?

穩健性:當你不確定分布形式時,Chebyshev 給出 最壞情況的保證

考試技巧

  • 題目說「不假設分布」→ 用 Chebyshev
  • 題目說「服從某分布」→ 用精確計算或 CLT
數學小結:Chebyshev 不等式
特性 說明
前提 只需 \(\mu, \sigma\) 存在
公式 \(P(\|X - \mu\| \geq k\sigma) \leq 1/k^2\)
優點 對任意分布成立
缺點 通常很保守(高估機率)
典型應用 不知道分布、穩健估計

(d) 一失敗就告警?

4 分大三

另一種策略:你的同事說:「累積看 \(n\) 次太慢了,為什麼不『一發現失敗就告警』?」

這聽起來很靈敏,但會不會 太敏感?正常系統平均多久會出現一次失敗?

你需要知道:「第一次失敗」發生在第幾次請求?

題目

\(W\) 為「第一次失敗」發生的位置(例如:第 1 次就失敗則 \(W=1\),前 2 次成功、第 3 次失敗則 \(W=3\))。

  1. 推導 \(P(W = k)\)\(k = 1, 2, 3, \ldots\)
  2. 計算 \(E[W]\)
  3. 若「一失敗就告警」,正常系統的誤報率是多少?
提示

\(W = k\) 表示「前 \(k-1\) 次都成功,第 \(k\) 次失敗」。

解答
  1. \(W = k\) 表示前 \(k-1\) 次成功、第 \(k\) 次失敗:

    \[P(W = k) = p^{k-1} (1-p) = (0.95)^{k-1} (0.05), \quad k = 1, 2, 3, \ldots\]
  2. \(q = 1 - p = 0.05\)

    \[E[W] = \sum_{k=1}^{\infty} k \cdot p^{k-1} q = \frac{1}{q} = \frac{1}{0.05} = 20\]
  3. 「一失敗就告警」的誤報率 = \(P(\text{第一次請求就失敗}) = P(W=1) = 0.05 = 5\%\)

    或者換個角度:正常系統平均每 20 次請求就會觸發一次告警——太頻繁了!

這個計算有什麼用?

評估「一失敗就告警」策略:誤報率 5% 太高了!如果每秒 200 次請求,平均每秒會誤報 10 次。

結論:需要更「容忍」的策略。

數學小結:你剛才發現了 Geometric 分布

「等到第一次失敗」的位置,數學上叫做 Geometric 分布,記作 \(W \sim \text{Geom}(q)\)\(q = 1-p\) 是失敗機率)。

性質 公式
PMF \(P(W=k) = p^{k-1} q\)\(k = 1, 2, \ldots\)
期望值 \(E[W] = 1/q\)
變異數 \(\text{Var}(W) = p/q^2\)
無記憶性 \(P(W > m+n \mid W > m) = P(W > n)\)

進階:無記憶性證明

2 分大二

你盯著螢幕,系統已經連續成功 50 次了。直覺告訴你: 「運氣這麼好,是不是接下來更容易失敗?」

你需要知道:連續成功的歷史,會不會影響「還要多久才失敗」?

題目:證明 Geometric 分布的無記憶性:

\[P(W > m+n \mid W > m) = P(W > n)\]
證明
\[P(W > m+n \mid W > m) = \frac{P(W > m+n)}{P(W > m)} = \frac{(1-q)^{m+n}}{(1-q)^m} = (1-q)^n = P(W > n)\]

其中 \(P(W > k) = (1-q)^k\) 是「前 \(k\) 次都成功」的機率。

這個證明有什麼用?

結論:不論已經連續成功多少次,「還要多久才失敗」的分布**完全相同**。

實務意義:告警系統可以放心「重置計數器」——過去 50 次成功不影響接下來的判斷。 這就是 Geometric 分布的**無記憶性**,也是它區別於其他離散分布的標誌性質。

類比:擲公平硬幣已經連續 10 次正面,下一次正面的機率仍是 50%——不是「該出反面了」!


(e) 累積 r 次失敗告警

4 分大三

更好的策略:「一次就告警」太敏感,那 累積 \(r\) 次失敗才告警 呢?

例如 \(r = 5\):連續觀察直到第 5 次失敗才告警。這樣可以降低誤報率,同時保持一定靈敏度。

你需要知道:累積到第 \(r\) 次失敗,平均需要多少次請求?

題目

\(T_r\) 為「第 \(r\) 次失敗」發生的位置。

  1. 說明 \(T_r\)\(W\)(第一次失敗的位置)的關係
  2. 推導 \(P(T_r = k)\)\(k = r, r+1, r+2, \ldots\)
  3. 計算 \(E[T_r]\)
  4. \(r = 5\)\(q = 0.05\),平均需要多少次請求才會告警?
提示

\(T_r = k\) 表示「前 \(k-1\) 次中恰好 \(r-1\) 次失敗,第 \(k\) 次是第 \(r\) 次失敗」。

解答
  1. \(T_r\) 可以看成 \(r\) 個獨立 Geometric 的和:\(T_r = W_1 + W_2 + \cdots + W_r\)

    其中 \(W_i\) 是「第 \(i-1\) 次失敗後,等到第 \(i\) 次失敗的額外請求數」。

  2. \(T_r = k\) 表示「前 \(k-1\) 次中恰好 \(r-1\) 次失敗,第 \(k\) 次失敗」:

    \[P(T_r = k) = \binom{k-1}{r-1} q^r p^{k-r}, \quad k = r, r+1, \ldots\]
  3. 由於 \(T_r = \sum_{i=1}^r W_i\),各 \(W_i\) 獨立且 \(E[W_i] = 1/q\)

    \[E[T_r] = r \cdot E[W] = \frac{r}{q}\]
  4. \(r = 5\)\(q = 0.05\)

    \[E[T_5] = \frac{5}{0.05} = 100\]

    平均需要 100 次請求才會累積到 5 次失敗。

這個計算有什麼用?

設計折衷告警策略

\(r\) \(E[T_r]\) 平均多久告警一次(假設 200 QPS)
1 20 0.1 秒
3 60 0.3 秒
5 100 0.5 秒
10 200 1 秒

選擇 \(r\) 時需要權衡:\(r\) 越大,誤報越少,但發現故障越慢。

數學小結:你剛才發現了 Negative Binomial 分布

「等到第 \(r\) 次失敗」的位置,數學上叫做 Negative Binomial 分布,記作 \(T_r \sim \text{NB}(r, q)\)

性質 公式
PMF \(P(T_r=k) = \binom{k-1}{r-1} q^r p^{k-r}\)\(k = r, r+1, \ldots\)
期望值 \(E[T_r] = r/q\)
變異數 \(\text{Var}(T_r) = rp/q^2\)
與 Geometric 關係 \(T_r = W_1 + \cdots + W_r\)\(r\) 個獨立 Geom 的和)

(f) 假設檢定框架

4 分碩一

整合所有工具:現在你手上有多種策略:

  1. 累積 \(n\) 次看失敗比例:用 Binomial 分布
  2. 第一次失敗就告警:用 Geometric 分布
  3. 累積 \(r\) 次失敗才告警:用 Negative Binomial 分布

哪種最好?這取決於你願意承受多少 誤報(Type I Error)和 漏報(Type II Error)。

題目

設正常狀態下失敗率 \(q_0 = 0.05\),異常狀態下失敗率 \(q_1 = 0.15\)

  1. 使用假設檢定框架:\(H_0\): 系統正常(\(q = q_0\)),\(H_1\): 系統異常(\(q = q_1\)
  2. 對於「累積 \(n = 100\) 次,失敗超過 \(k\) 次就告警」的策略,推導 Type I Error(誤報率 \(\alpha\))和 Type II Error(漏報率 \(\beta\))的公式
  3. 畫出 \(\alpha\)\(\beta\) 關於 \(k\) 的變化曲線(示意圖即可)
  4. 若要求 \(\alpha \leq 0.01\),求最小的 \(k\);此時 \(\beta\) 是多少?
解答
  1. 假設檢定框架:

    • \(H_0\): \(q = 0.05\)(正常)
    • \(H_1\): \(q = 0.15\)(異常)
    • 檢定統計量:\(F_n\) = \(n\) 次請求中的失敗次數
    • 拒絕域:\(F_n > k\)
  2. 誤報率和漏報率:

    \[\alpha(k) = P(F_n > k \mid H_0) = \sum_{j=k+1}^{n} \binom{n}{j} (0.05)^j (0.95)^{n-j}\]
    \[\beta(k) = P(F_n \leq k \mid H_1) = \sum_{j=0}^{k} \binom{n}{j} (0.15)^j (0.85)^{n-j}\]
  3. 曲線特性:

    • \(k\) 增大 → \(\alpha\) 減小(更不容易誤報)
    • \(k\) 增大 → \(\beta\) 增大(更容易漏報)
    • 需要找平衡點
  4. \(n = 100\),求 \(\alpha \leq 0.01\)

    使用常態近似,\(H_0\)\(F_n \approx N(5, 4.75)\)

    需要 \(P(F_n > k) \leq 0.01\),即 \(\frac{k - 5}{\sqrt{4.75}} \geq 2.33\)

    \(k \geq 5 + 2.33 \times 2.18 = 10.1\),取 \(k = 11\)

    此時 \(\beta = P(F_n \leq 11 \mid H_1)\)\(H_1\)\(F_n \approx N(15, 12.75)\)

    \(\beta \approx \Phi\left(\frac{11 - 15}{\sqrt{12.75}}\right) = \Phi(-1.12) \approx 0.13\)

這個計算有什麼用?

設計最優告警策略

  • \(\alpha = 0.01\)(每天誤報不超過 1 次),需要 \(k = 11\)
  • 此時 \(\beta = 0.13\),即 13% 機率漏掉真正的故障

權衡:誤報讓人疲勞,漏報造成損失。根據業務需求調整 \(k\)


進階:最優閾值設計

4 分碩一

凌晨五點,SRE 又被叫醒,結果是誤報。他怒吼:「閾值設太低了!」 第二天,系統真的掛了 10 分鐘才發現。老闆冷冷地說:「閾值設太高了。」

你需要知道:有沒有一個 \(k^*\),讓「誤報 ≤ 1%」且「漏報 ≤ 1%」同時成立?

題目:設 1 分鐘處理 \(n = 12000\) 次請求,以失敗次數 \(F\) 作為告警指標。

  1. 正常時 \(F \sim B(12000, 0.05)\),求 \(k^*\) 使 \(P(F > k^*) \leq 0.01\)(誤報約束)
  2. 故障時 \(F' \sim B(12000, 0.20)\),求 \(k^*\) 使 \(P(F' \leq k^*) \leq 0.01\)(漏報約束)
  3. 找出可行區間 \([k_{\min}, k_{\max}]\)
解答

參數計算

  • 正常:\(E[F] = 600\)\(\sigma_F = \sqrt{12000 \times 0.05 \times 0.95} \approx 23.9\)
  • 故障:\(E[F'] = 2400\)\(\sigma_{F'} = \sqrt{12000 \times 0.20 \times 0.80} \approx 43.8\)

誤報約束(正常時 \(P(F > k^*) \leq 0.01\)):

\[\frac{k^* - 600}{23.9} \geq 2.33 \Rightarrow k^* \geq 656\]

漏報約束(故障時 \(P(F' \leq k^*) \leq 0.01\)):

\[\frac{k^* - 2400}{43.8} \leq -2.33 \Rightarrow k^* \leq 2298\]

可行區間\(k^* \in [656, 2298]\)

這個計算有什麼用?

這是一個**最優化問題**——在「SRE 睡眠品質」與「系統可靠性」之間找平衡點。

可行區間很寬(656 到 2298),說明正常 vs 故障的區分度很高(好消息!)。

建議:取 \(k^* = 700\),留有安全邊際。

閾值設定 誤報率 漏報率 說明
\(k^* = 656\) 1% ~0% 激進(更快發現故障)
\(k^* = 700\) <0.5% ~0% 推薦(平衡)
\(k^* = 1000\) ~0% ~0% 保守(減少誤報)
數學小結:假設檢定的最優設計

這道題展示了**假設檢定**的核心權衡:

概念 符號 本題數值
虛無假設 \(H_0\):系統正常 \(p = 0.05\)
對立假設 \(H_1\):系統故障 \(p' = 0.20\)
Type I Error(誤報率) \(\alpha = P(\text{拒絕} H_0 \mid H_0 \text{為真})\) \(\leq 0.01\)
Type II Error(漏報率) \(\beta = P(\text{接受} H_0 \mid H_1 \text{為真})\) \(\leq 0.01\)
檢定力 \(1 - \beta\) \(\geq 0.99\)

設計原則:樣本量 \(n\) 越大,可行區間越寬,越容易同時滿足 \(\alpha\)\(\beta\) 約束。


進階挑戰:告警響了,系統真的壞了嗎?

3 分大三

你設計的告警系統響了。但上週已經被 5 次誤報叫醒,你開始懷疑: 收到告警,系統真的故障的機率是多少?

這不是「系統故障時觸發告警的機率」(那是告警的**靈敏度**)。 這是「告警觸發後,系統真的故障的機率」——完全不同的問題!

你需要知道:如何從「觀察結果」反推「真實狀態」?

題目:假設:

  • 系統故障的先驗機率 \(P(\text{故障}) = 0.01\)(系統 99% 時間正常)
  • 故障時告警響起的機率 \(P(\text{告警}|\text{故障}) = 0.95\)(靈敏度 95%)
  • 正常時告警響起的機率 \(P(\text{告警}|\text{正常}) = 0.02\)(誤報率 2%)

  • 用 Bayes' Theorem 計算 \(P(\text{故障}|\text{告警})\)

  • 解釋為什麼結果這麼低(這叫「基率謬誤」)
  • 若要使 \(P(\text{故障}|\text{告警}) > 50\%\),誤報率應降到多少?
解答

Step 1:Bayes 公式

\[P(\text{故障}|\text{告警}) = \frac{P(\text{告警}|\text{故障}) \cdot P(\text{故障})}{P(\text{告警})}\]

Step 2:計算 \(P(\text{告警})\)(全機率公式)

\[P(\text{告警}) = P(\text{告警}|\text{故障})P(\text{故障}) + P(\text{告警}|\text{正常})P(\text{正常})$$ $$= 0.95 \times 0.01 + 0.02 \times 0.99 = 0.0095 + 0.0198 = 0.0293\]

Step 3:後驗機率

\[P(\text{故障}|\text{告警}) = \frac{0.0095}{0.0293} \approx 32.4\%\]

基率謬誤解釋

雖然告警靈敏度高達 95%,但因為系統故障本身很罕見(1%),「正常但誤報」的絕對數量(\(0.99 \times 0.02 = 1.98\%\))遠大於「故障且正確告警」(\(0.01 \times 0.95 = 0.95\%\))。

降低誤報率的計算

\(P(\text{告警}|\text{正常}) = x\),要使後驗 > 50%:

\[\frac{0.0095}{0.0095 + 0.99x} > 0.5 \Rightarrow 0.0095 > 0.00475 + 0.495x \Rightarrow x < 0.0096\]

誤報率需降到 0.96% 以下(從原來的 2% 降低一半以上)。

這個計算有什麼用?

SRE 的日常:告警響了,但大部分時候系統沒壞——這就是「基率謬誤」的真實體現。

改善方向

策略 效果
降低誤報率 最有效!從 2% 降到 1% 就能大幅提升後驗機率
提高靈敏度 效果有限(已經 95% 了)
多重確認 連續 2 次告警才行動,等效於降低誤報率
數學小結:Bayes' Theorem
概念 符號 本題意義
先驗 \(P(A)\) 系統故障率(1%)
似然 \(P(B\|A)\) 靈敏度/誤報率
後驗 \(P(A\|B)\) 收到告警後故障的機率
公式 \(P(A\|B) = \frac{P(B\|A)P(A)}{\sum_i P(B\|A_i)P(A_i)}\) 全機率 + 條件機率

關鍵洞察:後驗機率不只取決於似然(靈敏度),更取決於**先驗**(基率)。 當事件很罕見時(低基率),即使檢測器很準,「陽性結果為真」的機率仍可能很低。


第 1 題小結:你的告警工具箱

凌晨三點,你被告警叫醒
「系統掛了嗎?」
    ├─► 需要知道:正常失敗率 → 工具:Bernoulli(E[X], Var(X))
「波動多大算異常?」
    ├─► 需要知道:失敗次數的分布 → 工具:Binomial
「一失敗就告警?」
    ├─► 需要知道:第一次失敗何時發生 → 工具:Geometric
「太敏感,累積 r 次呢?」
    ├─► 需要知道:第 r 次失敗何時發生 → 工具:Negative Binomial
「哪種策略最好?」
    ├─► 工具:假設檢定(平衡誤報與漏報)
「告警響了,系統真的壞了嗎?」
    └─► 工具:Bayes' Theorem(從觀察反推狀態)

分布關係圖

Bernoulli(p)
    │ n 個獨立的和
Binomial(n, p)

Bernoulli(p) → 等到第一次失敗 → Geometric(1-p)
                                    │ r 個獨立的和
                              Negative Binomial(r, 1-p)

第二部分:請求到達與批次處理


場景:工程師的爭論

你的團隊正在討論推論服務的架構。工程師 A 說:「我們應該用 Static Batching,等湊齊 8 個請求再一起送進 GPU。」工程師 B 反駁:「不對,Continuous Batching 更好,請求一來就處理。」

你的問題:哪種策略的吞吐量更高?延遲更低?

要回答這個問題,你首先需要理解「請求是怎麼到達的」。


第 2 題:批次處理策略比較


(a) 請求到達模型

3 分大二

第一個問題:請求不是均勻到達的——有時候一秒內來了 300 個,有時候只有 150 個。這種「隨機到達」該怎麼描述?

你需要知道:建模請求到達的隨機過程

假設請求到達滿足以下條件:

  1. 獨立性:不同時段的到達互不影響
  2. 齊次性:每秒平均到達率 \(\lambda = 200\) 不變
  3. 稀疏性:極短時間內(如 1ms)最多到達 1 個請求

題目

\(N(t)\) 為時間 \([0, t]\) 內到達的請求數。

  1. 推導 \(P(N(t) = k)\) 的公式
  2. 計算 \(E[N(t)]\)\(\text{Var}(N(t))\)
  3. \(\lambda = 200\)\(t = 1\) 秒,計算 \(P(N(1) \geq 250)\)
提示

\([0, t]\) 分成 \(n\) 個小區間,每個區間長度 \(t/n\)。當 \(n\) 很大時,每個小區間最多到達 1 個請求,機率約 \(\lambda t / n\)。這是 \(n\) 次 Bernoulli 試驗,成功機率 \(p = \lambda t / n\)。令 \(n \to \infty\)...

解答
  1. \([0, t]\) 分成 \(n\) 個小區間,每個區間到達機率 \(p = \lambda t / n\)

    \(N(t) \approx B(n, \lambda t / n)\),當 \(n \to \infty\)

    \[P(N(t) = k) = \lim_{n \to \infty} \binom{n}{k} \left(\frac{\lambda t}{n}\right)^k \left(1 - \frac{\lambda t}{n}\right)^{n-k} = \frac{(\lambda t)^k e^{-\lambda t}}{k!}\]
  2. \[E[N(t)] = \lambda t, \quad \text{Var}(N(t)) = \lambda t\]

    (期望 = 變異數是這個分布的重要特徵)

  3. \(\lambda t = 200\),求 \(P(N(1) \geq 250)\)

    常態近似:\(N(1) \approx N(200, 200)\)\(\sigma = \sqrt{200} \approx 14.14\)

    \[P(N(1) \geq 250) \approx 1 - \Phi\left(\frac{249.5 - 200}{14.14}\right) = 1 - \Phi(3.50) \approx 0.00023\]
這個計算有什麼用?

理解流量波動:即使平均 200 QPS,實際每秒的請求數會在 200 附近波動。標準差 \(\sqrt{200} \approx 14\),所以大部分時間在 \([172, 228]\) 之間。

這對容量規劃很重要:如果 GPU 只能處理 200 QPS,會有一定機率過載。

數學小結:你剛才發現了 Poisson 分布

單位時間內的隨機到達計數,數學上叫做 Poisson 分布,記作 \(N(t) \sim \text{Pois}(\lambda t)\)

性質 公式
PMF \(P(N=k) = \frac{(\lambda t)^k e^{-\lambda t}}{k!}\)\(k = 0, 1, 2, \ldots\)
期望值 \(E[N] = \lambda t\)
變異數 \(\text{Var}(N) = \lambda t\)(期望 = 變異數!)
可加性 \(\text{Pois}(\lambda_1) + \text{Pois}(\lambda_2) = \text{Pois}(\lambda_1 + \lambda_2)\)

進階:Poisson 極限定理

3 分大三

你的服務有 1000 萬個潛在用戶,每個用戶每秒發請求的機率是 \(2 \times 10^{-5}\)。 理論上,每秒請求數應該是 \(\text{Binomial}(10^7, 2 \times 10^{-5})\)

但問題是:\(\binom{10^7}{k}\) 根本算不動!

你需要知道:有沒有更簡單的近似方法?

題目:證明 Poisson 極限定理——當 \(n \to \infty\), \(p \to 0\), \(np \to \lambda\) 時:

\[\text{Binomial}(n, p) \to \text{Pois}(\lambda)\]
證明

\(p_n = \lambda/n\),則:

\[P(S_n = k) = \binom{n}{k} \left(\frac{\lambda}{n}\right)^k \left(1 - \frac{\lambda}{n}\right)^{n-k}\]
\[= \frac{\lambda^k}{k!} \cdot \frac{n(n-1)\cdots(n-k+1)}{n^k} \cdot \left(1 - \frac{\lambda}{n}\right)^n \cdot \left(1 - \frac{\lambda}{n}\right)^{-k}\]

\(n \to \infty\)

  • \(\frac{n(n-1)\cdots(n-k+1)}{n^k} \to 1\)(因為 \(k\) 固定,\(n\) 很大)
  • \(\left(1 - \frac{\lambda}{n}\right)^n \to e^{-\lambda}\)(經典極限)
  • \(\left(1 - \frac{\lambda}{n}\right)^{-k} \to 1\)(因為 \(k\) 固定)
\[\therefore P(S_n = k) \to \frac{\lambda^k e^{-\lambda}}{k!} \quad \square\]
這個證明有什麼用?

直接用 Poisson(200) 就好——不用算 \(\binom{10^7}{k}\) 這種天文數字。

這就是為什麼「稀有事件計數」用 Poisson:

  • 用戶很多(\(n\) 大)
  • 每個用戶發請求機率很小(\(p\) 小)
  • 但總數是穩定的 \(\lambda = np\)

實務經驗法則:當 \(n \geq 20\)\(p \leq 0.05\) 時,Binomial 就可以用 Poisson 近似。


(b) Static Batching 等待時間

4 分大三

工程師 A 的策略:等湊齊 \(n = 8\) 個請求,再一起送進 GPU 做 batch 推論。

你需要知道:「湊齊 \(n\) 個請求」平均要等多久?

這等於問:「第 \(n\) 個請求什麼時候到達?」

題目

\(W_i\) 為第 \(i-1\) 個請求到達後,等到第 \(i\) 個請求的時間(即「請求間隔」)。

  1. 推導 \(W_i\) 的分布:\(P(W_i > t) = ?\)
  2. \(T_n = W_1 + W_2 + \cdots + W_n\)(湊齊 \(n\) 個請求的總等待時間)。推導 \(T_n\) 的 PDF
  3. 計算 \(E[T_n]\)\(\text{Var}(T_n)\)
  4. \(\lambda = 200\)\(n = 8\),平均等待時間是多少?
提示

\(W_i > t\) 表示「時間 \(t\) 內沒有請求到達」,即 \(N(t) = 0\)

解答
  1. \(P(W_i > t) = P(N(t) = 0) = e^{-\lambda t}\)

    這是 CDF 的補函數,所以 \(W_i\) 的 CDF 是 \(F_{W}(t) = 1 - e^{-\lambda t}\)

    PDF:\(f_{W}(t) = \lambda e^{-\lambda t}\)\(t \geq 0\)

  2. \(T_n = W_1 + \cdots + W_n\),各 \(W_i\) 獨立同分布。

    用 MGF 或卷積可得:

    \[f_{T_n}(t) = \frac{\lambda^n t^{n-1} e^{-\lambda t}}{(n-1)!}, \quad t \geq 0\]
  3. \(E[T_n] = n \cdot E[W] = \frac{n}{\lambda}\)

    \(\text{Var}(T_n) = n \cdot \text{Var}(W) = \frac{n}{\lambda^2}\)

  4. \(\lambda = 200\)\(n = 8\)

    \[E[T_8] = \frac{8}{200} = 0.04 \text{ 秒} = 40 \text{ ms}\]
這個計算有什麼用?

評估 Static Batching 延遲:平均需要等 40ms 才能湊齊 8 個請求。這是「batching 帶來的額外延遲」,要加在推論時間之上。

權衡:batch size 越大,GPU 效率越高(吞吐量增加),但等待時間也越長(延遲增加)。

數學小結:你剛才發現了 Exponential 和 Gamma 分布

請求間隔(等到下一個請求)服從 Exponential 分布\(W \sim \text{Exp}(\lambda)\)

性質 公式
PDF \(f(t) = \lambda e^{-\lambda t}\)\(t \geq 0\)
CDF \(F(t) = 1 - e^{-\lambda t}\)
期望值 \(E[W] = 1/\lambda\)
變異數 \(\text{Var}(W) = 1/\lambda^2\)
無記憶性 \(P(W > s+t \mid W > s) = P(W > t)\)

\(n\) 個請求的總等待時間 服從 Gamma 分布\(T_n \sim \text{Gamma}(n, \lambda)\)

性質 公式
PDF \(f(t) = \frac{\lambda^n t^{n-1} e^{-\lambda t}}{(n-1)!}\)\(t \geq 0\)
期望值 \(E[T_n] = n/\lambda\)
變異數 \(\text{Var}(T_n) = n/\lambda^2\)
與 Exponential 關係 \(\text{Gamma}(n, \lambda) = \sum_{i=1}^n \text{Exp}(\lambda)\)

進階挑戰:用 MGF 驗證 Gamma 分布

3 分大三

你的同事質疑:「為什麼 \(n\) 個 Exponential 的和是 Gamma?你能證明嗎?」

你需要知道:MGF 的唯一性——分布由 MGF 唯一確定

題目

  1. 推導 \(\text{Exponential}(\lambda)\) 的 MGF:\(M_X(t) = ?\)
  2. \(S = X_1 + \cdots + X_n\),其中 \(X_i \stackrel{iid}{\sim} \text{Exp}(\lambda)\),求 \(M_S(t)\)
  3. 驗證這是 \(\text{Gamma}(n, \lambda)\) 的 MGF
提示

MGF 定義:\(M_X(t) = E[e^{tX}]\)。對 Exponential 分布,這是一個可積分的指數積分。

解答

Step 1:Exponential 的 MGF

\[M_X(t) = E[e^{tX}] = \int_0^\infty e^{tx} \cdot \lambda e^{-\lambda x} \, dx = \lambda \int_0^\infty e^{-(\lambda - t)x} \, dx\]

\(t < \lambda\) 時,積分收斂:

\[M_X(t) = \lambda \cdot \frac{1}{\lambda - t} = \frac{\lambda}{\lambda - t}\]

Step 2:獨立和的 MGF

由於 \(X_1, \ldots, X_n\) 獨立,MGF 相乘:

\[M_S(t) = \prod_{i=1}^n M_{X_i}(t) = \left(\frac{\lambda}{\lambda - t}\right)^n\]

Step 3:Gamma 的 MGF

\(\text{Gamma}(n, \lambda)\) 的 MGF 正是 \(\left(\frac{\lambda}{\lambda - t}\right)^n\),與上式相同。

由 MGF 唯一性定理,\(S \sim \text{Gamma}(n, \lambda)\)\(\square\)

這個技巧有什麼用?

考試必備:MGF 是證明「和的分布」的標準工具。

原分布 和的分布 MGF 相乘後
\(n\)\(\text{Exp}(\lambda)\) \(\text{Gamma}(n, \lambda)\) \(\left(\frac{\lambda}{\lambda-t}\right)^n\)
\(n\)\(N(\mu, \sigma^2)\) \(N(n\mu, n\sigma^2)\) \(e^{n\mu t + n\sigma^2 t^2/2}\)
\(n\)\(\text{Pois}(\mu)\) \(\text{Pois}(n\mu)\) \(e^{n\mu(e^t - 1)}\)

比直接算卷積積分簡單得多!


© Continuous Batching

4 分碩一

工程師 B 的策略:請求一來就處理,不等湊齊。這是經典的「排隊系統」。

你需要知道:Continuous Batching 的平均等待時間是多少?

題目

建立 M/M/1 排隊模型: - 到達過程:Poisson,rate \(\lambda\) - 服務時間:Exponential,rate \(\mu\)(平均服務時間 \(1/\mu\)

  1. 定義利用率 \(\rho = \lambda / \mu\)。說明穩態存在的條件
  2. 推導穩態下系統中顧客數 \(L\) 的分布:\(P(L = k)\)
  3. 計算 \(E[L]\) 和平均等待時間 \(W\)(使用 Little's Law)
  4. \(\lambda = 200\)\(\mu = 250\),計算 \(\rho\)\(E[L]\)\(W\)
解答
  1. 穩態條件\(\rho = \lambda / \mu < 1\)

    \(\rho \geq 1\),到達率 ≥ 服務率,隊列會無限增長。

  2. 穩態分布

    \[P(L = k) = (1 - \rho) \rho^k, \quad k = 0, 1, 2, \ldots\]

    這是 Geometric 分布!

  3. 期望隊列長度

    \[E[L] = \sum_{k=0}^{\infty} k (1-\rho) \rho^k = \frac{\rho}{1 - \rho}\]

    Little's Law\(E[L] = \lambda \cdot W\)

    \[W = \frac{E[L]}{\lambda} = \frac{\rho}{\lambda(1-\rho)} = \frac{1}{\mu - \lambda}\]
  4. \(\lambda = 200\)\(\mu = 250\)

    \(\rho = 200/250 = 0.8\)

    \(E[L] = 0.8 / 0.2 = 4\)

    \(W = 1 / (250 - 200) = 1/50 = 0.02\) 秒 = 20 ms

這個計算有什麼用?

比較兩種策略

策略 平均等待時間 說明
Static Batching (\(n=8\)) 40 ms 等湊齊 batch
Continuous Batching 20 ms 排隊等服務

在這個設定下,Continuous Batching 延遲更低!

但注意:這沒考慮 batching 帶來的 GPU 效率提升。實際上 Static Batching 的有效 \(\mu\) 會更高。


(d) 穩態存在條件

3 分大三

關鍵問題:排隊系統最怕的是 \(\rho \to 1\)。當利用率接近 100% 時會發生什麼?

題目

  1. \(\rho \to 1^-\) 時,\(E[L]\)\(W\) 如何變化?
  2. 若要求平均等待時間 \(W \leq 50\) ms,\(\lambda = 200\)\(\mu\) 至少要多少?
  3. 說明「80% 利用率」法則的數學原因
解答
  1. \(\rho \to 1^-\)

    \[E[L] = \frac{\rho}{1-\rho} \to \infty$$ $$W = \frac{1}{\mu - \lambda} \to \infty\]

    系統會「爆掉」——隊列無限增長,延遲無限大。

  2. \(W \leq 0.05\) 秒:

    \[\frac{1}{\mu - 200} \leq 0.05 \Rightarrow \mu - 200 \geq 20 \Rightarrow \mu \geq 220\]

    服務率至少要 220 QPS(比到達率高 10%)。

  3. 80% 利用率法則

    \(\rho = 0.8\) 時,\(E[L] = 4\)\(W = 4/\lambda\)

    \(\rho = 0.9\) 時,\(E[L] = 9\)\(W = 9/\lambda\)

    \(\rho = 0.95\) 時,\(E[L] = 19\)\(W = 19/\lambda\)

    結論:利用率從 80% 升到 95%,延遲增加近 5 倍!所以生產系統通常保持 \(\rho \leq 0.8\)

這個計算有什麼用?

容量規劃:如果預期流量 \(\lambda = 200\),服務能力不能剛好 200——需要留餘裕。

業界經驗:\(\mu \geq 1.25 \lambda\)(即 \(\rho \leq 0.8\))是安全的設計。


(e) 策略選擇

4 分碩一

最終決策:綜合考慮延遲和吞吐量,什麼情況下選 Static Batching,什麼情況下選 Continuous Batching?

題目

假設: - Static Batching:batch size = 8,等待時間 \(T_8 \sim \text{Gamma}(8, \lambda)\),GPU 推論時間 50ms - Continuous Batching:M/M/1 模型,單次推論時間 100ms(因為沒有 batch,GPU 效率低)

  1. 計算兩種策略的「端到端延遲」(等待 + 推論)
  2. 計算兩種策略的「有效吞吐量」
  3. 推導「選擇 Static Batching」的條件
解答
  1. 端到端延遲

    Static Batching:\(E[T_8] + 50 = 40 + 50 = 90\) ms

    Continuous Batching:\(W + 100 = 20 + 100 = 120\) ms

    → Static Batching 延遲更低!

  2. 有效吞吐量

    Static Batching:每 90ms 處理 8 個請求 → \(8/0.09 = 89\) QPS per GPU

    Continuous Batching:每 120ms 處理 1 個請求 → \(1/0.12 = 8.3\) QPS per GPU

    → Static Batching 吞吐量高 10 倍!

  3. 選擇條件

    設 Static Batching 推論時間 \(t_s\),Continuous Batching 推論時間 \(t_c\)

    選 Static 當且僅當:\(E[T_n] + t_s < W + t_c\)

    即:\(\frac{n}{\lambda} + t_s < \frac{1}{\mu - \lambda} + t_c\)

    \(t_c \gg t_s\)(batch 效率提升顯著)或 \(\lambda\) 很大(等待時間短)時,選 Static Batching。

這個計算有什麼用?

架構決策

  • 低負載\(\lambda\) 小):Continuous Batching 更好,因為等待時間長
  • 高負載\(\lambda\) 大):Static Batching 更好,因為 batch 效率提升顯著

實際上,現代推論框架(如 vLLM)使用「動態 batching」——結合兩者優點。


第 2 題小結:你的批次處理工具箱

「請求怎麼到達?」
    ├─► 工具:Poisson 分布(計數)
「請求間隔多長?」
    ├─► 工具:Exponential 分布(等待時間)
「湊齊 n 個要等多久?」
    ├─► 工具:Gamma 分布(n 個 Exponential 的和)
「排隊等服務要多久?」
    ├─► 工具:M/M/1 排隊論
「系統什麼時候爆掉?」
    └─► 工具:利用率分析(ρ < 1 穩態條件)

分布關係圖

Poisson 過程(計數)
    │ 相鄰事件的間隔
Exponential(等待時間)
    │ n 個獨立的和
Gamma(總等待時間)

第三部分:響應時間與 SLO 設計


場景:PM 問你「P99 延遲是多少?」

產品經理拿著合約來找你:「客戶要求我們承諾 P99 延遲不超過 10 秒,我們做得到嗎?」

你打開 Grafana,看到響應時間的分布圖——有些請求 1 秒就完成,有些要 5 秒,偶爾還有超過 10 秒的。

你的問題:響應時間的 P99 是多少?該怎麼設定超時閾值?


第 3 題:響應時間分布分析


(a) 響應時間分布

3 分大二

第一個問題:響應時間不是固定的——有時快、有時慢。這種「隨機等待」該怎麼描述?

你需要知道:建模響應時間的分布

觀察到響應時間有一個重要特性:無記憶性——已經等了 1 秒,接下來還要等多久,跟「沒等過」是一樣的。(GPU 不會因為你等久了就加速處理)

題目

假設單次響應時間 \(T\) 服從參數為 \(\lambda\) 的分布,滿足無記憶性:

\[P(T > s + t \mid T > s) = P(T > t)\]
  1. 從無記憶性推導 \(P(T > t)\) 的形式
  2. 若平均響應時間 \(E[T] = 2\) 秒,求 \(\lambda\)
  3. 計算 \(P(T > 5)\)(響應時間超過 5 秒的機率)
提示

\(g(t) = P(T > t)\)。無記憶性意味著 \(g(s+t) = g(s) \cdot g(t)\)。什麼函數滿足這個性質?

解答
  1. \(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)\)

  2. \(E[T] = \frac{1}{\lambda} = 2\)\(\Rightarrow \lambda = 0.5\) /秒

  3. \(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\)

\[e^{-0.5 t_0} < 0.01 \Rightarrow t_0 > \frac{\ln 100}{0.5} = 9.2 \text{ 秒}\]
數學小結: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\)

  1. 推導 \(S_n\) 的 PDF
  2. \(n = 100\)(生成 100 個 token),\(\lambda = 50\)(每秒生成 50 個 token),計算 \(E[S_n]\)\(\text{Var}(S_n)\)
  3. 計算 \(P(S_{100} > 3)\)(生成 100 token 超過 3 秒的機率)
解答
  1. \(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\]
  2. \(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{ 秒}\]
  3. 常態近似:\(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\)

  1. \(M'(t)\),代入 \(t=0\)\(E[X]\)
  2. \(M''(t)\),代入 \(t=0\)\(E[X^2]\)
  3. 計算 \(\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]\)

\[M'(t) = n \cdot \left(\frac{\lambda}{\lambda - t}\right)^{n-1} \cdot \frac{\lambda}{(\lambda-t)^2} = \frac{n\lambda^n}{(\lambda - t)^{n+1}}\]
\[E[X] = M'(0) = \frac{n\lambda^n}{\lambda^{n+1}} = \frac{n}{\lambda}\]

Step 2:求 \(E[X^2]\)

\[M''(t) = \frac{d}{dt}\left[\frac{n\lambda^n}{(\lambda - t)^{n+1}}\right] = \frac{n(n+1)\lambda^n}{(\lambda - t)^{n+2}}\]
\[E[X^2] = M''(0) = \frac{n(n+1)\lambda^n}{\lambda^{n+2}} = \frac{n(n+1)}{\lambda^2}\]

Step 3:求 \(\text{Var}(X)\)

\[\text{Var}(X) = E[X^2] - (E[X])^2 = \frac{n(n+1)}{\lambda^2} - \frac{n^2}{\lambda^2} = \frac{n}{\lambda^2}\]
這個技巧有什麼用?

考試必備:很多題目會要求「用 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\)

  1. 用全期望公式計算 \(E[S]\)
  2. 用全變異公式計算 \(\text{Var}(S)\)
  3. 比較 (b) 中「\(n\) 固定」和這裡「\(N\) 隨機」的變異數差異
提示

全期望:\(E[S] = E[E[S|N]]\)

全變異:\(\text{Var}(S) = E[\text{Var}(S|N)] + \text{Var}(E[S|N])\)

解答
  1. 全期望

    \[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{ 秒}\]
  2. 全變異

    \[\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{ 秒}\]
  3. 比較

    模型 \(\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 分碩一

回答 PM 的問題:P99 延遲是多少?

你需要知道:求分布的分位數

題目

使用 © 的模型(\(E[S] = 2\) 秒,\(\text{Var}(S) = 0.08\) 秒²),假設 \(S\) 近似 Normal。

  1. 計算 P50(中位數)、P90、P99 延遲
  2. 若客戶要求 P99 ≤ 10 秒,我們能承諾嗎?
  3. 若 P99 實際是 3 秒,反推 \(\sigma\) 是多少?
解答
  1. \(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 秒
  2. P99 = 2.65 秒 ≪ 10 秒,可以承諾

    但要注意:這是「正常情況」。系統過載、GPU 故障時可能更高。

  3. 若 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 分大三

PM 追問:「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)}\) 為順序統計量。

  1. 推導最大值 \(T_{(n)}\) 的 CDF:\(F_{T_{(n)}}(t) = ?\)
  2. \(T_i \sim \text{Exp}(\lambda)\),求 \(E[T_{(n)}]\) 並與 \(F^{-1}(0.99)\) 比較
  3. 推導第 \(k\) 個順序統計量 \(T_{(k)}\) 的 PDF(一般公式)
  4. 用順序統計量解釋:為什麼「100 個樣本的最大值」不等於「P99」?
解答

Step 1:\(T_{(n)}\) 的 CDF

\(T_{(n)} \leq t\) 意味著所有 \(T_i\)\(\leq t\)

\[F_{T_{(n)}}(t) = P(T_{(n)} \leq t) = P(\text{所有 } T_i \leq t) = \prod_{i=1}^{n} F(t) = [F(t)]^n\]

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}\)

\[E[T_{(n)}] = \int_0^\infty t \cdot n [1-e^{-\lambda t}]^{n-1} \lambda e^{-\lambda t} \, dt\]

使用公式(或查表):

\[E[T_{(n)}] = \frac{1}{\lambda} \sum_{k=1}^{n} \frac{1}{k} = \frac{H_n}{\lambda}\]

其中 \(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(一般公式)

\[f_{T_{(k)}}(t) = \frac{n!}{(k-1)!(n-k)!} [F(t)]^{k-1} [1-F(t)]^{n-k} f(t)\]

這可以用組合論推導:第 \(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 題小結:你的 SLO 設計工具箱

「單次響應時間分布?」
    ├─► 工具:Exponential(無記憶假設)
「多步驟的總時間?」
    ├─► 工具:Gamma(n 個 Exponential 的和)
「步數也是隨機的?」
    ├─► 工具:全期望、全變異公式
「P99 延遲是多少?」
    └─► 工具:Normal 近似、分位數計算

第四部分:計費與成本分析


場景:財務部的靈魂拷問

財務長看著帳單皺眉:「為什麼實際支出總比預估高 5%?而且每個月波動這麼大,我怎麼做預算?」

你解釋說 API 是按 token 計費的,但每次請求的 token 數不固定...

你的問題:如何預測月度成本?波動從哪裡來?


第 4 題:Token 計費模型


(a) Token 數量分布

3 分大二

第一個問題:每次請求產生多少 token?

你需要知道:建模 token 數量的分布

假設每次請求的輸出 token 數 \(T\) 服從指數分布,平均 \(E[T] = 1000\) tokens。

題目

  1. \(T\) 的參數 \(\lambda\)
  2. 計算 \(P(T > 2000)\)(超過 2000 tokens 的機率)
  3. API 按 100 tokens 為單位向上取整計費,令 \(W = 100 \cdot \lceil T/100 \rceil\)。計算 \(P(W = 100)\)\(P(W = 200)\)
解答
  1. \(E[T] = \frac{1}{\lambda} = 1000 \Rightarrow \lambda = 0.001\)

  2. \(P(T > 2000) = e^{-0.001 \times 2000} = e^{-2} \approx 0.135\)

  3. \(W = 100\) 當且僅當 \(0 < T \leq 100\)

    \[P(W = 100) = P(T \leq 100) = 1 - e^{-0.1} \approx 0.095\]

    \(W = 200\) 當且僅當 \(100 < T \leq 200\)

    \[P(W = 200) = e^{-0.1} - e^{-0.2} \approx 0.086\]
這個計算有什麼用?

理解計費結構:向上取整意味著「實際支付 > 實際使用」,這就是為什麼帳單比預期高。

初步診斷:13.5% 的請求會超過 2000 tokens,這些「長尾請求」會顯著拉高平均成本。

數學小結:你剛才用了 Exponential 分布建模

Token 數量用 Exponential 分布 建模,是因為它的「無記憶性」:

  • 已經生成了 500 tokens,「還要再生成多少」的分布跟「從頭開始」一樣
  • 這符合 LLM 逐 token 生成的特性(簡化假設)
性質 公式
PDF \(f(t) = \lambda e^{-\lambda t}\)\(t \geq 0\)
CDF \(F(t) = 1 - e^{-\lambda t}\)
期望值 \(E[T] = 1/\lambda\)
變異數 \(\text{Var}(T) = 1/\lambda^2\)
無記憶性 \(P(T > s+t \mid T > s) = P(T > t)\)

(b) 取整損失分析

4 分大三

關鍵問題:向上取整導致的「額外支出」是多少?

你需要知道:比較 \(E[W]\)\(E[T]\)

題目

  1. 證明取整後的計費金額 \(W\) 服從某種離散分布,並推導其 PMF
  2. 計算 \(E[W]\)
  3. 計算取整損失率 \(\frac{E[W] - E[T]}{E[T]}\)
提示

\(q = e^{-0.1}\),觀察 \(P(W = 100k)\) 的形式。

解答
  1. \(P(W = 100k) = P(100(k-1) < T \leq 100k) = e^{-0.1(k-1)} - e^{-0.1k}\)

    \(= e^{-0.1(k-1)}(1 - e^{-0.1}) = (1-q) q^{k-1}\),其中 \(q = e^{-0.1} \approx 0.905\)

    這是 Geometric 分布(乘以 100)!

  2. \(E[W] = 100 \cdot E[\text{Geom}(1-q)] = \frac{100}{1-q} = \frac{100}{1 - e^{-0.1}} \approx 1052\) tokens

  3. 取整損失率 = \(\frac{1052 - 1000}{1000} = 5.2\%\)

這個計算有什麼用?

解釋帳單差異:這 5.2% 就是財務長問的「為什麼比預估高」的原因!

談判策略:如果能將計費單位從 100 改為 50,取整損失會減半。

計費單位 取整損失率
100 tokens 5.2%
50 tokens 2.6%
10 tokens 0.5%
數學小結:離散化產生了 Geometric 分布

當連續的 Exponential 分布被「向上取整」時,離散化後的結果服從 Geometric 分布(縮放版)。

這個現象叫做「離散化」:

  • 原始分布:\(T \sim \text{Exp}(\lambda)\)(連續)
  • 離散化後:\(W/\Delta \sim \text{Geom}(1 - e^{-\lambda\Delta})\)(離散)
性質 公式
PMF \(P(W = k\Delta) = (1-q) q^{k-1}\)\(q = e^{-\lambda\Delta}\)
期望值 \(E[W] = \frac{\Delta}{1-q}\)
取整損失 \(\frac{E[W] - E[T]}{E[T]} = \frac{\lambda\Delta/2}{1 - e^{-\lambda\Delta}} - \frac{1}{2} \approx \frac{\lambda\Delta}{2}\)(小 \(\Delta\)

© 每秒總成本分布

4 分碩一

整合問題:每秒有 \(N \sim \text{Pois}(200)\) 個請求,每個請求的計費金額 \(W_i\) 獨立同分布。令 \(C = \sum_{i=1}^{N} W_i\) 為每秒總成本。

你需要知道:「隨機數量的隨機金額」加總的分布

題目

  1. 說明 \(C\) 服從什麼分布(名稱即可)
  2. 用全期望公式計算 \(E[C]\)
  3. 用全變異公式計算 \(\text{Var}(C)\)
解答
  1. \(C\) 服從 複合 Poisson 分布(Compound Poisson)

  2. 全期望

    \[E[C] = E[E[C|N]] = E[N \cdot E[W]] = \lambda \cdot E[W] = 200 \times 1052 = 210400 \text{ tokens/秒}\]
  3. 全變異

    \[\text{Var}(C) = E[\text{Var}(C|N)] + \text{Var}(E[C|N])\]
    \[= E[N] \cdot \text{Var}(W) + E[W]^2 \cdot \text{Var}(N)\]
    \[= \lambda \cdot \text{Var}(W) + E[W]^2 \cdot \lambda = \lambda \cdot E[W^2]\]

    (需要計算 \(E[W^2]\),這裡省略細節)

數學小結:複合 Poisson 分布

當「事件數」服從 Poisson、「每次事件的量」獨立同分布時,總量服從 複合 Poisson 分布

性質 公式
全期望 \(E[C] = \lambda \cdot E[W]\)
全變異 \(\text{Var}(C) = \lambda \cdot E[W^2]\)

這在保險、金融、網路流量分析中非常常見。

進階:全變異公式推導

3 分碩一

財務長追問:「成本波動是從哪來的?是請求數量不穩定,還是單次金額不穩定?」

你需要知道:如何分解總變異數的來源?

題目:推導全變異公式(Law of Total Variance):

\[\text{Var}(C) = E[\text{Var}(C|N)] + \text{Var}(E[C|N])\]

並說明每一項的物理意義。

推導

起點\(\text{Var}(C) = E[C^2] - (E[C])^2\)

Step 1:展開 \(E[C^2]\)

\[E[C^2] = E[E[C^2|N]]\]

由於 \(E[C^2|N] = \text{Var}(C|N) + (E[C|N])^2\),得:

\[E[C^2] = E[\text{Var}(C|N)] + E[(E[C|N])^2]\]

Step 2:展開 \((E[C])^2\)

\[(E[C])^2 = (E[E[C|N]])^2\]

Step 3:相減

\[\text{Var}(C) = E[\text{Var}(C|N)] + \underbrace{E[(E[C|N])^2] - (E[E[C|N]])^2}_{\text{Var}(E[C|N])}\]
\[= E[\text{Var}(C|N)] + \text{Var}(E[C|N]) \quad \square\]
這個推導有什麼用?

物理意義

  • 第一項 \(E[\text{Var}(C|N)]\):「給定請求數 \(N\),成本的波動」的期望

    • 這是**單次金額的變異性**貢獻
    • 對應:\(E[N] \cdot \text{Var}(W)\)
  • 第二項 \(\text{Var}(E[C|N])\):「給定請求數 \(N\),成本期望值」的波動

    • 這是**請求數量的變異性**貢獻
    • 對應:\(\text{Var}(N) \cdot (E[W])^2\)

實務決策:比較兩項大小,決定優化方向

  • 第一項大 → 優化單次金額的穩定性(如:壓縮輸出長度)
  • 第二項大 → 優化流量的穩定性(如:流量平滑、限流)

第 5 題:月度成本預測

場景延續:財務長聽完你解釋「5.2% 取整損失」後,點點頭:「好,那下個月的 API 成本會落在什麼範圍?我需要一個 95% 信賴區間來做預算。」

你的問題:如何從「每秒成本」推算「月度成本」的信賴區間?


(a) 日成本分布

3 分大三

往上累積:一天有 86400 秒,日成本 \(C_{day} = \sum_{t=1}^{86400} C_t\)

你需要知道:大量獨立隨機變數的和近似什麼分布?

題目

  1. 用中央極限定理說明 \(C_{day}\) 的近似分布
  2. 計算 \(E[C_{day}]\)\(\text{Var}(C_{day})\)(假設 \(E[C] = 210400\)\(\text{Var}(C) = 4.5 \times 10^{10}\)
  3. 日成本的 95% 信賴區間是多少?
解答
  1. 由 CLT,\(C_{day} \approx N(\mu_{day}, \sigma^2_{day})\)

  2. \(E[C_{day}] = 86400 \times 210400 = 1.82 \times 10^{10}\) tokens

    \(\text{Var}(C_{day}) = 86400 \times 4.5 \times 10^{10} = 3.89 \times 10^{15}\)

    \(\sigma_{day} = 6.2 \times 10^{7}\) tokens

  3. 95% CI = \(\mu \pm 1.96\sigma = [1.70 \times 10^{10}, 1.94 \times 10^{10}]\) tokens

這個計算有什麼用?

預算規劃:日成本約 182 億 tokens,波動約 6.2 億(約 3.4%)。

換算成美元(假設 $0.01/1K tokens):日均 $182K,波動 $6.2K。

數學小結:中央極限定理 (CLT)

中央極限定理 是統計學最重要的定理之一:

無論原始分布是什麼,大量獨立同分布隨機變數的**和**近似 Normal 分布

\(X_1, X_2, \ldots, X_n\) iid,\(E[X_i] = \mu\)\(\text{Var}(X_i) = \sigma^2\),則:

\[\frac{\sum_{i=1}^n X_i - n\mu}{\sigma\sqrt{n}} \xrightarrow{d} N(0, 1) \quad \text{as } n \to \infty\]

實用形式\(\sum_{i=1}^n X_i \approx N(n\mu, n\sigma^2)\)

應用場景 原始分布 CLT 近似
日成本 複合 Poisson Normal
月成本 Normal 的和 Normal
請求數 Poisson Normal(當 \(\lambda\) 大)

(b) 月成本信賴區間

3 分大三

最終答案:月成本 \(C_{month} = \sum_{d=1}^{30} C_{day,d}\)

題目

  1. 計算 \(E[C_{month}]\)\(\sigma_{month}\)
  2. 給財務長一個「95% 信賴區間」的預算範圍
  3. 為什麼「月波動率」比「日波動率」小?
解答
  1. \(E[C_{month}] = 30 \times E[C_{day}] = 5.46 \times 10^{11}\) tokens

    \(\text{Var}(C_{month}) = 30 \times \text{Var}(C_{day})\)

    \(\sigma_{month} = \sqrt{30} \times \sigma_{day} = 3.4 \times 10^{8}\) tokens

  2. 95% CI = \([5.39 \times 10^{11}, 5.53 \times 10^{11}]\) tokens

    換算:月預算 $5.46M ± $67K(約 1.2% 波動)

  3. 波動率下降\(\frac{\sigma_{month}}{E[C_{month}]} = \frac{\sqrt{30} \sigma_{day}}{30 \cdot \mu_{day}} = \frac{1}{\sqrt{30}} \cdot \frac{\sigma_{day}}{\mu_{day}}\)

    月波動率 = 日波動率 / \(\sqrt{30}\) ≈ 日波動率 / 5.5

    這是「大數法則」的效果——平均後波動變小。

這個計算有什麼用?

回答財務長的問題:月成本約 $5.46M,95% 的月份落在 $5.39M 到 $5.53M 之間。

預算建議:設定預算為 $5.6M(上限 + 緩衝),超支機率 < 2.5%。


進階挑戰:為什麼財務喜歡 MAD?

3 分大二

財務長說:「標準差我懂,但能不能給我一個更直觀的『平均偏離預算多少』的數字?」

你想到:Mean Absolute Deviation (MAD) = \(E[|X - \mu|]\)

你需要知道:MAD 與標準差的數學關係

題目:假設月成本 \(C \sim N(\mu, \sigma^2)\)

  1. 利用 Normal 的對稱性,計算 \(E[|C - \mu|]\)
  2. 證明:對 Normal 分布,MAD \(= \sigma \sqrt{2/\pi} \approx 0.798\sigma\)
  3. \(\sigma = 1.2\) 億 tokens(約 $67K 美元),MAD 是多少?
  4. 給財務長一個直觀的說法:「平均每月偏離預算 ___ 萬美元」
  5. 討論:MAD vs 標準差,哪個對離群值更穩健?
解答

Step 1:計算 \(E[|C - \mu|]\)

\(Z = (C - \mu)/\sigma \sim N(0, 1)\),則 \(|C - \mu| = \sigma |Z|\)

\[E[|C - \mu|] = \sigma \cdot E[|Z|]\]

由對稱性,\(|Z|\) 相當於 \(Z\) 的絕對值(半常態分布):

\[E[|Z|] = 2 \int_0^\infty z \cdot \frac{1}{\sqrt{2\pi}} e^{-z^2/2} \, dz = \frac{2}{\sqrt{2\pi}} \int_0^\infty z e^{-z^2/2} \, dz\]

\(u = z^2/2\)\(du = z\,dz\)

\[= \frac{2}{\sqrt{2\pi}} \int_0^\infty e^{-u} \, du = \frac{2}{\sqrt{2\pi}} = \sqrt{\frac{2}{\pi}}\]

Step 2:MAD 公式

\[\text{MAD} = E[|C - \mu|] = \sigma \sqrt{\frac{2}{\pi}} \approx 0.798\sigma\]

Step 3:數值計算

\(\sigma = 1.2\) 億 tokens = $67K:

\[\text{MAD} = 0.798 \times 67K \approx \$53K\]

Step 4:給財務長的說法

「平均每月的實際成本偏離預算約 5.3 萬美元。」

(比「標準差 6.7 萬美元」更直觀!)

Step 5:穩健性比較

指標 對離群值的敏感度 解釋
標準差 高(平方放大) 一個極端值會大幅拉高
MAD 中等(絕對值) 受影響較小
中位數絕對離差 最穩健

財務喜歡 MAD 的原因: - 單位直觀(美元) - 偶爾的極端成本不會過度影響 - 與預算偏離的「平均感受」更貼近

數學小結:絕對離差

| 分布 | \(E[|X - \mu|]\) 公式 | |------|-------------------| | Normal | \(\sigma \sqrt{2/\pi} \approx 0.798\sigma\) | | Exponential | \(2/\lambda \cdot e^{-1} \approx 0.736 / \lambda\) | | Uniform(a,b) | \((b-a)/4\) |

用途: - 財務報表中的「平均偏離」 - 異常檢測中的穩健距離度量 - 比標準差更直觀的波動描述


第 4-5 題小結:你的成本分析工具箱

「為什麼帳單比預期高 5%?」
    ├─► 單次 token 數是隨機的
    │       └─► 工具:Exponential 分布
「取整計費造成多少損失?」
    ├─► 離散化後的分布
    │       └─► 工具:Geometric 分布(離散化 Exponential)
「每秒總成本怎麼算?」
    ├─► 隨機數量 × 隨機金額
    │       └─► 工具:複合 Poisson 分布、全期望/全變異
「日成本/月成本的分布?」
    ├─► 大量隨機變數的和
    │       └─► 工具:中央極限定理 → Normal 近似
「95% 信賴區間是多少?」
    └─► 工具:Normal 分位數計算

分布轉換鏈

Exponential (連續)
    │ 向上取整
Geometric (離散)
    │ 隨機數量累加
複合 Poisson
    │ 大量累加 (CLT)
Normal (近似)

第五部分:GPU 叢集與可靠性


場景:老闆的靈魂拷問

「需要幾張 A100?」老闆盯著你。

你正準備解釋「要看流量、模型大小、batch size...」,老闆揮揮手打斷:「假設尖峰 200 QPS,給我一個數字。還有,別忘了 GPU 會壞掉。」

你深吸一口氣。這個問題聽起來簡單,但背後藏著三個子問題:

  1. 一張 GPU 能處理多少請求?(會波動!)
  2. 需要多少張才能「保證」處理 200 QPS?
  3. 加上故障冗餘後,總共要幾張?

你的問題:如何用機率模型回答這些問題?


第 6 題:GPU 容量規劃

場景:老闆的靈魂拷問

「需要幾張 A100?」老闆盯著你。

「呃...要看流量...」你開始冒汗。

「假設尖峰 200 QPS,給我一個數字。還有,別忘了 GPU 會壞掉。」

在回答這個問題之前,你先要理解:請求是怎麼分配到各 GPU 的?


(a) 負載均衡的數學基礎

3 分大二

在討論單 GPU 處理能力之前,先來看請求是怎麼分配的。

你的負載均衡器使用「隨機分配」:每個請求獨立、**等機率**地分配到 \(m\) 張 GPU 之一。

你需要知道:Uniform 分布——「等機率」的數學表達

題目:假設在 10 分鐘的觀測窗口內,請求到達時間 \(U\) 均勻分布在 \([0, 10]\) 分鐘。

  1. 寫出 \(U\) 的 PDF、CDF、期望、變異數
  2. 求「前 5 分鐘到達的請求比例」的期望值
  3. \(n = 1000\) 個請求獨立到達,「前 5 分鐘到達的請求數」\(X\) 服從什麼分布?
  4. 計算 \(P(X > 550)\)(前半時間到達超過 55% 的請求)
解答

Step 1:Uniform 分布性質

\(U \sim \text{Uniform}(0, 10)\)

性質 公式 本題數值
PDF \(f(u) = \frac{1}{b-a} = \frac{1}{10}\) \(0 \leq u \leq 10\)
CDF \(F(u) = \frac{u-a}{b-a} = \frac{u}{10}\)
期望 \(E[U] = \frac{a+b}{2} = 5\) 分鐘
變異數 \(\text{Var}(U) = \frac{(b-a)^2}{12} = \frac{100}{12} \approx 8.33\)

Step 2:前 5 分鐘的機率

\(P(U \leq 5) = F(5) = \frac{5}{10} = 0.5\)

期望比例 = 50%

Step 3:前 5 分鐘到達的請求數

每個請求獨立,到達前 5 分鐘的機率是 0.5。

\(X \sim \text{Binomial}(1000, 0.5)\)

Step 4:計算 \(P(X > 550)\)

\(E[X] = 500\)\(\text{Var}(X) = 250\)\(\sigma = 15.81\)

\(P(X > 550) \approx P\left(Z > \frac{550 - 500}{15.81}\right) = P(Z > 3.16) \approx 0.0008\)

前半時間收到超過 55% 請求的機率只有 0.08%——負載很均衡!

這個計算有什麼用?

負載均衡評估:Uniform 分布意味著「隨機到達」,是理想情況。

實際中可能有: - 尖峰時段:到達不均勻 → 需要更多 buffer - 批次請求:某些時段集中 → 需要排隊機制

數學小結:Uniform 分布
性質 公式
PDF \(f(x) = \frac{1}{b-a}\)\(a \leq x \leq b\)
CDF \(F(x) = \frac{x-a}{b-a}\)
期望 \(E[X] = \frac{a+b}{2}\)
變異數 \(\text{Var}(X) = \frac{(b-a)^2}{12}\)

用途:建模「在區間內等機率」的隨機事件(到達時間、隨機分配)。


(b) 單 GPU 處理能力

3 分大二

第一個子問題:一張 GPU 每秒能處理多少請求?

直覺上你可能會說「50 QPS」,但實際情況是:有時候 45,有時候 55——因為每個請求的複雜度不同、GPU 排程也有隨機性。

你需要知道:如何建模「會波動」的處理能力?

假設每張 GPU 每秒能處理的請求數 \(C_i\) 服從 Poisson 分布,\(C_i \sim \text{Pois}(\mu)\)\(\mu = 50\) QPS。

題目

  1. 為什麼用 Poisson 建模處理能力?
  2. 計算 \(P(C_i < 40)\)(某秒處理能力不足 40 的機率)
  3. 若有 \(m\) 張 GPU,總處理能力 \(C = \sum_{i=1}^m C_i\) 服從什麼分布?
解答
  1. Poisson 的合理性

    • 處理能力受隨機因素影響(請求複雜度、排隊、快取)
    • 期望 = 變異數符合「適度波動」的特性
    • 處理事件可視為「單位時間內完成的獨立任務數」
  2. \(C_i \sim \text{Pois}(50)\),常態近似 \(C_i \approx N(50, 50)\)

    \(P(C_i < 40) \approx \Phi\left(\frac{39.5 - 50}{\sqrt{50}}\right) = \Phi(-1.48) \approx 0.069\)

  3. Poisson 可加性\(C = \sum_{i=1}^m C_i \sim \text{Pois}(m\mu) = \text{Pois}(50m)\)

這個計算有什麼用?

評估單 GPU 風險:即使平均 50 QPS,約 7% 的時間處理能力會低於 40。

多 GPU 的好處:加 GPU 不只是線性增加容量,還能降低波動的相對影響。

數學小結:Poisson 分布的可加性

Poisson 分布 有一個重要性質:獨立 Poisson 的和仍是 Poisson。

\(X_1 \sim \text{Pois}(\lambda_1)\)\(X_2 \sim \text{Pois}(\lambda_2)\),且獨立,則:

\[X_1 + X_2 \sim \text{Pois}(\lambda_1 + \lambda_2)\]
性質 公式
可加性 \(\sum_{i=1}^m \text{Pois}(\lambda_i) = \text{Pois}\left(\sum_{i=1}^m \lambda_i\right)\)
期望 \(E[X_1 + X_2] = \lambda_1 + \lambda_2\)
變異數 \(\text{Var}(X_1 + X_2) = \lambda_1 + \lambda_2\)

這讓 \(m\) 張 GPU 的總處理能力計算變得簡單。

進階:Poisson MGF 可加性

2 分大三

上面說「獨立 Poisson 的和仍是 Poisson」,但這真的對嗎?

你需要知道:如何嚴格證明這個性質?

題目:使用動差生成函數(MGF)證明:若 \(C_i \sim \text{Pois}(\mu)\) 獨立,則 \(C = \sum_{i=1}^m C_i \sim \text{Pois}(m\mu)\)

證明

Step 1:Poisson 分布的 MGF

\(X \sim \text{Pois}(\lambda)\),其 MGF 為:

\[M_X(t) = E[e^{tX}] = \sum_{k=0}^\infty e^{tk} \frac{\lambda^k e^{-\lambda}}{k!} = e^{-\lambda} \sum_{k=0}^\infty \frac{(\lambda e^t)^k}{k!} = e^{-\lambda} \cdot e^{\lambda e^t} = e^{\lambda(e^t - 1)}\]

Step 2:利用獨立性

對於獨立隨機變數,和的 MGF = 各自 MGF 的乘積:

\[M_C(t) = \prod_{i=1}^m M_{C_i}(t) = \prod_{i=1}^m e^{\mu(e^t - 1)} = \left[e^{\mu(e^t - 1)}\right]^m = e^{m\mu(e^t - 1)}\]

Step 3:識別分布

\(e^{m\mu(e^t - 1)}\) 正是 \(\text{Pois}(m\mu)\) 的 MGF。

由 MGF 唯一決定分布,故 \(C \sim \text{Pois}(m\mu)\)\(\square\)

這個證明有什麼用?

MGF 技巧的威力:不用做複雜的卷積計算,只需相乘 MGF 再識別分布。

容量規劃的保證:5 張 GPU 的總處理能力 \(\sim \text{Pois}(250)\),可以直接套用單一 Poisson 的性質。


© GPU 數量計算

4 分大三

第二個子問題:知道了單 GPU 的處理能力分布,接下來要回答老闆的核心問題。

直覺上,200 QPS 需要 \(200/50 = 4\) 張 GPU。但這忽略了波動!

你需要知道:需要多少「餘裕」才能以高機率滿足需求?

題目

  1. 設需求為 \(P(C \geq 200) \geq 0.99\),推導 \(m\) 的下界
  2. 求滿足條件的最小 \(m\)
  3. 說明為什麼不能剛好用 4 張(\(4 \times 50 = 200\)
解答
  1. \(C \sim \text{Pois}(50m)\),常態近似 \(C \approx N(50m, 50m)\)

    需要 \(P(C < 200) \leq 0.01\)

    \[\Phi\left(\frac{200 - 50m}{\sqrt{50m}}\right) \leq 0.01\]
    \[\frac{200 - 50m}{\sqrt{50m}} \leq -2.33\]
  2. 解不等式:\(200 - 50m \leq -2.33\sqrt{50m}\)

    \(x = \sqrt{m}\)\(200 - 50x^2 \leq -2.33\sqrt{50} \cdot x\)

    \(50x^2 - 16.5x - 200 \geq 0\)

    解得 \(x \geq 2.13\),即 \(m \geq 4.54\)

    最小 \(m = 5\) 張 GPU

  3. 為什麼不能用 4 張

    \(m = 4\) 時,\(C \sim \text{Pois}(200)\)\(P(C < 200) \approx 0.5\)

    一半時間處理能力不足!需要餘裕來應對波動。

這個計算有什麼用?

回答老闆的第一個問題:需要 5 張 GPU,不是 4 張。

一般化公式:要以 \(1-\alpha\) 機率滿足需求 \(D\),需要:

\[m \geq \frac{D}{\mu} + \frac{z_\alpha^2}{2\mu} + z_\alpha \sqrt{\frac{D}{\mu} + \frac{z_\alpha^2}{4\mu^2}}\]

其中 \(z_\alpha\) 是標準常態的 \(\alpha\) 分位數。

可靠性目標 \(z_\alpha\) 需要的 GPU
90% 1.28 5
99% 2.33 5
99.9% 3.09 6

(d) 故障冗餘設計

4 分碩一

第三個子問題:老闆補了一句「別忘了 GPU 會壞掉」。

如果 5 張 GPU 中有 1 張故障,剩下 4 張的處理能力平均只有 200 QPS——回到「一半時間不夠」的窘境。

你需要知道:考慮故障後,需要多少張才能「幾乎肯定」有足夠的正常 GPU?

題目

\(F\) 為故障 GPU 數量,每張獨立以機率 \(p_f = 0.05\) 故障。

  1. 證明 \(F \sim B(m, p_f)\)
  2. 若要「以 99.9% 機率至少有 5 張正常運作」,求最小 \(m\)
  3. 說明「N+K 冗餘」策略的數學依據
解答
  1. 每張 GPU 獨立以機率 \(p_f\) 故障,故 \(F \sim B(m, p_f)\)

  2. 需要 \(P(F \leq m - 5) \geq 0.999\)

    \(m = 6\)\(P(F \leq 1) = (0.95)^6 + 6(0.05)(0.95)^5 = 0.967\)

    \(m = 7\)\(P(F \leq 2) = \sum_{k=0}^{2} \binom{7}{k}(0.05)^k(0.95)^{7-k} = 0.996\)

    \(m = 8\)\(P(F \leq 3) = 0.9998\)

    最小 \(m = 8\) 張 GPU

  3. N+K 冗餘:需要 N=5 張,實際配置 N+3=8 張。

    冗餘 K=3 張能容忍最多 3 張同時故障。

    一般而言,K 滿足 \(P(F \leq K) \geq 1 - \alpha\)

這個計算有什麼用?

最終回答老闆:「需要 8 張 A100。」

計算階段 結果 說明
理想情況 4 張 \(200 / 50 = 4\)
考慮波動 5 張 99% 可靠性
考慮故障 8 張 99.9% 可用性

冗餘成本:多 3 張 GPU 換取 99.9% 可用性,值不值得由業務決定。

數學小結:Binomial 分布的可靠性應用

可靠性工程 中常用 Binomial 分布建模「\(m\) 個元件中有幾個故障」。

若每個元件獨立以機率 \(p_f\) 故障,故障數 \(F \sim B(m, p_f)\)

概念 公式
系統可用 \(P(\text{正常} \geq N) = P(F \leq m - N)\)
N+K 冗餘 配置 \(m = N + K\) 個元件
所需冗餘 K \(P(F \leq K) \geq 1 - \alpha\) 的最小 K

常見冗餘策略: - N+1:容忍 1 個故障(適用低故障率) - N+2:容忍 2 個故障(生產環境常用) - 2N:完全備援(關鍵系統)


第 6 題小結:你的容量規劃工具箱

「需要幾張 GPU?」
    ├─► 問題 1:單 GPU 處理能力如何?
    │       └─► 工具:Poisson 分布(建模波動)
「平均 50 QPS,但會波動」
    ├─► 問題 2:需要多少張才能「保證」200 QPS?
    │       └─► 工具:Poisson 可加性 + 常態近似
「需要 5 張(不是 4 張!)」
    ├─► 問題 3:考慮故障冗餘呢?
    │       └─► 工具:Binomial 分布(故障計數)
「最終答案:8 張 GPU」

教訓

  • 「平均值」騙人——波動很重要
  • 4 張變 5 張:應對 隨機波動(+25%)
  • 5 張變 8 張:應對 故障冗餘(+60%)
  • 實際配置 = 理想配置 × 2

第六部分:進階主題


第 7 題:二元常態與相關性分析

場景:奇怪的相關性

你在 Grafana 上盯著兩條曲線——響應時間和錯誤率。

「奇怪,每次響應時間飆高的時候,錯誤率也跟著上升...」你喃喃自語。

同事湊過來:「這是巧合嗎?還是有因果關係?」

你想了想:「不一定是因果,但可能有**相關性**。如果能量化這個關係,也許可以用響應時間來**預警**錯誤率即將超標。」

你的問題:響應時間和錯誤率之間,有沒有數學上可量化的關聯?能不能用一個來預測另一個?


(a) 相關係數估計

3 分大三

第一個問題:如何量化「兩個變數一起變動」的程度?

你需要知道:描述兩個變數聯合分布的數學工具

假設某時段的(平均響應時間 \(X\), 錯誤率 \(Y\))服從二元常態分布。

題目

  1. 寫出二元常態的聯合 PDF
  2. \(n = 100\) 組觀測計算樣本相關係數 \(\hat{\rho}\)
  3. 說明 \(\rho = 0\) 與「\(X\)\(Y\) 獨立」的關係
解答
  1. 聯合 PDF:

    \[f_{X,Y}(x,y) = \frac{1}{2\pi\sigma_X\sigma_Y\sqrt{1-\rho^2}} \exp\left(-\frac{Q}{2(1-\rho^2)}\right)\]

    其中 \(Q = \left(\frac{x-\mu_X}{\sigma_X}\right)^2 - 2\rho\left(\frac{x-\mu_X}{\sigma_X}\right)\left(\frac{y-\mu_Y}{\sigma_Y}\right) + \left(\frac{y-\mu_Y}{\sigma_Y}\right)^2\)

  2. 樣本相關係數:

    \[\hat{\rho} = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum(x_i-\bar{x})^2 \sum(y_i-\bar{y})^2}}\]
  3. 二元常態特殊性質\(\rho = 0\) 等價於 \(X \perp Y\)

    (對一般分布,\(\rho = 0\) 只表示「線性無關」,不一定獨立)

這個計算有什麼用?

量化觀察:你的直覺「響應時間高時錯誤率也高」可以用 \(\rho\) 來量化。

  • \(\rho > 0\):正相關——一個高,另一個也傾向高
  • \(\rho < 0\):負相關——一個高,另一個傾向低
  • \(|\rho|\) 越接近 1:關聯越強

計算出 \(\hat{\rho} = 0.6\),說明有中等程度的正相關。

數學小結:你剛才發現了二元 Normal 分布

當兩個變數有線性相關性時,可以用 二元 Normal 分布 建模。

性質 公式
邊際分布 \(X \sim N(\mu_X, \sigma_X^2)\)\(Y \sim N(\mu_Y, \sigma_Y^2)\)
相關係數 \(\rho = \frac{\text{Cov}(X,Y)}{\sigma_X \sigma_Y}\)\(-1 \leq \rho \leq 1\)
獨立性 二元常態下,\(\rho = 0 \Leftrightarrow X \perp Y\)

重要性質:二元常態的邊際分布和條件分布都是常態!


進階挑戰:ρ = 0 就代表獨立嗎?

4 分大三

你算出響應時間 \(X\) 和錯誤率 \(Y\) 的相關係數 \(\rho \approx 0\)。同事說:「太好了,它們獨立!」

但你猶豫了...

你需要知道\(\rho = 0\) 只表示「線性無關」,不一定獨立!

題目:考慮 \((X, Y)\) 的聯合 PDF: $\(f(x, y) = \begin{cases} \frac{1}{\pi} & \text{if } x^2 + y^2 \leq 1 \\ 0 & \text{otherwise} \end{cases}\)$ (均勻分布在單位圓盤上)

  1. 求邊際分布 \(f_X(x)\)
  2. 計算 \(\text{Cov}(X, Y)\),驗證 \(\rho = 0\)
  3. 判斷 \(X\)\(Y\) 是否獨立(檢驗 \(f(x,y) = f_X(x) f_Y(y)\)
提示
  1. 邊際分布:對 \(y\) 積分,積分範圍是 \([-\sqrt{1-x^2}, \sqrt{1-x^2}]\)
  2. 利用圓的對稱性:\(E[X] = E[Y] = 0\)\(E[XY] = ?\)
  3. 獨立性:取一個具體的點 \((0.5, 0.5)\),比較 \(f(0.5, 0.5)\)\(f_X(0.5) \cdot f_Y(0.5)\)
解答

Step 1:邊際分布

\[f_X(x) = \int_{-\sqrt{1-x^2}}^{\sqrt{1-x^2}} \frac{1}{\pi} \, dy = \frac{2\sqrt{1-x^2}}{\pi}, \quad -1 \leq x \leq 1\]

同理 \(f_Y(y) = \frac{2\sqrt{1-y^2}}{\pi}\)

Step 2:計算 Cov(X, Y)

由對稱性,\(E[X] = E[Y] = 0\)

\[\text{Cov}(X, Y) = E[XY] - E[X]E[Y] = E[XY]\]
\[E[XY] = \iint_{x^2+y^2 \leq 1} xy \cdot \frac{1}{\pi} \, dx \, dy\]

由圓的對稱性,\(E[XY] = 0\)(被積函數 \(xy\) 關於原點反對稱)

所以 \(\rho = 0\)

Step 3:獨立性判斷

如果獨立,則 \(f(x,y) = f_X(x) \cdot f_Y(y) = \frac{4\sqrt{(1-x^2)(1-y^2)}}{\pi^2}\)

在點 \((0.5, 0.5)\): - 實際:\(f(0.5, 0.5) = \frac{1}{\pi} \approx 0.318\)(因為 \(0.5^2 + 0.5^2 = 0.5 < 1\)) - 假設獨立:\(f_X(0.5) \cdot f_Y(0.5) = \frac{4 \times 0.866 \times 0.866}{\pi^2} \approx 0.304\)

\(0.318 \neq 0.304\)不獨立

這個計算有什麼用?

考試必考:「不相關」和「獨立」的區別是經典考點。

  • 不相關\(\rho = 0\)):只說明沒有 線性 關係
  • 獨立:完全沒有任何關係(\(f(x,y) = f_X(x) f_Y(y)\)

獨立 \(\Rightarrow\) 不相關,但 不相關 \(\not\Rightarrow\) 獨立

數學小結:獨立性 vs 不相關
性質 符號 含義 條件
獨立 \(X \perp Y\) \(f(x,y) = f_X(x)f_Y(y)\) 強條件
不相關 \(\rho = 0\) \(\text{Cov}(X,Y) = 0\) 弱條件
關係 獨立 → 不相關 但反之不成立
例外 二元常態下:\(\rho = 0 \Leftrightarrow\) 獨立 特殊!

(b) 條件分布預警

4 分碩一

更進一步的問題:知道 \(\rho = 0.6\),那**如果知道響應時間,能預測錯誤率嗎**?

這就是「條件期望」的應用——用已知資訊縮小不確定性。

你需要知道:給定 \(X = x\) 時,\(Y\) 的條件分布

題目

  1. 推導 \(Y | X = x\) 的條件分布
  2. \(\rho = 0.6\)\(\mu_X = 2\)s,\(\sigma_X = 0.3\)s,\(\mu_Y = 0.05\)\(\sigma_Y = 0.01\),當 \(X = 3\)s 時,預測 \(E[Y|X=3]\)
  3. 設計預警規則:響應時間超過多少時,預期錯誤率會超過 10%?
解答
  1. 二元常態的條件分布:

    \[Y | X = x \sim N\left(\mu_Y + \rho \frac{\sigma_Y}{\sigma_X}(x - \mu_X), \sigma_Y^2(1-\rho^2)\right)\]

    條件期望是 \(x\) 的**線性函數**!

  2. \(E[Y|X=3] = 0.05 + 0.6 \times \frac{0.01}{0.3} \times (3 - 2) = 0.05 + 0.02 = 0.07\)

    預期錯誤率 7%

  3. \(E[Y|X=x_0] = 0.10\)

    \(0.05 + 0.6 \times \frac{0.01}{0.3} \times (x_0 - 2) = 0.10\)

    \(0.02(x_0 - 2) = 0.05\)

    \(x_0 = 4.5\)

    預警規則:當響應時間 > 4.5 秒,預警錯誤率可能超標。

這個計算有什麼用?

建立預警系統

  • 不用等到錯誤率真的超標才告警
  • 當響應時間飆高時,就可以**提前預警**

比直接監控更早:響應時間異常通常比錯誤率上升更早發生(因為系統先變慢,然後才開始超時失敗)。

響應時間 預期錯誤率 動作
2s(正常) 5% 正常
3s 7% 注意
4.5s 10% 預警
6s 13% 告警

進階挑戰:推導二元常態的條件分布

4 分大三

「你怎麼知道 \(Y|X\) 是常態分布?能推導嗎?」

你需要知道:從聯合 PDF 推導條件 PDF 的完整過程

題目:設 \((X, Y)\) 服從二元常態,聯合 PDF 為: $\(f(x,y) = \frac{1}{2\pi\sigma_X\sigma_Y\sqrt{1-\rho^2}} \exp\left(-\frac{Q}{2(1-\rho^2)}\right)\)$ 其中 $\(Q = \frac{(x-\mu_X)^2}{\sigma_X^2} - 2\rho\frac{(x-\mu_X)(y-\mu_Y)}{\sigma_X\sigma_Y} + \frac{(y-\mu_Y)^2}{\sigma_Y^2}\)$

  1. 求邊際分布 \(f_X(x)\)(提示:對 \(y\) 積分,配方)
  2. 求條件 PDF \(f_{Y|X}(y|x) = \frac{f(x,y)}{f_X(x)}\)
  3. 識別 \(Y|X=x\) 的分布(期望、變異數)
提示
  1. 邊際分布的積分用 Gaussian 積分公式:\(\int_{-\infty}^{\infty} e^{-ax^2} dx = \sqrt{\pi/a}\)
  2. 條件 PDF 的計算:把 \(Q\) 中關於 \(y\) 的部分配方成 \((y - \text{某個函數})^2\) 的形式
  3. 觀察指數裡的形式,識別出 Normal 分布
解答

Step 1:邊際分布(略證)

\(y\) 積分,利用 Gaussian 積分公式: $\(f_X(x) = \frac{1}{\sqrt{2\pi}\sigma_X} \exp\left(-\frac{(x-\mu_X)^2}{2\sigma_X^2}\right)\)$ 即 \(X \sim N(\mu_X, \sigma_X^2)\)

Step 2:條件 PDF

\[f_{Y|X}(y|x) = \frac{f(x,y)}{f_X(x)}\]

\(Q\) 中關於 \(y\) 的部分配方: $\(Q = \left(\frac{y - \mu_Y - \rho\frac{\sigma_Y}{\sigma_X}(x-\mu_X)}{\sigma_Y\sqrt{1-\rho^2}}\right)^2 + \text{(與 } y \text{ 無關的項)}\)$

Step 3:識別分布

\[Y|X=x \sim N\left(\mu_Y + \rho\frac{\sigma_Y}{\sigma_X}(x-\mu_X), \; \sigma_Y^2(1-\rho^2)\right)\]
  • 條件期望:\(E[Y|X=x] = \mu_Y + \rho\frac{\sigma_Y}{\sigma_X}(x-\mu_X)\)
  • 條件變異數:\(\text{Var}(Y|X) = \sigma_Y^2(1-\rho^2)\)(與 \(x\) 無關!)
這個推導有什麼用?

考試必考:二元常態的條件分布是經典題型。

記憶技巧: - 條件期望是 \(X\)線性函數(斜率 = \(\rho\sigma_Y/\sigma_X\)) - 條件變異數是 常數(不依賴 \(X\)) - \(|\rho|\) 越大 → 條件變異數越小 → 預測越準

數學小結:二元常態的條件分布
性質 公式
條件分布 \(Y \mid X=x \sim N(\mu_{Y \mid X}, \sigma_{Y \mid X}^2)\)
條件期望 \(\mu_{Y \mid X} = \mu_Y + \rho\frac{\sigma_Y}{\sigma_X}(x - \mu_X)\)
條件變異數 \(\sigma_{Y \mid X}^2 = \sigma_Y^2(1 - \rho^2)\)

幾何意義: - 條件期望是 迴歸線\(E[Y \mid X=x] = a + bx\) - 條件變異數是 殘差變異:預測誤差的大小


第 7 題小結:你的相關性分析工具箱

「響應時間高時,錯誤率也高?」
    ├─► 問題 1:如何量化這個關聯?
    │       └─► 工具:相關係數 ρ(二元 Normal)
「ρ = 0.6,中等正相關」
    ├─► 問題 2:能用響應時間預測錯誤率嗎?
    │       └─► 工具:條件期望 E[Y|X=x]
「當 X > 4.5s,預期錯誤率 > 10%」
    └─► 應用:比直接監控更早的預警系統

第 8 題:故障類型診斷

場景:告警響了,然後呢?

凌晨四點,你的告警系統響了——失敗率異常升高。

「知道了,系統出問題。」你揉揉眼睛,「但問題是:到底是哪裡出問題?

失敗有很多種:

  • GPU 記憶體不足(OOM)
  • 推論超時
  • 模型載入錯誤
  • 其他錯誤

不同的故障原因,需要不同的處理方式。 如果是 OOM,要檢查 batch size;如果是超時,要檢查負載;如果是載入錯誤,要檢查模型伺服器。

你的問題:如何從失敗類型的「分布」中找線索?


(a) 失敗類型分布

3 分大三

第一個問題:正常情況下,不同類型的失敗各佔多少比例?

你需要知道:多種類別的機率模型

歷史數據顯示,正常狀態下的失敗類型分布為:

類型 機率
GPU OOM \(p_1 = 0.40\)
超時 \(p_2 = 0.35\)
載入錯誤 \(p_3 = 0.15\)
其他 \(p_4 = 0.10\)

題目

  1. 若觀察 \(n = 100\) 次失敗,令 \((X_1, X_2, X_3, X_4)\) 為各類型的計數。寫出聯合 PMF
  2. 計算 \(E[X_1]\)\(\text{Var}(X_1)\)
  3. 證明 \(\text{Cov}(X_i, X_j) = -n p_i p_j\)\(i \neq j\)
解答
  1. 聯合 PMF(多項分布):

    \[P(X_1=x_1, \ldots, X_4=x_4) = \frac{n!}{x_1! x_2! x_3! x_4!} p_1^{x_1} p_2^{x_2} p_3^{x_3} p_4^{x_4}\]

    其中 \(x_1 + x_2 + x_3 + x_4 = n\)

  2. \(E[X_1] = np_1 = 100 \times 0.4 = 40\)

    \(\text{Var}(X_1) = np_1(1-p_1) = 100 \times 0.4 \times 0.6 = 24\)

  3. \(\text{Cov}(X_i, X_j) = E[X_i X_j] - E[X_i]E[X_j]\)

    由於 \(X_i + X_j \leq n\),增加 \(X_i\) 會減少 \(X_j\) 的「空間」,所以:

    \(\text{Cov}(X_i, X_j) = -n p_i p_j < 0\)(負相關)

這個計算有什麼用?

建立基準線:正常時 OOM 約 40 次、超時約 35 次...

理解約束:各類別計數是**負相關**的——一種變多,其他種必然變少。

數學小結:你剛才發現了 Multinomial 分布

Multinomial 分布 是 Binomial 的多類別推廣。

性質 公式
PMF \(\frac{n!}{\prod x_i!} \prod p_i^{x_i}\)
邊際分布 \(X_i \sim B(n, p_i)\)
期望 \(E[X_i] = np_i\)
變異數 \(\text{Var}(X_i) = np_i(1-p_i)\)
共變異數 \(\text{Cov}(X_i, X_j) = -np_i p_j\)\(i \neq j\)

(b) 分布變化檢定

4 分大三

新的問題:現在觀察到 \(n = 100\) 次失敗,分布為 \((55, 25, 12, 8)\)

這跟歷史分布 \((40, 35, 15, 10)\) 不一樣——但這是**正常波動**還是**真的變了**?

你需要知道:如何判斷觀察值與期望值的差異是否「顯著」

題目

  1. 計算卡方統計量 \(\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}\)
  2. \(\alpha = 0.05\) 下,判斷分布是否顯著改變
  3. 說明卡方檢定的適用條件
解答
  1. 計算各類別的貢獻:

    類型 期望 \(E_i\) 觀測 \(O_i\) \((O-E)^2/E\)
    OOM 40 55 \(15^2/40 = 5.63\)
    超時 35 25 \(10^2/35 = 2.86\)
    載入 15 12 \(3^2/15 = 0.60\)
    其他 10 8 \(2^2/10 = 0.40\)

    \(\chi^2 = 5.63 + 2.86 + 0.60 + 0.40 = 9.49\)

  2. \(df = k - 1 = 4 - 1 = 3\)

    臨界值 \(\chi^2_{0.05,3} = 7.81\)

    \(9.49 > 7.81\)拒絕 \(H_0\):分布顯著改變(p < 0.05)

  3. 適用條件:所有 \(E_i \geq 5\)(本例滿足)

這個計算有什麼用?

統計顯著性:不是「看起來不一樣」,而是「統計上顯著不一樣」。

結論:失敗類型的分布**確實改變了**,不是隨機波動。

數學小結:卡方適合度檢定

卡方檢定 用於比較觀測分布與期望分布。

概念 說明
虛無假設 \(H_0\): 觀測來自期望分布
統計量 \(\chi^2 = \sum \frac{(O_i - E_i)^2}{E_i}\)
自由度 \(df = k - 1\)\(k\) 是類別數)
拒絕域 \(\chi^2 > \chi^2_{\alpha, df}\)

\(H_0\) 為真時,\(\chi^2 \sim \chi^2(df)\)


© 異常類別定位

3 分大三

進一步追問:知道分布變了,但**具體是哪個類型異常**?

你需要知道:逐類別分析卡方統計量的貢獻

題目

  1. 根據 (b) 的結果,找出貢獻最大的類別
  2. 判斷該類別是「變多」還是「變少」
  3. 給出故障診斷建議
解答
  1. 各類別對 \(\chi^2\) 的貢獻:

    • OOM: 5.63(最大!)
    • 超時: 2.86
    • 載入: 0.60
    • 其他: 0.40
  2. OOM:觀測 55 > 期望 40,變多

    超時:觀測 25 < 期望 35,變少

  3. 診斷結論:GPU OOM 異常增多

    行動建議: - 檢查 GPU 記憶體配置 - 是否有 batch size 過大的請求 - 是否有記憶體洩漏

這個計算有什麼用?

定位問題:不只知道「有問題」,還知道「問題在哪」。

優先級:貢獻越大的類別,越需要優先處理。


(d) 序貫分析 SPRT

4 分碩一

新的需求:上面的方法需要等到累積 \(n = 100\) 次觀測才能判斷。

能不能「一邊觀測一邊判斷」,更快發現問題?

你需要知道:序貫機率比檢定 (SPRT)

題目

假設要檢測 OOM 比例是否從 \(p_0 = 0.4\) 升高到 \(p_1 = 0.5\)

  1. 定義對數似然比 \(\Lambda_n = \sum_{i=1}^{n} \log \frac{P(X_i | p_1)}{P(X_i | p_0)}\)
  2. 設定停止邊界 \(A, B\) 使得 \(\alpha \leq 0.05\)\(\beta \leq 0.10\)
  3. 比較 SPRT 與固定樣本檢定的期望樣本量
提示

SPRT 的停止規則:當 \(\Lambda_n \geq A\) 時接受 \(H_1\),當 \(\Lambda_n \leq B\) 時接受 \(H_0\)

解答
  1. 對於 Bernoulli 觀測(OOM = 1,非 OOM = 0):

    \[\Lambda_n = \sum_{i=1}^{n} X_i \log\frac{p_1}{p_0} + (1-X_i)\log\frac{1-p_1}{1-p_0}\]
    \[= S_n \log\frac{0.5}{0.4} + (n - S_n)\log\frac{0.5}{0.6}\]

    其中 \(S_n = \sum_{i=1}^n X_i\) 是 OOM 的累積計數。

  2. Wald 邊界:

    \[A = \log\frac{1-\beta}{\alpha} = \log\frac{0.9}{0.05} \approx 2.89\]
    \[B = \log\frac{\beta}{1-\alpha} = \log\frac{0.1}{0.95} \approx -2.25\]
  3. 期望樣本量:

    \(H_0\) 下(\(p = 0.4\)):\(E_0[N] \approx 45\)

    \(H_1\) 下(\(p = 0.5\)):\(E_1[N] \approx 35\)

    比固定樣本(\(n = 100\))少約 50-65%!

這個計算有什麼用?

更快發現異常

方法 需要觀測數 優點
固定樣本 100 簡單
SPRT ~40 快 60%

實際應用:在高頻監控中,SPRT 可以更早發出告警。

數學小結:序貫機率比檢定 (SPRT)

SPRT(Sequential Probability Ratio Test)是 Wald 在二戰期間發明的,用於品質管制。

概念 說明
核心思想 「邊觀測邊決策」,不用等到固定樣本量
統計量 對數似然比 \(\Lambda_n\)
停止規則 \(\Lambda_n \geq A\) 接受 \(H_1\)\(\Lambda_n \leq B\) 接受 \(H_0\)
優點 期望樣本量比固定樣本少 30-50%
缺點 樣本量是隨機的,可能很長

在 SRE 場景中,SPRT 特別適合**持續監控**——不用等到累積夠多數據才判斷。


第 8 題小結:你的故障診斷工具箱

「告警響了,哪裡出問題?」
    ├─► 問題 1:失敗類型的「正常分布」是什麼?
    │       └─► 工具:Multinomial 分布
「OOM 40%、超時 35%、...」
    ├─► 問題 2:現在的分布是否「異常」?
    │       └─► 工具:卡方適合度檢定
「χ² = 9.49 > 7.81,分布顯著改變!」
    ├─► 問題 3:具體是哪個類型變多了?
    │       └─► 工具:逐類別貢獻分析
「OOM 貢獻最大(5.63)→ 檢查 GPU 記憶體」
    ├─► 問題 4:能不能更快發現問題?
    │       └─► 工具:SPRT 序貫分析
「從 100 次觀測減少到 ~40 次」

第 9 題:延遲與 Token 的聯合分析

場景:PM 的追問

「等等,」PM 皺著眉頭看著儀表板,「響應時間長的請求,是不是 token 也比較多?」

你想了想:「對,輸出越長,當然需要越多時間。」

「那你能量化這個關係嗎?我想知道:如果一個請求已經跑了 3 秒,預期它會輸出多少 token?」

你意識到這不是獨立的兩個變數——延遲 T 和相對 Token 數 N 有某種聯合分布。 而且這個分布的支撐區域不是矩形:N 越大,T 通常越大。

核心問題:如何處理「非矩形區域」的聯合分布?如何從一個變數預測另一個?


(a) 非矩形區域的邊際 PDF

4 分大三

假設延遲 T(秒)和相對 Token 數 N(歸一化到 0-1)的聯合 PDF 為:

\[f_{T,N}(t, n) = 2e^{-t}, \quad 0 \leq n \leq 1 - e^{-t}, \; t \geq 0\]

直覺:\(t\) 越大,\(n\) 的可能範圍越大(上界 \(1 - e^{-t}\) 趨近 1),表示「跑越久,token 可以越多」。

你需要知道:如何在非矩形區域求邊際分布?

題目

  1. 畫出支撐區域(\(t\)-\(n\) 平面上哪些點有機率密度)
  2. 驗證這是有效的 PDF:\(\iint f(t,n) \, dn\, dt = 1\)
  3. 求邊際 PDF \(f_T(t)\)(對 \(n\) 積分)
  4. 求邊際 PDF \(f_N(n)\)關鍵:積分範圍是 \(t \geq -\ln(1-n)\)
解答

Step 1:支撐區域

\[\{(t, n) : t \geq 0, \; 0 \leq n \leq 1 - e^{-t}\}\]

這是一個由 \(n = 0\)(下界)、\(n = 1 - e^{-t}\)(上界曲線)和 \(t = 0\)(左邊界)圍成的區域。 當 \(t \to \infty\) 時,上界趨近 \(n = 1\)

Step 2:驗證 PDF

\[\int_0^\infty \int_0^{1-e^{-t}} 2e^{-t} \, dn \, dt = \int_0^\infty 2e^{-t} (1 - e^{-t}) \, dt\]
\[= 2\int_0^\infty (e^{-t} - e^{-2t}) \, dt = 2\left[1 - \frac{1}{2}\right] = 1 \quad \checkmark\]

Step 3:邊際 PDF \(f_T(t)\)

\[f_T(t) = \int_0^{1-e^{-t}} 2e^{-t} \, dn = 2e^{-t}(1 - e^{-t}), \quad t \geq 0\]

Step 4:邊際 PDF \(f_N(n)\)

給定 \(n\)\(t\) 的範圍是 \(t \geq -\ln(1-n)\)(從 \(n \leq 1 - e^{-t}\) 反解):

\[f_N(n) = \int_{-\ln(1-n)}^{\infty} 2e^{-t} \, dt = 2e^{\ln(1-n)} = 2(1-n), \quad 0 \leq n < 1\]

這是一個**線性遞減**的 PDF,說明小 token 數更常見。

這個計算有什麼用?

非矩形區域的關鍵:求 \(f_N(n)\) 時,積分下界是 \(n\) 的函數!

考試技巧: 1. 先畫支撐區域 2. 確定「給定一個變數,另一個變數的範圍」 3. 積分範圍可能是變數的函數


(b) 條件分布與預測

4 分大三

PM 追問:「如果我看到一個請求已經跑了 \(t\) 秒,預期的 token 數是多少?」

你需要知道:條件 PDF 和條件期望

題目

  1. 求條件 PDF \(f_{N|T}(n|t)\)
  2. 計算 \(E[N|T=t]\)
  3. 若請求已經跑了 3 秒,預期的相對 Token 數是多少?
  4. 比較 \(E[N|T=1]\)\(E[N|T=5]\),驗證「跑越久,token 越多」
解答

Step 1:條件 PDF

\[f_{N|T}(n|t) = \frac{f_{T,N}(t, n)}{f_T(t)} = \frac{2e^{-t}}{2e^{-t}(1-e^{-t})} = \frac{1}{1-e^{-t}}, \quad 0 \leq n \leq 1-e^{-t}\]

這是 \([0, 1-e^{-t}]\) 上的**均勻分布**!

Step 2:條件期望

因為 \(N|T=t \sim \text{Uniform}(0, 1-e^{-t})\)

\[E[N|T=t] = \frac{0 + (1-e^{-t})}{2} = \frac{1-e^{-t}}{2}\]

Step 3:T = 3 秒

\[E[N|T=3] = \frac{1 - e^{-3}}{2} = \frac{1 - 0.05}{2} = 0.475\]

預期相對 token 數約 47.5%。

Step 4:比較

  • \(E[N|T=1] = \frac{1-e^{-1}}{2} = \frac{0.632}{2} = 0.316\)
  • \(E[N|T=5] = \frac{1-e^{-5}}{2} = \frac{0.993}{2} = 0.497\)

確實「跑越久,token 越多」。

這個計算有什麼用?

實務應用

延遲 (秒) 預期 Token 比例 說明
1 31.6% 快速回應,輸出較短
3 47.5% 中等
5 49.7% 接近上限

預測公式\(E[N|T=t] = \frac{1-e^{-t}}{2}\)


© 變數變換:效率指標

4 分碩一

你想定義一個「效率指標」:\(W = T - 2N\)(延遲減去 token 的兩倍)。

\(W\) 越大,表示「花的時間比應該的多」——可能是系統效能問題。

你需要知道:如何用變數變換求新隨機變數的分布?

題目

  1. 計算 \(E[W] = E[T] - 2E[N]\)
  2. 計算 \(\text{Var}(W)\)(需要 \(\text{Cov}(T, N)\)
  3. 設計「低效請求」告警閾值 \(w_0\):若超過多少標準差算異常?
解答

Step 1:計算 \(E[T]\)\(E[N]\)

\[E[T] = \int_0^\infty t \cdot 2e^{-t}(1-e^{-t}) \, dt = 2\int_0^\infty te^{-t} \, dt - 2\int_0^\infty te^{-2t} \, dt\]
\[= 2 \cdot 1 - 2 \cdot \frac{1}{4} = 2 - 0.5 = 1.5\]
\[E[N] = \int_0^1 n \cdot 2(1-n) \, dn = 2\int_0^1 (n - n^2) \, dn = 2\left[\frac{1}{2} - \frac{1}{3}\right] = \frac{1}{3}\]
\[E[W] = E[T] - 2E[N] = 1.5 - 2 \times \frac{1}{3} = 1.5 - 0.667 = 0.833\]

Step 2:計算 \(\text{Var}(W)\)

需要 \(E[T^2]\), \(E[N^2]\), \(E[TN]\)

\[E[T^2] = 2\int_0^\infty t^2 e^{-t}(1-e^{-t}) \, dt = 2(2 - \frac{2}{4}) = 3\]
\[\text{Var}(T) = 3 - 1.5^2 = 0.75\]
\[E[N^2] = 2\int_0^1 n^2(1-n) \, dn = 2\left[\frac{1}{3} - \frac{1}{4}\right] = \frac{1}{6}\]
\[\text{Var}(N) = \frac{1}{6} - \frac{1}{9} = \frac{1}{18}\]
\[E[TN] = \int_0^\infty \int_0^{1-e^{-t}} tn \cdot 2e^{-t} \, dn \, dt = \int_0^\infty te^{-t}(1-e^{-t})^2 \, dt = \frac{7}{12}\]
\[\text{Cov}(T, N) = E[TN] - E[T]E[N] = \frac{7}{12} - 1.5 \times \frac{1}{3} = \frac{7}{12} - 0.5 = \frac{1}{12}\]
\[\text{Var}(W) = \text{Var}(T) + 4\text{Var}(N) - 4\text{Cov}(T,N) = 0.75 + \frac{4}{18} - \frac{4}{12} = 0.75 + 0.222 - 0.333 = 0.639\]
\[\sigma_W = \sqrt{0.639} \approx 0.80\]

Step 3:告警閾值

若設 \(w_0 = E[W] + 2\sigma_W = 0.833 + 1.6 = 2.43\),則超過此值的請求可能有效能問題。

數學小結:一般聯合 PDF 操作
操作 公式 本題範例
邊際 PDF \(f_X(x) = \int f_{X,Y}(x,y) \, dy\) 注意積分範圍
條件 PDF \(f_{Y\|X}(y\|x) = f(x,y)/f_X(x)\) 本題得到 Uniform
條件期望 \(E[Y\|X=x] = \int y \cdot f_{Y\|X}(y\|x) \, dy\) \(\frac{1-e^{-t}}{2}\)
變數變換 \(E[g(X,Y)] = \iint g(x,y) f(x,y) \, dx\, dy\) \(E[W]\), \(\text{Cov}\)

關鍵技巧:非矩形區域時,積分上下界是另一變數的函數。


第 9 題小結:聯合分布工具箱

「延遲和 Token 數有關係嗎?」
問題 1:邊際分布是什麼?
    ├─► 對另一變數積分(注意非矩形區域!)
問題 2:知道延遲,能預測 Token 嗎?
    ├─► 條件 PDF → 條件期望 E[N|T=t]
問題 3:如何定義「效率」?
    └─► 變數變換 W = T - 2N → 求 E[W], Var(W)

總結:分布關係全景圖

                    ┌─────────────────┐
                    │   Bernoulli(p)  │
                    └────────┬────────┘
            ┌────────────────┼────────────────┐
            │                │                │
            ▼                ▼                ▼
    ┌───────────────┐ ┌───────────────┐ ┌───────────────┐
    │  Binomial(n,p)│ │ Geometric(p)  │ │   Poisson(λ)  │
    │  (n 次的和)   │ │ (等到第 1 次) │ │  (n→∞, np→λ) │
    └───────────────┘ └───────┬───────┘ └───────┬───────┘
                              │                 │
                              ▼                 ▼
                    ┌───────────────┐ ┌───────────────┐
                    │ Neg Binom(r,p)│ │ Exponential(λ)│
                    │ (r 個 Geom 和)│ │  (等待時間)   │
                    └───────────────┘ └───────┬───────┘
                                    ┌───────────────┐
                                    │   Gamma(n,λ)  │
                                    │ (n 個 Exp 和) │
                                    └───────┬───────┘
                                            │ CLT
                                    ┌───────────────┐
                                    │  Normal(μ,σ²) │
                                    └───────────────┘

從場景到分布

場景問題 數學工具
單次成功/失敗 Bernoulli
n 次中成功幾次 Binomial
等到第 1 次成功 Geometric
等到第 r 次成功 Negative Binomial
單位時間內事件數 Poisson
等待下一個事件 Exponential
等待 n 個事件 Gamma
大量隨機變數的和 Normal (CLT)
兩變數的相關性 二元 Normal
多類別的計數 Multinomial → 卡方檢定

  1. PagerDuty 是一個事件管理與告警平台,負責整合各種監控系統的告警、管理 On-call 排班、並透過電話/簡訊/Slack 通知值班人員。簡單說:它就是那個凌晨三點叫醒 SRE 的工具。類似產品還有 Opsgenie、VictorOps 等。