分類預填和解碼服務
服務架構,將大型語言模型推理分為兩個獨立的階段——預先填充和解碼——並在不同的 GPU 池上運行它們。
概述
It matters because these two phases have opposite hardware appetites, and forcing them onto the same machines wastes capacity and hurts latency.
深入探討
當法學碩士回答時,它分兩個階段進行。 Prefill 一次讀取整個提示並建立鍵值(KV)快取;這是一個巨大的、平行的、受運算限制的突發,使 GPU 的數學單元飽和。然後,解碼一次產生一個令牌,每一步都會讀取整個 KV 快取——記憶體頻寬受限、運算量較輕的細流。一起運行時,長預填充會拖延每個人的解碼(隊頭阻塞),並且對兩者進行批次處理會產生幹擾。分解將預先填充放在一個 GPU 池上,並在另一個 GPU 池上進行解碼,透過 NVLink 或 InfiniBand 等快速互連在它們之間傳輸 KV 快取。每個池都經過獨立調整和擴展,提高了吞吐量,平滑了尾部延遲,並讓操作員同時達到了嚴格的第一個令牌時間和每個輸出令牌時間目標。
技術洞察
這兩個階段的瓶頸不同。 Prefill 並行處理所有提示標記,因此它的 FLOP 會隨著提示長度而縮放,並且會最大化張量核心。解碼是自回歸的:每個新令牌都需要一次前向傳遞,從 HBM 重新讀取完整的 KV 緩存,因此吞吐量由記憶體頻寬而不是計算來控制。分解透過調整大小、批次甚至為每個池選擇不同的並行性來利用這一點,然後將 KV 快取從預填充工作線程傳送到解碼工作線程。
戰略影響
成本與預算
多年來,架構決策決定著效能和營運成本。
更明確的決策
技術教育幫助團隊選擇正確的堆疊,而不僅僅是最新的堆疊。
品質管控
更好的工程選擇可以減少生產中的可靠性事故。
分類預填和解碼服務的未來
預計分解將成為生產堆疊中的預設設定。 DistServe、Splitwise 和 Mooncake 等系統使其普及,而 vLLM 和 NVIDIA Dynamo 現在提供分類模式。研究正在推動 KV 快取傳輸最佳化、跨請求的快取池和重用、流量變化下預填充/解碼比率的動態重新平衡,以及與前綴快取和分塊預填充的更緊密整合。隨著上下文視窗成長到數百萬個令牌,分離這些階段對於經濟高效、低延遲的服務變得越來越重要。
現實世界的實施
聊天助理將長文件提示路由到計算量大的預填充集群,然後從內存優化的解碼集群流式傳輸回复,以保持打字延遲平穩。
NVIDIA Dynamo 和 vLLM 允許操作員部署單獨的預填和解碼工作群組,因此突發的長提示不會凍結後續的生成。
Mooncake(由 Moonshot AI 的 Kimi 使用)分解了預填充和解碼,並添加了分散式 KV 快取池以大規模減少冗餘的即時重新計算。
程式碼完成服務專用於短提示的小型預填充池和大型解碼池,因為大部分成本來自串流許多輸出代幣。
風險與防護欄
優化一項基準測試可以隱藏更廣泛的系統弱點。
基礎設施和維護成本常常被低估。
隨著系統變得更加複雜,安全性和可觀察性差距可能會擴大。
實施路線圖
在實施之前定義延遲、品質和成本目標。
在實際負載和資料條件下進行基準測試。
儀器監控錯誤、漂移和使用者影響。
在擴展之前準備回滾和事件回應路徑。
不斷探索
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Disaggregated Prefill and Decode Serving quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
常見問題
What is Disaggregated Prefill and Decode Serving?
服務架構,將大型語言模型推理分為兩個獨立的階段——預先填充和解碼——並在不同的 GPU 池上運行它們。這很重要,因為這兩個階段具有相反的硬體需求,將它們強製到同一台機器上會浪費容量並損害延遲。
將預填和解碼分離到不同 GPU 池的核心硬體原因是什麼?
預填充並行處理整個提示並使計算飽和,而解碼每一步都會讀取 KV 緩存,並受到內存頻寬的限制,這與需要單獨、獨立調整池的需求相反。
哪些資料結構必須從預填工作器傳送到解碼工作器?
Prefill為提示建構KV快取;解碼需要該快取繼續生成,因此快取透過快速互連傳送到解碼池。
在共享 GPU 設定中,分解具體可以減少哪些問題?
在共享 GPU 上,長預填充突發可能會阻止正在進行的解碼步驟;將它們分開可以防止幹擾並穩定尾部延遲。
為什麼預填充可以積極地進行批次處理,但解碼可以從不同的調整中受益?
Prefill 一起處理所有提示標記,因此較大的批次可以很好地填充張量核心;解碼一次產生一個令牌並由記憶體閘控,因此它的擴展方式不同。
通常使用哪些互連在分解池之間移動 KV 快取?
需要像 NVLink(節點內)和 InfiniBand(節點間)這樣的高頻寬、低延遲鏈路,這樣 KV 快取傳輸就不會成為新的瓶頸。