【大模型知識點】什么是KV Cache?為什么要使用KV Cache?使用KV Cache會帶來什么問題?

1.什么是KV Cache?為什么要使用KV Cache?

理解此問題,首先需理解自注意機制的計算和掩碼自注意力機制,在Decoder架構的模型中,每生成一個新的token,便需要重新執行一次自注意力計算,這個過程中,由于Decoder的掩碼自注意力機制,導致存在大量的冗余重復計算(原因可參考大模型推理加速:看圖學KV Cache),為了避免這種重復計算,提升推理效率,提出了KV Cache,即KV緩存,是指每次Decoder生成next token的過程中,將之前計算自注意力機制中K和V矩陣緩存下來,從而在生成當前token的時候避免重復之前的計算(為什么可以直接使用K和V的緩存值,而無需重復計算,可參考:大模型推理加速:看圖學KV Cache)

總結使用KV Cache的原因:

  • 提升推理速度: 在自回歸生成任務中,每次生成新 token 時,模型需要計算當前 token 與之前所有 token 的注意力分數。如果不使用 KV Cache,每次生成新 token 都需要重新計算之前所有 token 的 Key 和 Value,這會導致計算量隨著序列長度呈二次方增長,顯著增加推理時間和計算資源的消耗。使用 KV Cache 可以將計算復雜度從 O(n^2) ) 降低到 O(n),顯著減少計算量。
  • 降低計算資源消耗: 通過減少重復計算,KV Cache 可以降低對計算資源(如 CPU 和 GPU)的需求

因此,使用KV Cache后,對于生成的每個新token,不需要傳入整個序列,只需計算新的token情況,因此可以避免重新計算整個注意力矩陣。只需要以下面的方式對新token進行操作:

  1. 僅為新token計算新的 q、k、v 行。
  2. 新的 q 行將立即被使用。(這也解釋了為什么沒有查詢緩存)
  3. 將新的鍵、值附加到現有的 K、V 緩存中。
  4. 通過新的 q 行和 k_cache 的轉置進行矩陣向量乘法來計算新的注意力行。 通過新的注意力行和 v_cache的轉置進行矩陣向量乘法來計算新的 v 行。
  5. 輸出(僅針對最新標記)被傳遞到下一層。
    此步驟說明參考:【大模型理論篇】Transformer KV Cache原理深入淺出

以下是一個具體的 with KV Cache和 without KV Cache對比, 因此,KV Cache可通過增加內存使用來節省重復計算,以空間換時間。

在這里插入圖片描述
2. 使用KV Cache會帶來什么問題?

  • ** KV Cache占用大:** KV Cache 隨著序列長度的增加會占用大量顯存資源。

    KV Cache的顯存占用分析,假設模型的參數配置信息如下(參考【大模型理論篇】Transformer KV Cache原理深入淺出):

Transformer 中有 n_layers 個層塊。
每個層塊中有一個多頭注意力層。
每個多頭注意力層有 n_heads個注意力頭,每個頭的 k 和 v 的尺寸為 d_head。
需要為 K 和 V 都緩存一份。
最大上下文長度為 n_context。
精度為 n_bytes,例如對于 FP32 是 4。
推理時的批量大小為 batch_size。

那么總的顯存大小為:

kv_cache_size = n_layers * n_heads * 2 * n_context * d_head * n_bytes * batch_size

簡化后為:

kv_cache_size = 2 * n_bytes * n_layers * d_model * n_context * batch_size

例如,針對 OPT-30B 模型的KV Cache顯存計算:

n_bytes = 2(FP16)
n_layers = 48
d_model = 7168
n_context = 1024
batch= 128
計算結果為 180,388,626,432 字節,約為 168 GB。

  • 顯存管理復雜: KV Cache 的大小與序列長度和批量大小動態相關,容易導致顯存碎片化和顯存容量不足的問題。
  • 資源開銷: 雖然 KV Cache 提高了推理速度,但需要額外的顯存來存儲緩存數據,這增加了硬件資源的需求

3. 如何緩解KV Cache帶來的問題?

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

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

相關文章

【STM32】HAL庫Host MSC讀寫外部U盤及FatFS文件系統的USB Disk模式

【STM32】HAL庫Host MSC讀寫外部U盤及FatFS文件系統的USB Disk模式 在先前 分別介紹了FatFS文件系統和USB虛擬U盤MSC配置 前者通過MCU讀寫Flash建立文件系統 后者通過MSC連接電腦使其能夠被操作 這兩者可以合起來 就能夠實現同時在MCU、USB中操作Flash的文件系統 【STM32】通過…

1.1計算機的發展

一、計算機系統的概念 1、計算機系統軟件+硬件 軟件:由具有各種特殊功能的程序組成。 硬件:計算機的實體。如:主機、外設等。 硬件決定了計算機系統的上限,軟件決定了硬件性能發揮了多少。 2、軟件 軟件有系統軟…

本地生活服務平臺開發進入發展熱潮

本地生活服務平臺:當下的發展熱潮 本地生活服務平臺開發模式 在當今數字化時代,本地生活服務平臺開發已成為人們日常生活中不可或缺的一部分。只需動動手指,打開手機上的 APP,就能輕松滿足各類生活需求。像某團、餓XX這樣的平臺&a…

LSTM變種模型

GRU GRU簡介 門控循環神經網絡 (Gated Recurrent Neural Network,GRNN) 的提出,旨在更好地捕捉時間序列中時間步距離較大的依賴關系。它通過可學習的門來控制信息的流動。其中,門控循環單元 (Gated Recurrent Unit , GRU) 是…

詳解tensorflow的tensor和Python list及Numpy矩陣的區別

TensorFlow中的張量(tensor)、Python列表和NumPy矩陣在數據結構和功能上有一些顯著的區別。以下是它們的詳細介紹及代碼示例。 1、Python List 定義:Python列表是一種內置的數據結構,可以存儲不同類型的對象,包括數字…

多模態模型詳解

多模態模型是什么 多模態模型是一種能夠處理和理解多種數據類型(如文本、圖像、音頻、視頻等)的機器學習模型,通過融合不同模態的信息來提升任務的性能。其核心在于利用不同模態之間的互補性,增強模型的魯棒性和準確性。 如何融合…

微服務與網關

什么是網關 背景 單體項目中,前端只用訪問指定的一個端口8080,就可以得到任何想要的數據 微服務項目中,ip是不斷變化的,端口是多個的 解決方案:網關 網關:就是網絡的關口,負責請求的路由、轉發…

二分算法篇:二分答案法的巧妙應用

二分算法篇:二分答案法的巧妙應用 那么看到二分這兩個字想必我們一定非常熟悉,那么在大學期間的c語言的教學中會專門講解二分查找,那么我們來簡單回顧一下二分查找算法,我們知道二分查找是在一個有序的序列中尋找一個數在這個序列…

XZ_Mac電腦上本地化部署DeepSeek的詳細步驟

根據您的需求,以下是Mac電腦上本地化部署DeepSeek的詳細步驟: 一、下載并安裝Ollama 訪問Ollama官網: 打開瀏覽器,訪問 Ollama官網。 下載Ollama: 在官網中找到并點擊“Download”按鈕,選擇適合Mac系統的…

C# OpenCV機器視覺:模仿Halcon各向異性擴散濾波

在一個充滿創意與挑戰的圖像處理工作室里,阿強是一位熱情的圖像魔法師。他總是在追求更加出色的圖像效果,然而,傳統的圖像處理方法有時候并不能滿足他的需求。 有一天,阿強聽說了 Halcon 中的各向異性擴散濾波功能,它…

實現:多活的基礎中間件

APIRouter : 路由分發服務 API Router 是一個 HTTP 反向代理和負載均衡器,部署在公有云中作為 HTTP API 流量的入口,它能識別 出流量的歸屬 shard ,并根據 shard 將流量轉發到對應的 ezone 。 API Router 支持多種路由鍵&am…

Python3連接MongoDB并寫入數據

個人博客地址:Python3連接MongoDB并寫入數據 | 一張假鈔的真實世界 安裝PyMongo $ pip3 install pymongo Successfully installed pymongo-3.7.2 連接MongoDB并且批量插入操作 #!/usr/bin/python3import mysql.connector import gzip import json from pymongo …

Python 操作 MongoDB 教程

一、引言 在當今數字化時代,數據的存儲和管理至關重要。傳統的關系型數據庫在處理一些復雜場景時可能會顯得力不從心,而 NoSQL 數據庫應運而生。MongoDB 作為一款開源的、面向文檔的 NoSQL 數據庫,憑借其高性能、高可擴展性和靈活的數據模型…

使用 Python-pptx 庫提取 PPTX 文件中的結構與文字

是的,使用 python-pptx 庫是提取 PPTX 文件中結構和文字的理想選擇,原因如下: 專門處理 PPTX 格式 python-pptx 是一個專門為處理 PPTX 文件(.pptx 格式)而設計的 Python 庫。 它可以讀取和操作 PPTX 文件的內部結構…

DeepSeek本地化部署

DeepSeek本地化部署 本教程為一鍵式部署,適合于mac、ubuntu、windows。【開源地址】 環境要求 nodejs > 18Python > 3.10.12 步驟一:安裝ollama客戶端 官網直接安裝,ollama官網。安裝完成后使用命令:ollama -h&#xf…

驅動開發系列34 - Linux Graphics Intel 動態顯存技術的實現

一:概述 動態顯存技術(Dynamic Video Memory Technology, DVMT)是一種由 Intel 提出的內存分配技術,主要用于整合顯卡(集成顯卡)系統中,以便動態地調整顯存大小,從而在不同的負載場景下優化內存使用和系統性能。 動態顯存技術的核心在于共享系統內存。集成顯卡沒有獨立…

DeepSeek 入駐 Cursor —— 表現能否超越 Claude?

DeepSeek 剛剛在 Cursor 平臺上線了它的兩款模型:DeepSeek V3 和 R1。目前,許多開發者(包括我們在內)主要依賴 Claude 3.5 Sonnet(最新版本 claude-3-5-sonnet-20241022)作為主要語言模型,因此我…

持久性HTTPVS.非持久性HTTP

1. HTTP協議基礎 HTTP(HyperText Transfer Protocol)是Web通信的核心協議,定義了客戶端(瀏覽器)與服務器之間傳輸數據的規則。 在HTTP/1.0及之前的版本中,默認使用非持久性連接,而HTTP/1.1及更…

大數據與大模型:數字時代的共生力量

引言:大數據與大模型的嶄新時代 在數字化浪潮洶涌澎湃的當下,大數據與大模型無疑是最為耀眼的兩顆明星 ,深刻地改變著我們的生活、工作和思維方式。大數據,作為信息時代的寶藏,蘊含著無盡的價值。從電商平臺的海量交易…

中間件-redis-(ubantu)

1、安裝依賴包 sudo apt-get update sudo apt-get install redis 一旦安裝完成,Redis 服務將會自動啟動。想要檢查服務的狀態,輸入下面的命令: rootvims:/etc/redis# sudo systemctl status redis-server ● redis-server.service - Adva…