推論與服務部署

鍵值快取的記憶體成本(KV cache memory cost)

大家以為填滿 GPU 的是模型權重,但對長對話而言,鍵值快取可以遠遠把權重比下去。你保留在脈絡裡的每個詞元,都在每一層帶著一個鍵向量和一個值向量,而這一堆會隨脈絡長度、隨並行使用者人數而線性成長——這兩個乘數很快就會變大。

粗略地說,快取大小約等於二(鍵與值)乘以層數、乘以鍵值頭數、乘以每個頭的維度、乘以詞元數、乘以每個數字佔的位元組,再對所有作用中的請求加總。長脈絡或大批次會讓這個值迅速倍增,一旦超出顯示記憶體,伺服器就得逐出詞元或拒絕請求。這正是為什麼長脈絡視窗的服務成本確實高昂,也是為什麼分組查詢注意力、鍵值快取量化與分頁全都存在:它們各自都在攻擊這個不斷成長的成本。

\text{KV bytes} \approx 2 \cdot n_{\text{layers}} \cdot n_{\text{kv-heads}} \cdot d_{\text{head}} \cdot T \cdot b

單一請求:脈絡中有 T 個詞元、每個數字佔 b 位元組;乘上批次大小即為整台伺服器的用量。