返回首頁

推論系統

vToken 以 token 級虛擬化回收 KV cache,單張 H100 吞吐最高提高 37%

vToken 在 PagedAttention 區塊之上加入 token 對實體位置的映射,將淘汰後散落的 KV 空洞重新壓實。vLLM 原型最多減少 72.3% 保留區塊,但測試仍限於單機單卡與 7B、8B 級模型。

Raymangold22 · CC0 · Image source
zh-Hant

LLM 服務通常用 PagedAttention 把 KV cache 切成固定大小區塊,避免配置器層級的碎片;H2O、Scissorhands 等方法卻按單一 token 決定保留或淘汰。當同一區塊仍有一個有效 token,其他空位便不能交還資源池。vToken 的前測顯示,在 16K 上下文套用 token 級淘汰後,區塊內浪費可達 40%至60%。

vToken 在淘汰策略與實體區塊之間加入虛擬化層。每個請求的 TokenTable 記錄邏輯 token、存活狀態及目前的區塊與 offset;策略只標記失效 token,runtime 再於記憶體壓力升高時,把低使用率區塊內仍存活的 KV 搬到新位置。複製安排在 forward 完成後的獨立 CUDA stream,下一輪 attention 以 CUDA event 等待,因而毋須修改 PagedAttention kernel或重新擷取 CUDA Graph。16K 序列的映射 metadata 約為 256KB。

作者在 vLLM 0.18.0、PyTorch 2.10 與單張 80GB H100 上,測試 Mistral-7B、Llama-3.1-8B及額外的 Qwen2.5-14B容量案例。相較採用相同淘汰決策、但不壓實區塊的 Naive-Evict,vToken 減少 27.2%至72.3%保留區塊;Mistral-7B 的 SLA 約束吞吐提高 9.9%至37.3%,受限 KV 預算下的最高可行併發量最多翻倍。新淘汰策略所需的整合程式亦由逾500行降至50行以下。

這不是免費增加模型容量:搬移仍會與解碼競爭 GPU 資源,且 token 淘汰造成的品質損失仍由上層策略承擔。原型只涵蓋單節點、單 GPU fast path,共享前綴區塊更採保守的不搬移處理。下一步要觀察多卡張量平行、跨裝置 KV 搬移及混合工作負載下,壓實收益能否抵銷同步與頻寬成本。

來源

  1. vToken: Token-Level Virtualization for Reclaimable KV Caches
  2. Paged Attention design documentation