為啥大模型一般將kv進行緩存,而q不需要

1. 自回歸生成的特點

大模型(如 GPT 等)在推理時通常采用自回歸生成的方式:

  • 模型逐個生成 token,每次生成一個新 token 時,需要重新計算注意力。
  • 在生成第?t?個 token 時,模型需要基于前?t-1?個已生成的 token 來計算注意力權重。

由于自回歸生成是逐步進行的,k?和?v?的性質決定了它們可以被重復利用,而?q?則需要每次都重新計算。

2.?k?和?v?可以緩存的原因

(1)?k?和?v?是基于歷史 token 計算的
  • k?和?v?是從輸入序列的 token 中生成的,且它們只依賴于每個 token 的嵌入表示。
  • 在自回歸生成中,前?t-1?個 token 的?k?和?v?已經計算過,并且不會因為后續生成新 token 而改變。
  • 因此,這些?k?和?v?可以直接緩存下來,在生成新的 token 時重復使用。
(2)?k?和?v?是全局共享的
  • 在注意力機制中,所有 token 的?k?和?v?都會被集中起來形成全局的?K?和?V?矩陣,供當前 token 的?q?查詢。
  • 這意味著?k?和?v?的計算結果是可以復用的,無需每次重新生成。
(3)?減少重復計算
  • 如果不緩存?k?和?v,每次生成新 token 時都需要重新計算前?t-1?個 token 的?k?和?v,這會導致大量的冗余計算。
  • 緩存?k?和?v?后,只需在生成新 token 時計算該 token 對應的?k?和?v,并將其追加到緩存中即可。

3.?q?不需要緩存的原因

(1)?q?是針對當前 token 的
  • q?是由當前正在生成的 token 的嵌入表示計算得到的,因此它只與當前 token 相關。
  • 每次生成新 token 時,q?都會發生變化,無法復用之前的?q
  • 因此,沒有必要緩存?q
(2)?q?的計算成本較低
  • q?的計算只需要對當前 token 的嵌入表示進行一次線性變換即可完成,計算量相對較小。
  • 即使每次都重新計算?q,也不會顯著增加推理時間。

4.?緩存?k?和?v?的實際操作

在實際實現中,緩存?k?和?v?的流程如下:

  1. 初始化緩存:在生成第一個 token 時,計算該 token 的?k?和?v,并將它們存儲到緩存中。
  2. 追加緩存:在生成后續 token 時,計算新 token 的?k?和?v,并將其追加到現有的緩存中。
  3. 復用緩存:在計算注意力時,直接從緩存中讀取?k?和?v,而不需要重新計算。

這種方式可以顯著減少計算和內存訪問的開銷,尤其是在生成長序列時。

5.?為什么?k?和?v?的緩存對性能至關重要?

(1)?加速推理
  • 緩存?k?和?v?后,每次生成新 token 時只需要計算該 token 的?qk?和?v,而不需要重新計算整個序列的?k?和?v
  • 這使得推理速度大幅提高,尤其是在生成長序列時。
(2)?降低內存帶寬壓力
  • 如果不緩存?k?和?v,每次生成新 token 時都需要重新計算并加載前?t-1?個 token 的?k?和?v,這會對內存帶寬造成巨大壓力。
  • 緩存?k?和?v?后,可以直接從高速緩存中讀取,減少了內存訪問次數。
(3)?支持高效的硬件優化
  • 現代硬件(如 GPU 或 TPU)對矩陣運算有專門的優化,緩存?k?和?v?可以讓注意力計算更加高效。
  • 例如,通過批處理技術,可以一次性處理多個 token 的?k?和?v,從而充分利用硬件資源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79206.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3DGS-slam:splatam公式

配套講解視頻:https://www.bilibili.com/video/BV1ZgfBYdEpg/?spm_id_from333.1387.homepage.video_card.click&vd_sourced4c3e747c32049ddd90dcce17208f4e0 1、多維高斯分布公式: 對于多維(多變量)高斯分布,概率密度函數的…

從Dockerfile 構建docker鏡像——保姆級教程

從Dockfile開始 dockerfile簡介開始構建1、編輯dockerfile2、構建鏡像3、拉取鏡像4、推送到鏡像倉庫 鏡像的優化1、優化的基本原則2、多階段構建 dockerfile簡介 開始構建 1、編輯dockerfile # 使用官方的 Python 3.8 鏡像作為基礎鏡像 FROM python:3.8-slim# 設置工作目錄 …

開元類雙端互動組件部署實戰全流程教程(第2部分:控制端協議拆解與機器人邏輯調試)

作者:那個寫了個機器人結果自己被踢出房間的開發者 游戲邏輯房間結構參考界面 從這張圖我們能看出,該組件按功能結構細分為多個房間,每個房間底注、準入標準不同,對應的控制模塊也有層級區分。常規來說,一個“互動房間…

[特征工程]機器學習-part2

1 特征工程概念 特征工程:就是對特征進行相關的處理 一般使用pandas來進行數據清洗和數據處理、使用sklearn來進行特征工程 特征工程是將任意數據(如文本或圖像)轉換為可用于機器學習的數字特征,比如:字典特征提取(特征離散化)、文本特征提取、圖像特征提取。 特征工程步驟…

[數據庫之十一] 數據庫索引之聯合索引

執行數據庫查詢時,通常查詢條件是多對個屬性進行判斷和約束,對于這種類型的查詢,如果存在多個索引則使用多個索引,或者使用建立在多屬性搜索碼上的索引,這樣能提高查詢效率。 一、使用多個單碼索引 假設數據表 instruc…

增強學習(Reinforcement Learning)簡介

增強學習(Reinforcement Learning)簡介 增強學習是機器學習的一種范式,其核心目標是讓智能體(Agent)通過與環境的交互,基于試錯機制和延遲獎勵反饋,學習如何選擇最優動作以最大化長期累積回報。…

PaddlePaddle 和PyTorch選擇與對比互斥

你遇到的錯誤信息如下: RuntimeError: (PreconditionNotMet) Tensors dimension is out of bound.Tensors dimension must be equal or less than the size of its memory.But received Tensors dimension is 8, memorys size is 0.[Hint: Expected numel() * Size…

vison transformer vit 論文閱讀

An Image is Worth 16x16 Words 20年的論文看成10年的哈斯我了 [2010.11929] 一張圖像勝過 16x16 個單詞:用于大規模圖像識別的轉換器 --- [2010.11929] An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 為什么transformer好訓練&am…

依賴關系-根據依賴關系求候選碼

關系模式R(U, F), U{},F是R的函數依賴集,可以將屬性分為4類: L: 僅出現在依賴集F左側的屬性 R: 僅出現在依賴集F右側的屬性 LR: 在依賴集F左右側都出現的屬性 NLR: 在依賴集F左右側都未出現的屬性 結論1: 若X是L類…

SAP note 3565626 : Baltimore CyberTrust 根證書即將過期

SAP note 3565626 : Baltimore CyberTrust 根證書即將過期 20250512 2025年5月9日 癥狀 您已收到來? SAP Integration Suite/Cloud Integration 服務的通知郵件, 建議 Baltimore CyberTrust 根證書將于 2025 年 5 ? 12 ? 過期,其中 Balt…

算法精講:字母異位詞分組問題剖析

算法精講:字母異位詞分組問題剖析 一、引言 在算法的學習與實踐中,字符串相關的問題一直是重點和難點。今天我們要深入探討的“字母異位詞分組”問題,不僅考驗對字符串操作的理解,還涉及到數據結構的巧妙運用。通過解決這個問題,我們能進一步提升算法思維和代碼實現能力。…

【每日八股】復習 Redis Day7:應知應會的 33 條 Redis 基礎八股文

應知應會的 33 條 Redis 基礎八股文 今天對 Redis 八股文進行收官總結,共收錄了 33 條基礎八股文。 文章目錄 應知應會的 33 條 Redis 基礎八股文Redis 持久化簡述 Redis 持久化的兩種策略?AOF 的三種持久化策略?AOF 磁盤重寫機制&#xf…

k8s之探針

探針介紹: 編排工具運行時,雖說pod掛掉會在控制器的調度下會重啟,出現pod重啟的時候,但是pod狀態是running,無法真實的反應當時pod健康狀態,我們可以通過Kubernetes的探針監控到pod的實時狀態。 Kubernetes三種探針類…

記9(Torch

目錄 1、Troch 1、Troch 函數說明舉例torch.tensor()torch.arange()創建張量創建一個標量:torch.tensor(42)創建一個一維張量:torch.tensor([1, 2, 3])創建一個二維張量:torch.tensor([[1, 2], [3, 4]])生成一維等差張量:語法&am…

flask開啟https服務支持

目錄 一、背景 二、開啟https支持 三、自簽名 1、安裝openssl 2、驗證安裝 3、自簽名 四、編寫代碼 五、訪問https接口 一、背景 最近在做自動化業務,需要兼容現在主流的框架開發的前端頁面,于是到github找到了幾個項目,clone下來項目并…

路由交換實驗

案例一:實施和配置RIPV2 1.給AR1配置接口 查看R1接口配置情況 2.配置三臺路由的RIP協議,版本為version2 ,關閉自動匯總,通告所有的直連接口 案例二:配置多區域的OSPF協議 1.配置R1的接口IP地址參數 2.配置r2,r3的接口參…

北斗導航 | RTKLib中重難點技術,公式,代碼

Rtklib 一、抗差自適應卡爾曼濾波1. **核心難點**2. **公式與代碼實現**二、模糊度固定與LAMBDA算法1. **核心難點**2. **LAMBDA算法實現**3. **部分模糊度固定技術**三、偽距單點定位與誤差修正1. **多系統多頻點修正**2. **接收機鐘差與系統間偏差**四、動態模型與周跳處理1.…

RT-Thread 深入系列 Part 2:RT-Thread 內核核心機制深度剖析

摘要: 本文從線程管理、調度器原理、中斷處理與上下文切換、IPC 同步機制、內存管理五大核心模塊出發,深入剖析 RT-Thread 內核實現細節,并輔以源碼解讀、流程圖、時序圖與性能數據。 目錄 線程管理與調度器原理 1.1 線程控制塊(TCB)結構 1.2 就緒隊列與優先級調度 1.3 時…

STM32部分:3、STM32CubeMX 工程創建

飛書文檔https://x509p6c8to.feishu.cn/wiki/LfMpwjktZiMAuMkayt6c0LGZnpx 1、打開STM32CUBEMX,選擇File->New Project 如果首次使用,可能會自動下載一些依賴包,可以等待下載完成。 2、選擇對應芯片 MCU/MPU Selector->輸入“STM32F1…

第十五章,SSL VPN

前言 IPSec 和 SSL 對比 IPSec遠程接入場景---client提前安裝軟件,存在一定的兼容性問題 IPSec協議只能夠對感興趣的流量進行加密保護,意味著接入用戶需要不停的調整策略,來適應IPSec隧道 IPSec協議對用戶訪問權限顆粒度劃分的不夠詳細&…