KV Cache 是大語(yǔ)言模型、Transformer、文本生成、推理加速和大模型部署中非常重要的一個(gè)術(shù)語(yǔ)。KV 是 Key-Value 的縮寫,Cache 表示緩存,因此 KV Cache 可以理解為“鍵值緩存”。它用來(lái)描述一種在大語(yǔ)言模型生成文本時(shí),把已經(jīng)計(jì)算過(guò)的 Key 和 Value 保存下來(lái)、后續(xù)生成時(shí)直接復(fù)用的機(jī)制。換句話說(shuō),KV Cache 是在回答:模型為什么能更快地一個(gè) token 一個(gè) token 生成文本。
在 GPT 這類自回歸模型中,文本不是一次性全部生成出來(lái)的,而是每次生成一個(gè) token。每生成一個(gè)新 token,模型都需要根據(jù)已有上下文計(jì)算注意力。如果每一步都重新計(jì)算所有歷史 token 的注意力表示,計(jì)算量會(huì)非常大。KV Cache 的作用,就是把歷史 token 的 Key 和 Value 緩存起來(lái),避免重復(fù)計(jì)算。
因此,KV Cache 常用于大語(yǔ)言模型推理、對(duì)話生成、長(zhǎng)文本生成、流式輸出、本地部署和推理服務(wù)優(yōu)化中,是理解大模型推理性能的重要基礎(chǔ)概念。
一、基本概念:什么是 KV Cache
KV Cache 是 Transformer 自注意力機(jī)制中的一種緩存技術(shù)。
在注意力機(jī)制中,每個(gè) token 通常會(huì)被映射成三類向量:Query、Key、Value。
它們常簡(jiǎn)寫為 Q、K、V,其中:
? Q 表示當(dāng)前 token 發(fā)出的查詢
? K 表示各 token 可被匹配的鍵
? V 表示各 token 攜帶的信息內(nèi)容
注意力機(jī)制可以簡(jiǎn)化表示為:
其中:
? Q 表示查詢矩陣
? K 表示鍵矩陣
? V 表示值矩陣
? d_k 表示 Key 向量維度
? softmax 用于把相似度轉(zhuǎn)換為注意力權(quán)重
在自回歸生成中,歷史 token 的 K 和 V 一旦計(jì)算出來(lái),在后續(xù)步驟中通常不會(huì)改變。于是可以把它們保存起來(lái)。這就是 KV Cache。
從通俗角度看:KV Cache 就像模型的“上下文計(jì)算筆記”。前面已經(jīng)讀過(guò)的內(nèi)容,不必每次都重新讀一遍,而是把關(guān)鍵結(jié)果保存下來(lái),后面繼續(xù)生成時(shí)直接查用。
二、為什么需要 KV Cache
大語(yǔ)言模型生成文本時(shí),通常是逐 token 生成。
例如:人工智能 → 正在 → 改變 → 世界。
當(dāng)模型生成“改變”時(shí),需要參考前面的“人工智能 正在”。
當(dāng)模型繼續(xù)生成“世界”時(shí),又需要參考“人工智能 正在 改變”。
如果沒(méi)有 KV Cache,每一步都要重新計(jì)算所有歷史 token 的 K 和 V。生成越長(zhǎng),重復(fù)計(jì)算越多。
可以簡(jiǎn)單理解為:
? 無(wú) KV Cache:每生成一步,都重新計(jì)算全部上下文
? 有 KV Cache:歷史 K、V 復(fù)用,只計(jì)算新 token
![]()
圖 1:無(wú)緩存與有 KV Cache 對(duì)比
從通俗角度看:沒(méi)有 KV Cache,模型像每寫一個(gè)字都重新通讀全文。有了 KV Cache,模型像保留了閱讀筆記,每次只處理新加入的內(nèi)容。
這能明顯提升生成速度,尤其是在長(zhǎng)文本、長(zhǎng)對(duì)話和流式輸出場(chǎng)景中。
三、KV Cache 如何工作
KV Cache 的基本工作流程可以分為兩部分。
![]()
圖 2:KV Cache 生成步驟解析
1、首輪輸入:建立緩存
用戶輸入提示詞后,模型會(huì)一次性處理這些 token。
例如:
請(qǐng)解釋什么是機(jī)器學(xué)習(xí)
模型會(huì)為每一層、每個(gè)注意力頭計(jì)算對(duì)應(yīng)的 K 和 V,并把它們保存到緩存中。
可以簡(jiǎn)單表示為:輸入 token → 計(jì)算 K、V → 寫入 KV Cache。
2、逐步生成:復(fù)用緩存
當(dāng)模型生成新 token 時(shí),只需要計(jì)算這個(gè)新 token 的 Q、K、V。
然后:
? 新 token 的 Q 會(huì)和緩存中的歷史 K 做注意力匹配
? 注意力權(quán)重會(huì)作用在緩存中的歷史 V 上
? 新 token 的 K、V 會(huì)追加到 KV Cache 中
可以概括為:新 token → 計(jì)算新 K、V → 讀取歷史 K、V → 生成下一個(gè) token → 更新緩存。
從通俗角度看:KV Cache 不是保存最終答案,而是保存注意力機(jī)制已經(jīng)計(jì)算好的歷史上下文信息。
四、沒(méi)有 KV Cache 與有 KV Cache 的區(qū)別
1、沒(méi)有 KV Cache
假設(shè)已經(jīng)生成了 1000 個(gè) token,要生成第 1001 個(gè) token。
如果沒(méi)有 KV Cache,模型需要重新處理前面 1000 個(gè) token,重新計(jì)算它們?cè)诟鲗又械?K 和 V。這會(huì)造成大量重復(fù)計(jì)算。
2、有 KV Cache
如果有 KV Cache,前面 1000 個(gè) token 的 K 和 V 已經(jīng)保存。
生成第 1001 個(gè) token 時(shí),只需要計(jì)算新 token 的 K 和 V,并與歷史緩存交互。
因此,KV Cache 可以把重復(fù)計(jì)算顯著減少。
可以概括為:
? 無(wú)緩存:重復(fù)算歷史
? 有緩存:只算新增 token
3、速度與顯存的交換
KV Cache 的本質(zhì)是一種“用顯存換速度”的技術(shù)。它減少了重復(fù)計(jì)算,但需要保存大量 K 和 V。因此,它會(huì)增加顯存占用。
從工程角度看:KV Cache 提升生成速度,但會(huì)消耗更多顯存。
這也是長(zhǎng)上下文推理時(shí)顯存壓力很大的重要原因之一。
五、KV Cache 為什么會(huì)占顯存
KV Cache 需要為每一層、每個(gè)注意力頭、每個(gè)歷史 token 保存 K 和 V。
![]()
圖 3:KV Cache 與顯存、上下文長(zhǎng)度的關(guān)系
因此,它的大小與以下因素有關(guān):
? batch size
? 上下文長(zhǎng)度
? 模型層數(shù)
? 注意力頭數(shù)量
? 每個(gè)頭的維度
? 數(shù)據(jù)精度
可以簡(jiǎn)化理解為:
其中:
? B 表示 batch size
? L 表示上下文長(zhǎng)度
? N 表示層數(shù)
? H 表示注意力頭數(shù)
? D 表示每個(gè)頭的維度
從通俗角度看:
? 上下文越長(zhǎng),要保存的歷史 K、V 越多
? 并發(fā)越高,要為更多請(qǐng)求保存緩存
? 模型越大,每個(gè) token 對(duì)應(yīng)的緩存也越大
因此,長(zhǎng)上下文和高并發(fā)服務(wù)常常會(huì)受到 KV Cache 顯存占用限制。
六、KV Cache 與上下文窗口
上下文窗口越長(zhǎng),KV Cache 越重要,也越占顯存。
例如,一個(gè)模型支持 8K、32K、128K 甚至更長(zhǎng)上下文時(shí),模型需要保存更多歷史 token 的 K 和 V。
這帶來(lái)兩個(gè)影響。
1、長(zhǎng)上下文生成更依賴緩存
如果沒(méi)有 KV Cache,長(zhǎng)文本生成會(huì)非常慢。
因?yàn)槊恳徊蕉家匦掠?jì)算大量歷史 token。
2、長(zhǎng)上下文占用更多顯存
KV Cache 會(huì)隨上下文長(zhǎng)度增長(zhǎng)而增長(zhǎng)。
因此,長(zhǎng)上下文模型雖然能處理更多內(nèi)容,但部署時(shí)需要更大的顯存預(yù)算。
從通俗角度看:上下文窗口像模型能同時(shí)參考的“閱讀范圍”。KV Cache 像為這段閱讀范圍保存的“計(jì)算筆記”。閱讀范圍越大,筆記也越厚。
七、KV Cache 與量化
KV Cache 也可以量化。
在大模型部署中,除了量化模型權(quán)重,也可以嘗試量化 KV Cache。
例如:FP16 KV Cache → INT8 KV Cache。
這樣可以減少顯存占用。
不過(guò),KV Cache 量化可能影響生成質(zhì)量,尤其在長(zhǎng)上下文和復(fù)雜推理中需要謹(jǐn)慎評(píng)估。
可以概括為:
? 權(quán)重量化:減少模型參數(shù)占用
? KV Cache 量化:減少生成過(guò)程中的上下文緩存占用
從實(shí)踐角度看,KV Cache 優(yōu)化是長(zhǎng)上下文推理、高并發(fā)服務(wù)和本地部署中的重要方向。
八、KV Cache 的優(yōu)勢(shì)、局限與常見誤解
1、KV Cache 的主要優(yōu)勢(shì)
KV Cache 最大的優(yōu)勢(shì)是加速自回歸生成。
它可以:
? 減少重復(fù)計(jì)算
? 提高生成速度
? 支持流式輸出
? 提升長(zhǎng)文本生成效率
? 改善對(duì)話系統(tǒng)響應(yīng)體驗(yàn)
從通俗角度看:KV Cache 讓模型不用反復(fù)“重讀歷史”,所以生成更快。
2、KV Cache 的主要局限
KV Cache 也有明顯局限。
首先,它會(huì)增加顯存占用。
尤其在長(zhǎng)上下文、高并發(fā)、多輪對(duì)話中,KV Cache 可能成為顯存瓶頸。
其次,它主要適用于自回歸生成。
對(duì)于一次性編碼任務(wù),KV Cache 的作用并不相同。
再次,KV Cache 不會(huì)提高模型本身的知識(shí)水平或推理能力。
它只是推理加速機(jī)制,不是訓(xùn)練方法,也不是模型能力增強(qiáng)方法。
3、常見誤解
誤解一:KV Cache 會(huì)讓模型更聰明。
不對(duì)。它主要讓模型生成更快,不會(huì)直接提高模型質(zhì)量。
誤解二:KV Cache 可以減少所有顯存。
不對(duì)。它減少重復(fù)計(jì)算,但會(huì)額外保存 K、V,因此通常增加緩存顯存。
誤解三:上下文越長(zhǎng),速度一定越快。
不對(duì)。KV Cache 能避免重復(fù)計(jì)算,但長(zhǎng)上下文仍會(huì)帶來(lái)更大的注意力計(jì)算和緩存開銷。
誤解四:KV Cache 和模型參數(shù)是一回事。
不對(duì)。模型參數(shù)是訓(xùn)練得到的權(quán)重;KV Cache 是推理過(guò)程中根據(jù)當(dāng)前上下文臨時(shí)生成的緩存。
九、Python 示例
下面用簡(jiǎn)化示例幫助理解 KV Cache 的思想。
示例 1:用字典模擬緩存
這個(gè)例子表示:歷史 token 的 K 和 V 被保存起來(lái),后續(xù)可以復(fù)用。
示例 2:生成新 token 時(shí)追加緩存
生成新 token 后,它的 K 和 V 會(huì)追加到 KV Cache 中。
示例 3:復(fù)用歷史 K、V
這個(gè)例子展示了:當(dāng)前 token 的 Q 會(huì)與歷史 K、V 交互,從而利用已有上下文。
示例 4:緩存長(zhǎng)度隨生成增長(zhǎng)
隨著生成繼續(xù),KV Cache 會(huì)不斷增長(zhǎng)。這說(shuō)明:生成越長(zhǎng),緩存越大。
小結(jié)
KV Cache 是大語(yǔ)言模型推理中的鍵值緩存機(jī)制,用來(lái)保存歷史 token 在注意力機(jī)制中的 Key 和 Value。它可以避免每一步生成時(shí)重復(fù)計(jì)算歷史上下文,從而顯著加快自回歸生成速度。但 KV Cache 會(huì)占用額外顯存,并且隨著上下文長(zhǎng)度和并發(fā)數(shù)量增加而增長(zhǎng)。對(duì)初學(xué)者而言,可以把 KV Cache 理解為:模型生成文本時(shí)保存的“上下文計(jì)算筆記”。
“點(diǎn)贊有美意,贊賞是鼓勵(lì)”
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.