深入解析大模型推理架構之 Prefill-Decode Disaggregation (PD分離)
文章目錄
- 深入解析大模型推理架構之 Prefill-Decode Disaggregation (PD分離)
- 1 從統一到分離,推理架構為何演進?
- 2 什么是Prefill-Decode分離?
- 3 PD分離系統的工作流程
- 4 PD分離的優勢
- 5 挑戰與相應的解決方案
- 6 總結與展望
1 從統一到分離,推理架構為何演進?
在標準的大型語言模型推理流程中,整個生成任務,從處理用戶輸入(Prompt)到逐字生成回答,通常都在同一個GPU上完成。這種統一式架構(Unified Architecture)雖然簡單,但隨著模型規模和并發請求量的激增,其固有的低效率問題逐漸暴露。
問題的根源在于,LLM推理的兩個核心階段——Prefill和Decode——在計算特性上存在根本性的差異:
-
Prefill (預填充) 階段:
- 任務: 并行處理輸入的整個Prompt,為其所有Token計算Key和Value,并生成初始的KV Cache。
- 特性: 這是計算密集型 (Compute-Bound) 任務。計算量巨大,涉及大量的矩陣乘法,可以充分利用GPU強大的并行計算能力(高TFLOPS)。處理一個包含512個Token的Prompt,其計算量可能相當于生成512個Decode步驟的總和。
-
Decode (解碼) 階段:
- 任務: 逐個生成輸出Token。每次只處理一個Token,但需要加載整個模型權重和不斷增長的KV Cache。
- 特性: 這是內存帶寬密集型 (Memory-Bandwidth-Bound) 任務。單步計算量小,但需要頻繁、大量地從GPU顯存中讀寫數據。其瓶頸在于顯存的帶寬,而非GPU的計算核心。
關于大模型推理中的Prefill、Decode與KV Cache等概念的介紹,請參考我的這篇文章:【大模型】大模型推理中的Prefill、Decode與KV Cache詳解 。
在統一式架構中,昂貴且計算能力強大的GPU在執行Decode任務時,其計算單元大部分時間處于空閑狀態,等待數據從顯存中加載,造成了巨大的資源浪費。反之,當GPU忙于一個長Prompt的Prefill時,其他等待Decode的短任務則必須排隊,導致系統整體響應變慢。
為了解決這種資源錯配和效率瓶頸,**Prefill-Decode分離(PD分離)**的思想應運而生。其核心目標是:為不同計算特性的任務匹配最合適的硬件資源,實現系統整體性能的最大化。
2 什么是Prefill-Decode分離?
Prefill-Decode分離是一種先進的LLM服務架構,它將推理過程中的Prefill和Decode兩個階段,從物理上或邏輯上調度到不同的、專門優化的硬件集群(或資源池)中執行。
一個典型的PD分離系統架構如下:
- 路由/調度器 (Router/Scheduler): 系統的“大腦”,負責接收所有請求,并根據請求類型(是新的Prompt還是正在進行的生成任務)將其分發到合適的集群。
- Prefill集群: 由少量但計算能力極強的GPU(如NVIDIA H100/H200)組成,專門用于高效地處理新請求的Prefill階段。
- Decode集群: 由大量GPU組成,這些GPU可能算力不是最頂尖,但擁有高內存帶寬(如NVIDIA A100),性價比更高,專門用于處理Decode階段。
- KV Cache傳輸層: 這是連接兩個集群的橋梁,通常是基于高速網絡(如RDMA、NVLink)的分布式內存系統或高速網絡文件系統,用于在Prefill和Decode節點之間快速傳遞KV Cache。
3 PD分離系統的工作流程
一個用戶請求在PD分離架構中的生命周期如下:
-
請求到達與Prefill調度: 用戶的新請求(包含Prompt)到達系統。調度器識別出這是一個需要Prefill的任務,并將其分配給Prefill集群中的一個空閑節點。
-
Prefill執行: Prefill節點接收到Prompt后,利用其強大的并行計算能力,對Prompt中的所有Token進行一次批處理計算,生成初始的KV Cache和響應的第一個Token。
-
KV Cache遷移 (核心步驟): Prefill任務完成后,生成的KV Cache(可能高達數GB)以及相關的請求狀態信息,被迅速打包并通過高速傳輸層從Prefill節點發送出去。
-
Decode調度與執行: 與此同時,調度器將這個“已預處理”的請求(現在攜帶了KV Cache的引用或實體)分配給Decode集群中的一個可用節點。Decode節點加載這個KV Cache,然后進入自回歸生成循環。在每一步,它只為新的一個Token進行計算,從顯存中讀取模型權重和完整的KV Cache,然后將新生成的(K,V)對追加到Cache中,并將生成的Token流式傳輸給用戶。
-
生成結束與資源釋放: 當生成過程完成(例如,模型輸出了結束符
[EOS]
),結果被完整地返回給用戶。Decode節點上為該請求分配的資源,特別是寶貴的KV Cache顯存,被立即釋放,以便服務于下一個等待中的Decode任務。
4 PD分離的優勢
-
極致的資源利用率與性價比: 可以為Prefill配置少量昂貴的頂級算力卡,為Decode配置大量性價比更高的帶寬型卡。硬件成本可以得到顯著優化,避免了讓昂貴的計算單元在Decode階段“無所事事”。
-
更高的系統吞吐量: 解耦了Prefill和Decode的執行過程。Prefill集群可以持續不斷地處理新涌入的請求(提高系統接納新用戶的能力),而Decode集群則專注于為大量并發用戶快速生成后續Token。兩者互不阻塞,系統整體的并發處理能力(Throughput)大幅提升。
-
靈活的擴展性 (Scalability): 可以根據業務負載的實際情況獨立擴展兩個集群。如果業務場景多為長篇問答(長Prompt),可以增加Prefill集群的節點;如果多為簡短的聊天(長對話歷史),則可以增加Decode集群的節點。
-
優化的延遲表現:
- 降低首字延遲 (TTFT): 專用的Prefill集群可以通過更大的批處理(Batching)規模,更高效地處理Prompt,從而加快第一個Token的生成速度。
- 保障字間延遲: Decode集群的專用性確保了正在生成中的任務不會被耗時長的Prefill任務搶占,從而獲得穩定、快速的后續Token生成體驗。
5 挑戰與相應的解決方案
PD分離架構雖好,但也帶來了新的技術挑戰:
-
挑戰1: KV Cache傳輸開銷
- 問題: KV Cache可能非常大,在不同物理節點間傳輸它會引入不可忽視的延遲,可能抵消掉分離帶來的部分收益。
- 解決方案:
- 硬件層面: 采用支持RDMA(遠程直接內存訪問)的InfiniBand或RoCE等超低延遲網絡。
- 軟件層面: 使用KV Cache量化,例如將FP16的Cache壓縮為INT8或INT4,顯著減小其體積。
- 調度層面: 設計智能調度算法,嘗試將同一個長對話的連續輪次的Prefill和Decode任務調度到物理位置相近的節點上。
-
挑戰2: 復雜的調度系統
- 問題: 調度器需要管理兩個異構資源池,并處理任務在它們之間的狀態交接,其設計和實現復雜度遠高于傳統調度器。
- 解決方案: 需要構建一個全局的、狀態感知的調度系統。該系統不僅要監控節點負載,還要能夠預測任務時長,并對KV Cache的傳輸進行協同調度,以實現全局最優。
-
挑戰3: 資源孤島與負載均衡
- 問題: 如果流量模式劇烈變化,可能導致一個集群(如Prefill)過載,而另一個(Decode)處于空閑,形成暫時的資源孤島。
- 解決方案: 引入動態資源分配機制,允許部分硬件根據需要靈活地在Prefill和Decode角色之間切換。或者,采用更精準的負載預測模型來提前調整資源池大小。
6 總結與展望
Prefill-Decode分離是LLM推理系統從“作坊式”走向“工業化”的重要一步。它體現了計算體系結構中的一個經典思想:用專門化的組件處理專門化的任務。通過將Prefill的計算密集型特性與Decode的訪存密集型特性解耦,并為之匹配最優化的硬件,PD分離架構能夠顯著提升大型語言模型服務的吞吐量、降低成本,并優化延遲。
雖然實現上存在挑戰,但隨著Orca、Sarathi等研究系統的提出和業界實踐的深入,PD分離正逐漸成為超大規模AI計算中心的主流架構范式。未來,它還將與投機性解碼(Speculative Decoding)、模型混合(MoE)等更多先進技術融合,共同推動AI普惠化的進程。