vLLM DeepSeek V4 支援:高效長上下文注意力

vLLM DeepSeek V4 支援:高效長上下文注意力

vLLM 現已支援 DeepSeek V4-Pro 與 V4-Flash,實作了一種新注意力機制,使上下文長度可達一百萬個 token,並大幅節省 KV cache 記憶體。

vLLM DeepSeek V4 支援:高效長上下文注意力

vLLM 宣布支援 DeepSeek V4 系列模型,包括 DeepSeek-V4-Pro(1.6T 參數)和 DeepSeek-V4-Flash(285B 參數)。這些模型採用專門的長上下文注意力機制,旨在擴展至一百萬個 token,同時大幅降低記憶體開銷與計算成本。

DeepSeek V4 注意力架構

DeepSeek V4 透過四項主要的架構創新,解決 KV 快取記憶體線性增長以及長上下文注意力的高計算成本問題:

  • 共享鍵和值向量:透過共享鍵和值向量,模型可達到 2 倍的記憶體節省。為了保持正確性,對注意力輸出套用 inverse RoPE 操作,以確保平移不變性。
  • KV 快取壓縮:模型在多個 token 上壓縮 KV 快取,透過兩種方法可達到 4 倍至 128 倍的記憶體節省:
    • c4a:將 KV 快取壓縮約 1/4;一個壓縮 token 代表 8 個未壓縮 token 的加權和,步幅為 4。
    • c128a:將 KV 快取壓縮約 1/128;一個壓縮 token 代表 128 個未壓縮 token 的加權和,步幅為 128。
  • DeepSeek Sparse Attention (DSA):即使在壓縮後(例如使用 c4a 時對 1M 序列的 250k token),仍保持計算受限,DSA 僅關注前 k 個壓縮 token。
  • 短滑動窗口:使用大小為 128 的滑動窗口來處理未壓縮 token 的局部資訊,使查詢 token 在到達壓縮邊界前能存取局部上下文。

這些最佳化帶來顯著的記憶體效能。DeepSeek V4 中的 1M 上下文序列每個序列僅需 9.62 GiB 的 KV cache(使用 bf16),約比 61 層 DeepSeek V3.2 風格堆疊所需的 83.9 GiB 小 8.7 倍。將索引器快取使用 fp4、注意力快取使用 fp8,可再將此大小約減半。

vLLM 實作與最佳化

在 vLLM 中實作 DeepSeek V4 需要解決與異質注意力類型及記憶體管理相關的複雜系統挑戰。

KV 快取記憶體管理

vLLM 採用三項策略,以保持 KV 快取的緊湊與高效:

  1. 單一邏輯區塊大小:vLLM 為所有壓縮層固定邏輯區塊為 256 個原生 token 位置。這使得分配器能使用一致的單位進行槽位映射與前綴命中偵測,無論層是 c4a(每區塊 64 個壓縮條目)或 c128a(每區塊 2 個壓縮條目)。
  2. 壓縮器狀態作為滑動窗口:為避免為滾動殘差(C4 為 8-token,C128 為 128-token)設置複雜的側緩衝區,vLLM 將壓縮器狀態視為滑動窗口 KV。這使系統能重用現有的前綴快取與分散式預填抽象。
  3. 統一頁面大小:透過仔細選擇區塊大小與壓縮比例,vLLM 將五層快取堆疊合併為 三個頁面大小桶。此舉消除跨池碎片化,並免除執行時重新分區的需求。

GPU 計算飽和度

為了最大化 GPU 使用率並減少 HBM 往返,vLLM 實作了多項 kernel 融合與多串流分割:

  • Kernel 融合
    • Compressor + RMSNorm + RoPE + cache insertion:將逐元素階段融合為單一 kernel,提供 1.4-3 倍的加速。
    • Inverse RoPE + fp8 quant:融合此兩項操作以避免 HBM 往返,產生 2-3 倍的加速。
    • Fused Q norm + KV RoPE + K insert:水平融合查詢與未壓縮 SWA 鍵的工作至單一 kernel,帶來 10-20 倍的加速。
  • 多串流分割:vLLM 在 CUDA 串流間交錯獨立操作。對於 c4a 層,索引器管線在獨立串流上與主要 KV 壓縮與 SWA token 插入平行執行,於低批次大小時將端到端延遲降低 5-6%。

部署與硬體支援

DeepSeek V4 支援 NVIDIA Hopper 與 Blackwell 架構。vLLM 提供針對單節點部署的最佳化 Docker 設定:

  • DeepSeek-V4-Pro:針對 8xB200 或 8xB300 GPU 進行最佳化。
  • DeepSeek-V4-Flash:針對 4xB200 或 4xB300 GPU 進行最佳化。

兩種設定皆使用 fp8 KV cache、區塊大小 256,並採用 deepseek_v4 分詞器與推理解析器。進一步的最佳化,包括 DeepGEMM MegaMoE kernel 與分頁預填 kernel,正於開發中。

Sources