LLM 推理加速中的 Prefill(預(yù)填充) 與 Decode(解碼) 分離(也常被稱為 Disaggregated Prefill and Decoding)是目前大模型推理優(yōu)化領(lǐng)域的前沿技術(shù)。
其核心目標(biāo)是解決由于這兩個階段計(jì)算特性完全不同而導(dǎo)致的效率瓶頸。
1. 為什么需要分離?(核心矛盾)
LLM 的推理是一個自回歸過程,分為兩個截然不同的階段:
| 特性 | Prefill (預(yù)填充) | Decode (解碼) |
|---|---|---|
| 任務(wù)內(nèi)容 | 處理用戶輸入的 Prompt,生成第一個 Token | 基于之前的上下文,逐個生成后續(xù) Token |
| 計(jì)算類型 | 計(jì)算密集型 (Compute-bound) | 訪存密集型 (Memory-bound) |
| 并行度 | 高(所有輸入 Token 可以并行計(jì)算) | 低(必須逐個生成,串行依賴) |
| 資源瓶頸 | GPU 算力 (TFLOPS) | 顯存帶寬 (Memory Bandwidth) |
| KV Cache | 產(chǎn)生并寫入 KV Cache | 讀取并更新 KV Cache |
痛點(diǎn): 在傳統(tǒng)的統(tǒng)一架構(gòu)中,Prefill 和 Decode 搶占同一塊 GPU 資源。Prefill 的高延遲會導(dǎo)致正在進(jìn)行的 Decode 任務(wù)出現(xiàn)卡頓(抖動),而 Decode 的低利用率又浪費(fèi)了 GPU 的計(jì)算能力。
2. Prefill-Decode 分離的原理
分離架構(gòu)的思想是:“讓擅長的人做擅長的事”。通過物理或邏輯手段,將這兩個階段分配到不同的顯存/算力節(jié)點(diǎn)上。
核心步驟:
- Prefill 節(jié)點(diǎn): 專門處理用戶的 Prompt。由于并行度高,它能跑滿 GPU 的算力,快速產(chǎn)出 KV Cache。
- KV Cache 傳輸: 將產(chǎn)出的 KV Cache 通過高速網(wǎng)絡(luò)(如 RDMA)傳輸?shù)綄iT的 Decode 節(jié)點(diǎn)。
- Decode 節(jié)點(diǎn): 接收緩存并開始逐個生成 Token。由于不需要處理龐大的 Prompt 計(jì)算,它只需專注于低延遲的推理更新。
3. 關(guān)鍵技術(shù)支撐
要實(shí)現(xiàn)高效的分離,需要解決以下幾個關(guān)鍵問題:
- KV Cache 轉(zhuǎn)移 (Hand-off): 這是分離技術(shù)的最大挑戰(zhàn)。KV Cache 的數(shù)據(jù)量巨大,如果網(wǎng)絡(luò)傳輸比計(jì)算還慢,分離就沒有意義。目前主流方案利用 RDMA 網(wǎng)絡(luò)進(jìn)行毫秒級的內(nèi)存拷貝。
- 計(jì)算圖解耦: 像 vLLM 或 PD-Attention 這樣的框架,將注意力機(jī)制的計(jì)算邏輯拆分,使得 Prefill 階段生成的中間結(jié)果可以被 Decode 階段無縫接管。
- 動態(tài)調(diào)度 (Scheduling): 調(diào)度系統(tǒng)需要根據(jù)當(dāng)前的負(fù)載情況,決定將請求分配給哪個 Prefill 實(shí)例和哪個 Decode 實(shí)例,以達(dá)到負(fù)載均衡。
4. 這種架構(gòu)帶來的好處
- 極高的吞吐量: Decode 階段不再被 Prefill 阻塞,可以維持極高的并發(fā)。
- 更低的延遲 (TTFT & ITL): * TTFT (Time to First Token) 變短,因?yàn)?Prefill 資源是專屬的。
- ITL (Inter-Token Latency) 變得非常穩(wěn)定,不會因?yàn)橥蝗贿M(jìn)來一個長 Prompt 就導(dǎo)致其他用戶卡頓。
- 資源利用率最大化: 可以為 Prefill 選配高性能算力卡(如 H100),為 Decode 選配顯存帶寬大的卡,降低整體硬件成本。
總結(jié)
Prefill-Decode 分離本質(zhì)上是將 “批處理思維” 應(yīng)用于 Prefill,將 “流處理思維” 應(yīng)用于 Decode,解決了大模型推理中“快慢任務(wù)混雜”的頑疾。
您是想深入了解某個特定的實(shí)現(xiàn)框架(如 DeepSeek-V3 的原生多節(jié)點(diǎn)架構(gòu) 或 vLLM 的分塊預(yù)填充),還是想探討如何部署這類系統(tǒng)?