現代 AI 推論的「空間魔術」:PagedAttention 深度解析
在 LLM(大型語言模型)的生產環境中,記憶體管理是決定吞吐量與成本的關鍵瓶頸。如果你關注過 vLLM 等高效能推論框架,一定會聽到一個核心概念:PagedAttention。

現代 AI 推論的「空間魔術」:PagedAttention 深度解析
在 LLM(大型語言模型)的生產環境中,記憶體管理是決定吞吐量與成本的關鍵瓶頸。如果你關注過 vLLM 等高效能推論框架,一定會聽到一個核心概念:PagedAttention。
簡單來說,PagedAttention 解決了 LLM 推論中一個極其低效的問題:KV Cache 的記憶體碎片化。
為什麼需要 PagedAttention?
在生成式 AI 推論過程中,為了避免重複計算之前生成的 token,系統會將每個 token 的 Key 和 Value 向量儲存在記憶體中,這就是 KV Cache。
傳統的 KV Cache 管理方式是「連續儲存」。這意味著系統必須為每個請求預先分配一塊連續的記憶體空間。但這裡存在兩個致命問題:
1. 內部碎片(Internal Fragmentation):由於無法預知模型最終會生成多少個 token,系統通常會按照最大長度(Max Sequence Length)預分配空間。如果模型只生成了 10 個 token 但預分配了 2048 個,那麼絕大部分記憶體被白白浪費。
2. 外部碎片(External Fragmentation):隨著請求的動態增加和結束,記憶體中會出現大量不連續的小空隙,導致無法分配大塊連續空間給新請求。
這種低效導致 GPU 顯存利用率極低,限制了並行請求數(Batch Size)。
PagedAttention 的核心邏輯:借鑑虛擬記憶體
PagedAttention 的靈感直接來源於作業系統中的虛擬記憶體(Virtual Memory)和分頁機制(Paging)。
它不再要求 KV Cache 在實體記憶體中連續儲存,而是將其劃分為固定大小的「頁」(Blocks)。
- 邏輯塊 $\rightarrow$ 實體塊:每個請求擁有一個邏輯上的 KV Cache 序列,但這些序列被映射到不連續的實體記憶體塊中。
- 塊表(Block Table):系統維護一張映射表,記錄邏輯頁索引與實體頁位址的對應關係。當模型需要讀取之前的 KV Cache 時,透過塊表快速定位到實體位址。
這帶來了什麼實際好處?
- 近乎零浪費:除了最後一個塊可能沒填滿外,所有實體塊都被完全利用。顯存利用率從之前的 $\sim$60% 提升到了 $\sim$96% 以上。
- 動態擴展:當當前塊滿時,系統只需動態申請一個新的實體塊並將其添加到塊表中即可,無需移動原有資料或重新分配大塊空間。
- 高效共享(Copy-on-Write):在平行採樣(Parallel Sampling)或 Beam Search 時,多個輸出序列可以共享同一個前綴(Prompt)的實體塊。只有當某個序列產生新 token 需要修改時,才執行「寫時複製」,極大降低了多路徑生成的顯存開銷。
對工程實踐的影響
PagedAttention 的出現讓 vLLM 等框架能夠將 Batch Size 提升數倍而無需增加硬體成本。對於開發者而言,這意味著:
- 更高的吞吐量 (Throughput):單位時間內能處理更多請求。
- 更低的延遲 (Latency):透過提高並行度降低了排隊等待時間。
- 更靈活的部署:可以在更小的 GPU 上運行更大規模的並行任務。
總結
如果說 Continuous Batching 是解決了「時間軸」上的調度浪費,那麼 PagedAttention 就是解決了「空間軸」上的儲存浪費。兩者結合,構成了現代高效能 LLM 推論引擎的基石,將 AI 從「昂貴的實驗室玩具」推向了「高效率的工業級產品」。
留言區
歡迎分享你的想法!
載入留言中…