【大模型知识点】什么是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.mzph.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…