AI 學習站
推論原理 / 記憶體管理
PAGED ATTENTION

只用了 8 格,
為什麼卻占了 12 格?

先從 AI 聊天時的「短期筆記」說起。當使用者越來越多,記憶體不只是要夠大,更要避免把空間浪費在沒有資料的地方。

先掌握重點

Paged Attention 的核心想法是:把對話用的快取切成小頁,需要幾頁就分配幾頁,不必為每個請求先保留一整大段空間。[2]

這件事是怎麼發生的?

聊天留下筆記預留空間造成浪費改成按頁分配讓更多請求進來
01故事的起點:AI 要接著前文回答

你繼續聊,AI 就得用到前面說過的內容

假設你請 AI 幫忙規劃旅行,條件不是一次說完,而是邊聊邊補充。接下來產生回答時,模型就需要用到這些前文。

你一直在對話

第一次補充「我想規劃週末旅行。」
接著補充「目的地是台南。」
再加一個條件「我喜歡美食和古蹟。」

KV Cache:先把算過的結果留下來

為了不用在每一步都重新計算前文的 Key 和 Value,模型會先把它們存起來。這份快取,就是 KV Cache。你可以把它想成 AI 回答時會參考的「短期筆記」。[1]

一般全注意力模型中,保留的前文越長,KV Cache 通常就越大。

「短期筆記」是比喻,不是真的把句子抄進去

KV Cache 存的是各層注意力計算用到的 Key / Value 數值,不是聊天文字,也不是永久記憶。不使用快取仍可處理前文,只是需要重新計算。視窗式注意力等架構的快取成長方式可能不同。[1]

接下來的問題是:系統事先不知道,你會只問一句,還是繼續聊很久。

02為了怕不夠用,先預留一大段

先把空間留好,方便了配置,卻可能造成浪費

想像有一排置物櫃。管理員怕你的東西越放越多,於是一開始就先保留 12 格。可是你今天只放了 8 格,另外 4 格雖然沒有東西,別人卻不能用。

先預留

替每位使用者留 12 格

這是一種按最大需求預先配置的做法。

實際使用

目前只需要 8 格

剩下 4 格仍屬於這位使用者,不能分給別人。

問題出現

沒有資料,卻占著空間

同時使用的人一多,這些預留空間就會累積。

這裡比較的是「整段預留」的示例,不代表所有未使用 Paged Attention 的系統都一定這樣配置。過度預留與記憶體碎片,是 Paged Attention 要改善的問題。[3]

03改變配置方式,同一份資料就不用占那麼多

同樣是 8 格資料,看看有沒有 Paged Attention 的差別

先注意橘色:它不是空閒,而是「沒資料、卻已被預留」。有了 Paged Attention,沒有分配出去的頁,才能留給其他請求。

沒有 Paged Attention · 整段預留的示例

先占用 12 格

這位使用者占用:12 格
橘色格子不能再分給其他人。
有 Paged Attention · 按頁分配

只分配目前需要的頁

資料已占用沒資料,但已預留按頁分配的資料尚未分配,可給別人

為了先看懂差別,圖中一格代表一頁,並假設資料剛好填滿整頁。實際上每頁可容納固定數量的 token,最後一頁仍可能沒填滿,並非完全零浪費。這裡的「占用」是請求拿到的快取頁,不是作業系統顯示的整個 GPU 程式用量。[2]

一個人少占 4 格,好像不多。那麼,很多人同時進來呢?

04多人一起用,差異就放大了

同樣 60 格快取空間,哪一邊能讓更多人進來?

下面兩邊收到完全相同的請求。左邊每人先拿 12 格;右邊按目前的資料量分配。放不下的人會在等待區,不會硬塞進已滿的記憶體

可分配的 KV Cache60
所有人的資料合計
全員一起進來,整段預留需

每位使用者目前需要多少?

整段預留

每人先拿 12 格

橘色標上「預」,表示空間已被保留。

等待區 · 尚未占用快取頁
Paged Attention

依照目前需求分配

有顏色的格子都已存放資料;虛線格仍可用。

等待區 · 尚未占用快取頁
字母代表不同使用者的資料「預」=已保留但沒資料可再分配

這是單一時間點的配置示例:依 A、B、C… 順序入場,整個請求放得下才分配,否則先等待。只畫出 KV Cache 空間,不含模型權重;未模擬換出、搶占或快取共享。圖中的數字不是效能測試。

05少預留只是第一步,還要找得到資料

頁面不必放在一起,靠一張對照表就能找到

就像置物櫃不必連號:第 1 頁放在 3 號櫃,第 2 頁放在 7 號櫃。對照表記住頁面的位置,注意力運算就能依序讀取需要的內容,不必先把所有頁搬到一起。[2]

閱讀順序 → 實際存放位置
實體記憶體:可以分散存放

概念上類似作業系統的分頁管理。Paged Attention 不只是分配空間,也包含能讀取這些非連續 KV 資料塊的注意力運算方式;它不會因此提高模型本身的理解能力。[3]

現在,空間比較不浪費了。還有另一個問題:請求長短不同,先完成的人離開後,空出的位置能不能立刻接下一個?

06空間管好了,還要安排誰先做

Continuous Batching:有人完成,下一輪就補上新人

想像有三個服務窗口。固定批次像是規定這一組三個人全部辦完,下一組才能進來;Continuous Batching(動態批次)則在每輪處理後重新安排,哪裡有空位,就能讓等候中的請求補上。[4]

用同一組工作,逐輪看差別

六個請求同時到達,一次最多處理三個。A 要做 6 輪,B 只要 2 輪;重點就是:B 完成後,D 要不要繼續等 A?

準備開始
固定批次 · Static Batching

整批完成,才接下一批

有人先完成,空位也不能補進新人。

等待中的請求
動態批次 · Continuous Batching

有位置,下一輪就補人

不必等最慢的那個請求做完。

等待中的請求
位置空著,但還不能補人紫框=這一輪新加入完成=本輪剛做完

每張卡片顯示這一輪的處理結果。剛完成的請求會在下一輪離開;「位置」只是批次名額的比喻,不是實體 GPU 核心。

把每一輪攤開來看:哪裡在工作,哪裡空著等?
固定批次
Continuous Batching

橘色「等」表示空著等同批其他請求;「—」表示已無後續工作。兩張圖的時間刻度完全相同。

重點是:空出的位置,何時能接下一個請求?

Paged Attention 改善快取空間的利用;Continuous Batching 改善請求排程。兩者互補,但不是同一項技術,也不是缺一就完全不能做另一項。[3]

這組教學條件下,固定批次需 8 輪,動態批次需 6 輪。假設每輪各請求完成一小步,省略前文運算(prefill)、不同輪次耗時及記憶體限制;這是排程示例,不是實際速度或效能保證

07把記憶體管理與排程放進同一套服務

vLLM,就是將這些能力整合起來的推論引擎

到這裡,再看 vLLM 就不會只剩一串名詞了:它是用來執行模型、提供推論服務的軟體,具備 KV Cache 管理與 Continuous Batching 等能力。vLLM 不是模型本身。[5]

多個請求進來,由 vLLM 管理後交給 GPU 執行

輸入

使用者請求

每個人的內容、長度都可能不同。

推論引擎

vLLM

Paged Attention

管理分頁快取與對應的注意力讀取。

Continuous Batching

安排每一輪有哪些請求一起處理。

運算

GPU

執行模型運算,逐步產生回答。

這張圖只畫出本篇的重點,不是完整架構。實際使用的注意力核心、排程策略與效果,會依模型、硬體和設定而不同。[5]

把整段故事串起來

不是讓模型變聰明,而是讓服務少浪費

先有 KV Cache

留下算過的 Key / Value,後續回答不用每次重算前文。

接著遇到空間問題

每個請求先預留一大段,可能只用 8 格,卻讓 12 格都不能給別人用。

Paged Attention

改成按頁分配,透過對照表找到分散的頁面,減少不必要的預留。

Continuous Batching

不等整批全部做完,已完成請求的位置可在下一輪補入新請求。

vLLM

將快取管理、排程與模型執行等能力整合成推論服務。

參考資料與延伸閱讀
[1] Hugging Face:How caching works
KV Cache 的用途、儲存內容與快取成長方式。
[2] vLLM:Introducing PagedAttention
按需分配、非連續頁面與最後一頁的未用空間。
[3] Efficient Memory Management for Large Language Model Serving with PagedAttention
Paged Attention 原始論文,以及與逐輪排程互補的關係。
[5] vLLM 官方文件
推論引擎、分頁快取管理與 Continuous Batching 等能力。

📝 iPAS 考點提醒

這頁對應的是「生成式 AI 的部署與推論成本」考點。要記的因果鏈:KV Cache(把算過的 Key/Value 留下來,避免重算,但對話越長越吃記憶體)→ 預留式配置(照最長長度先占一整段連續空間,沒用到的格子被鎖著=浪費)→ Paged Attention(切成小頁、按需分配,靠對照表找頁,不必連續)→ Continuous Batching(逐輪補人,不必等整批跑完)→ vLLM(把這些整合起來的推論引擎)。易混點:這些做法改善的是吞吐量與記憶體使用率,不是模型精度;同一個 checkpoint 換推論引擎,答案品質不會因此變好。另一個常考的對照是「記憶體不夠」的解法分工——量化壓的是模型權重,Paged Attention 管的是快取空間,兩者解決的不是同一件事。

想練情境題與詳解 → AI 學習與考證地圖

❓ 常見問題

KV Cache 是什麼?

模型每生成一個字,都要回頭看前面所有內容。KV Cache 就是把前面算過的 Key/Value 先存起來當「短期筆記」,下一個字直接查表,不必整段重算——代價是對話越長,這份筆記占的記憶體越大。

為什麼只用了 8 格,卻占了 12 格?

傳統做法會先照「最長可能長度」替每個請求預留一整段連續空間。實際只用到 8 格時,剩下 4 格沒有資料卻被鎖著、別人也不能用,這就是預留造成的浪費(內部碎片)。

Paged Attention 怎麼解決?

把快取切成固定大小的小頁,需要幾頁就配幾頁。頁面不必放在一起,靠一張對照表(block table)記錄「這個請求的第幾頁在哪裡」,所以不再需要一整段連續空間,浪費只剩下最後一頁沒用滿的部分。

Continuous Batching 跟固定批次差在哪?

固定批次要整批都跑完才換下一批,先做完的位置只能空等。Continuous Batching 是每一輪檢查一次,只要有請求完成就立刻補新的人進來,同樣的硬體能在同樣時間內服務更多請求。

vLLM 是什麼?

把 Paged Attention 與 Continuous Batching 這些能力整合起來的開源 LLM 推論/Serving 引擎,可在自建環境啟動 OpenAI 相容 API。重點是讓服務少浪費、吞吐更高,而不是讓模型本身變聰明。