現代 AI 推論的「空間魔術」:PagedAttention 如何終結顯示記憶體碎片化

在 LLM(大型語言模型)的生產環境中,推論成本的高低並不直接取決於模型參數量,而取決於一個核心指標:吞吐量 (Throughput)。而限制吞吐量的最大瓶頸,往往不是 GPU 的運算能力,而是顯示記憶體(VRAM)的利用率。

專屬插圖
現代 AI 推論的「空間魔術」:PagedAttention 如何終結顯示記憶體碎片化

現代 AI 推論的「空間魔術」:PagedAttention 如何終結顯示記憶體碎片化

在 LLM(大型語言模型)的生產環境中,推論成本的高低並不直接取決於模型參數量,而取決於一個核心指標:吞吐量 (Throughput)。而限制吞吐量的最大瓶頸,往往不是 GPU 的運算能力,而是顯示記憶體(VRAM)的利用率。

當我們討論 KV Cache 時,大多數人關注的是它如何加速生成,但工程實務中真正的噩夢是——記憶體碎片化

連續儲存的「死胡同」

傳統的推論框架在處理 KV Cache 時,傾向使用連續的記憶體配置。這帶來了一個巨大的矛盾:
1. 預先配置浪費:為了保證請求不因長度增加而崩潰,系統必須根據 max_seq_len(如 32k)預先劃出一塊連續空間。如果使用者只輸入了 10 個 Token,剩下的 31,990 個位置依然被佔用且無法給其他請求使用。
2. 外部碎片:不同請求的生命週期交錯,導致顯示記憶體中出現大量細碎的空洞,無法組合成一個足夠大的連續區塊來承載新請求。

這種「靜態配置」模式導致顯示記憶體利用率極低,直接限制了 Batch Size,使得昂貴的 H100 在很多時候處於「飢餓」狀態。

PagedAttention:將作業系統的虛擬記憶體搬進 GPU

vLLM 團隊提出的 PagedAttention 提供了一個優雅的解法:放棄連續儲存,引入分頁機制

其核心邏輯是將 KV Cache 分割成固定大小的實體區塊(Physical Blocks),每個區塊儲存固定數量的 Token(例如 16 個)。

關鍵工程實作

  • 邏輯映射表 (Block Table):模型在邏輯上仍然認為 Token 是連續的,但底層透過一張映射表將邏輯索引指向不連續的實體區塊。這與作業系統的虛擬記憶體管理幾乎完全一致。
  • 按需動態增長:只有當目前實體區塊填滿時,系統才會為該請求申請一個新的實體區塊。這意味著顯示記憶體佔用與實際生成的 Token 數成線性關係,而非與最大長度掛鉤。
  • 零複製共享 (Copy-on-Write):在處理平行採樣(Parallel Sampling)或多輪對話時,多個請求可以共享同一個實體區塊(例如共享 System Prompt 的快取)。只有當某個請求需要修改內容時,才會觸發 Copy-on-Write 操作。

實戰影響:從「能跑」到「高效」

PagedAttention 的引入將 LLM 推論從簡單的矩陣運算升級為複雜的資源調度問題:
- 吞吐量飛躍:由於消除了內部碎片,顯示記憶體利用率可提升至 96% 以上。在相同硬體下,併發數通常能提升 2-4 倍。
- 長文本穩定性:透過靈活的分頁管理,系統能夠更穩定地處理超長上下文而不會輕易觸發 OOM(Out of Memory)。
- 成本降低:更高的吞吐量意味著單次 Token 生成的攤提成本大幅下降。

總結

如果說 Continuous Batching 解決了推論的時間維度調度(讓 GPU 不空轉),那麼 PagedAttention 則解決了空間的維度調度(讓顯示記憶體不浪費)。對於 AI 系統工程師而言,理解這一演進意味著能夠更精準地調優 gpu_memory_utilization 等參數,在極致效能與系統穩定性之間找到平衡點。

留言區

歡迎分享你的想法!

發表留言

0/500

載入留言中…