<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Prefix Caching on YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/prefix-caching/</link><description>Recent content in Prefix Caching on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 11 Sep 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/prefix-caching/feed.xml" rel="self" type="application/rss+xml"/><item><title>vLLM Intro Part 2 — PagedAttention 與 KV Cache — 把作業系統的分頁搬進 GPU</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/vllm-intro-part2-paged-attention-kv-cache-zh/</link><pubDate>Fri, 11 Sep 2026 10:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/vllm-intro-part2-paged-attention-kv-cache-zh/</guid><description>大多數人理解 KV cache 的方式，是「把算過的 K 和 V 存起來，下次不用重算」，然後就不再想這件事。 真正的答案是：KV cache 不是一個快取，它是一個動態成長、生命週期不可預測、大小可達模型權重數倍的堆積區——它是 GPU 上的 malloc 問題，而不是 memoization 問題。 把它當快取寫，你會浪費 70% 的記憶體。 把它當作業系統的虛擬記憶體寫，你會拿回那 70%。
前言 Part 1 建立了地圖，也留下一個結論：記憶體就是吞吐量。這一篇把那句話展開成機制。
主角是 vLLM 論文的同名貢獻——PagedAttention。它的核心洞見用一句話講完：KV cache 的記憶體管理問題，和作業系統管理虛擬記憶體的問題，是同一個問題。 因此 OS 五十年來的答案——分頁、頁表、寫入時複製、換頁、LRU——可以整套搬過來。
本篇的目標：讀完之後，你知道一個 block 裡實際躺著什麼、block table 長什麼樣、前綴命中怎麼判定不會出錯、以及在你的硬體上該把 --block-size 和 --kv-cache-dtype 設成什麼。
一、核心問題：連續配置的三種浪費 先看清楚被 PagedAttention 取代的東西。傳統推論框架為每個序列配一段連續的 KV 空間，長度是 max_model_len：
GPU KV 記憶體（連續配置） 序列 A：max_len=2048，實際只生成 120 個 token ┌──────────────────────────────────────────────────────────┐ │████████│░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│ │ 已用 │ 預留但永遠用不到 │ │ 120 │ 1928 │ └──────────────────────────────────────────────────────────┘ ↑ 內部碎片（internal fragmentation）：94% 浪費 序列 B 結束後釋放，留下一個 2048 的洞： ┌────────┬──────────────┬────────┬──────────────┬──────────┐ │ 序列 C │ ░░ 空洞 ░░ │ 序列 D │ ░░ 空洞 ░░ │ 未配置 │ └────────┴──────────────┴────────┴──────────────┴──────────┘ ↑ 外部碎片：總量夠但沒有夠大的連續段 序列 E 要做 n=4 的平行取樣，共用同一個 prompt： ┌──────────────┬──────────────┬──────────────┬──────────────┐ │ prompt KV ×1 │ prompt KV ×2 │ prompt KV ×3 │ prompt KV ×4 │ └──────────────┴──────────────┴──────────────┴──────────────┘ ↑ 完全相同的內容存了 4 份：無法共享 vLLM 論文對既有系統的量測結論是：60%–80% 的 KV 記憶體因碎片化與過度預留而浪費。也就是說，一張 80 GB 的卡上，實際承載有效 KV 的可能只有 15 GB。</description></item></channel></rss>