
譯者 | 核子可樂
審校 | 重樓
大語言模型正在改變我們的工作與交互方式,為編程助手、通用聊天機器人等各類應用提供支持。可問題在于:運行這些功能強大的模型(特別是托管形式)的成本極高,往往達到傳統關鍵字搜索的10倍。而其中很大一部分,源自大模型低效的內存管理機制。
隱藏的內存消耗:KV緩存
大模型的核心在于Transformer模型,它每次生成一個單詞(token)。為了高效輸出,模型需要記住來自之前單詞的“上下文”,并將其存儲在KV(鍵值)緩存當中,借此實現對話的短期記憶。
問題在于,這套KV緩存極其龐大,且每條請求的大小都會動態變化。現有系統多將KV緩存存儲在連續的單一內存塊中,因此往往帶來兩個主要問題:
1. 內存碎片
內部碎片
系統會為每條請求預先分配一大塊內存,并假設最大的可能輸出長度(如2048個token)。但如果一條請求只生成一條短輸出,則大部分預留內存都會閑置,因此造成嚴重浪費。
外部碎片
由于不同請求會預留大小不一的內存塊,GPU內存中會分散大量無法使用的小塊。因此即使總可用內存充足,也難以容納新請求。從觀察數據來看,現有系統中只有20.4%至38.2%的KV緩存內存被實際用于存放token狀態,其余部分被白白浪費。
2. 無法共享內存
并行采樣或波束搜索等高級解碼技術常會依據單條提示詞生成多條輸出,因此可以共享部分KV緩存。但現有系統無法輕松共享這部分內存,因為各序列的KV緩存位于各自獨立的連續塊當中。
這種低效現狀嚴重限制了系統能夠同時處理的請求數量,直接影響到系統吞吐量(每秒token/請求處理量)。
頓悟時刻:受操作系統啟發的PagedAttention
為了解決這些難題,研究人員開發出PagedAttention,其靈感來自操作系統中的一項經典技術:虛擬內存與分頁。
其中:
- KV塊類似頁。PagedAttention不使用連續內存,而是將每個序列的KV緩存劃分成固定體量且較小的鍵值塊,每個塊保存一定數量的tokne鍵和值。
- Token類似于字節,KV緩存中的單一token對應頁中的字節。
- 請求類似于進程。每條大模型請求都像進程一樣接受管理,其“邏輯”KV塊映射至GPU內存中的“物理”KV塊。
PagedAttention如何化解內存難題?
幾乎消除碎片問題
由于KV塊在物理內存中不再連續,PagedAttention可以按需動態分配各塊。由于只需在必要時分配內存,因此消除了內部碎片問題;另外所有塊均大小相同,因此消除了外部碎片問題。
靈活的內存共享效果
PagedAttention支持在不同序列間共享KV塊,甚至跨不同請求進行共享。例如,在并行采樣或波束搜索中,多條輸出可以共享初始提示詞的KV緩存,從而節省大量內存。它甚至可以對需要由不同序列進行修改的塊執行寫時復制機制(同樣屬于操作系統概念),確保高效共享并避免不必要的復制。
vLLM:高吞吐量引擎
構建于PagedAttention之上的vLLM是一款專為高吞吐量目標設計的大模型服務系統。它采用塊級內存管理,并配合與PagedAttention協同的復雜調度程序。
vLLM的關鍵優勢包括:
- KV緩存內存幾乎零浪費。
- 可在請求內部及跨請求間靈活共享KV緩存。
與FasterTransformer和Orca等最先進的系統相比,vLLM將主流大模型的吞吐量提高了2至4倍,且不會增加延遲。對于較長序列、更大的模型和更復雜的解碼算法,這種提升會更加顯著。例如,在支持一套包含13B參數的大模型時,vLLM的并發處理請求數甚至比Orca的“預言機”版本(假設完全了解輸出長度)高出2.2倍,比Orca(Max)高出4.3倍。它的內存節約效果在并行采樣(6.1%-9.8%)和波束搜索(37.6%-55.2%)中同樣明顯。
大模型支撐的新未來
憑借對操作系統設計經驗的巧妙借鑒,PagedAttention顯著提高了大模型服務效率,在輕松降低云服務成本的同時,為用戶提供更快、響應更加靈敏的大模型應用。它改變了游戲規則,以破除瓶頸的方式更好地支撐起下一代大模型服務。
原文標題:Unlocking LLM superpowers: How PagedAttention helps the memory maze,作者:Raul Leite





























