服務是一個 SLO 問題
一個生產 模型服務(model serving) 系統,評斷的不是平均速度,而是相對於契約的尾端行為。典型的 SLO 讀起來像:「在給定的每秒查詢數下,p99 的 TTFT 低於 500 毫秒、p95 的 TPOT 低於 50 毫秒。」前幾篇的每個旋鈕——批次大小、分塊大小、要多積極地納入 prefill——都是為了滿足這些百分位數而調,而非平均值。優化平均卻搞砸尾端,是經典的新手錯誤。
由於 TTFT 與 TPOT 朝相反方向拉扯,真實的排程器依 SLO 類別排定優先序:對延遲敏感的互動式聊天得到小批次與即時納入,而以吞吐量為導向的批次工作則被積極地塞滿。同一份硬體靠把它們導入不同的排程機制來同時服務兩者。
引導解碼:讓結構變得可靠
應用需要能解析的 JSON、引數有效的函式呼叫、跑得起來的 SQL。靠提示要求格式大多數時候有效,這在生產中意味著它失敗的頻率足以把人吵醒。引導解碼(guided decoding) 讓格式錯誤在結構上不可能發生:在每一步,它計算一個形式文法或正規表達式允許哪些 token,並在取樣前把其餘 token 遮蔽為零機率。模型只能走文法允許的路徑。
受语法约束的解码用 0/1 掩码乘以 logits,只有语法允许的词元才保留非零概率。
串接:只在必要時花大模型的錢
大多數真實流量都很簡單;小模型就能答得很好,只有少數查詢真正需要旗艦模型。串接推論(cascade inference) 利用這點,把每個查詢導向能勝任它的最便宜模型:先由快速的小模型作答,唯有當某個信心訊號——它自身的不確定性、一個驗證器、或一個輕量路由器——判定答案不可靠時,才升級到更大的模型。
由於成本由昂貴的層級主導,即使把一半流量送給小模型,也能在品質幾乎相當下大致砍半花費。工程的藝術在於路由訊號:太膽怯,你會什麼都升級、毫無節省;太大膽,品質會在困難的尾端滑落。串接與串流天生相配——小模型的答案可立即開始 串流,唯有觸發升級時才被取代。
级联推理的期望成本等于小模型成本加上升级概率乘以大模型成本——这正是路由阈值如此直接地左右开销的原因。
可觀測性與自動擴展
你無法捍衛一個你不量測的 SLO。服務的 LLMOps 可觀測性 追蹤延遲百分位數、你推測的接受率、快取命中率、佇列深度、GPU 利用率與每請求的 token 數——並把它們連結到成本與品質。負載升高時,推論自動擴展(inference autoscaling) 增加副本,但 LLM 服務讓這變得困難:副本有緩慢的冷啟動(要載入數 GB 的權重)與不會遷移的暖 KV 快取狀態,因此天真的依請求率自動擴展會過衝並抖動。有效的策略依佇列深度與 SLO 餘裕來擴展,並在可預測的需求前預先暖機。
利特尔法则将队列长度、到达率与延迟联系起来,是自动扩缩容时确定服务副本数量的基础。
前沿
服務領域進展飛快。活躍的研究方向包括:更聰明的 KV 快取逐出與卸載,使近乎無界的脈絡能優雅地溢出到 CPU 記憶體或儲存;模型架構與引擎更緊密的共同設計,依注意力變體在服務時的成本來選擇它們;能依即時接受率調整草稿長度的推測;以及把解耦進一步推進到稀疏 混合專家(mixture-of-experts) 模型的逐層、逐專家放置。自第一篇以來,貫穿的主題從未改變:推論受記憶體限制且循序,而每一項進展,都是一種在每搬動一位元組、每跨出一步中做更多有用工作的新方法。