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

本地生活服务平台开发进入发展热潮

本地生活服务平台:当下的发展热潮 本地生活服务平台开发模式 在当今数字化时代,本地生活服务平台开发已成为人们日常生活中不可或缺的一部分。只需动动手指,打开手机上的 APP,就能轻松满足各类生活需求。像某团、饿XX这样的平台&a…

LSTM变种模型

GRU GRU简介 门控循环神经网络 (Gated Recurrent Neural Network,GRNN) 的提出,旨在更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可学习的门来控制信息的流动。其中,门控循环单元 (Gated Recurrent Unit , GRU) 是…

微服务与网关

什么是网关 背景 单体项目中,前端只用访问指定的一个端口8080,就可以得到任何想要的数据 微服务项目中,ip是不断变化的,端口是多个的 解决方案:网关 网关:就是网络的关口,负责请求的路由、转发…

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

二分算法篇:二分答案法的巧妙应用 那么看到二分这两个字想必我们一定非常熟悉,那么在大学期间的c语言的教学中会专门讲解二分查找,那么我们来简单回顾一下二分查找算法,我们知道二分查找是在一个有序的序列中寻找一个数在这个序列…

C# OpenCV机器视觉:模仿Halcon各向异性扩散滤波

在一个充满创意与挑战的图像处理工作室里,阿强是一位热情的图像魔法师。他总是在追求更加出色的图像效果,然而,传统的图像处理方法有时候并不能满足他的需求。 有一天,阿强听说了 Halcon 中的各向异性扩散滤波功能,它…

实现:多活的基础中间件

APIRouter : 路由分发服务 API Router 是一个 HTTP 反向代理和负载均衡器,部署在公有云中作为 HTTP API 流量的入口,它能识别 出流量的归属 shard ,并根据 shard 将流量转发到对应的 ezone 。 API Router 支持多种路由键&am…

DeepSeek本地化部署

DeepSeek本地化部署 本教程为一键式部署,适合于mac、ubuntu、windows。【开源地址】 环境要求 nodejs > 18Python > 3.10.12 步骤一:安装ollama客户端 官网直接安装,ollama官网。安装完成后使用命令:ollama -h&#xf…

大数据与大模型:数字时代的共生力量

引言:大数据与大模型的崭新时代 在数字化浪潮汹涌澎湃的当下,大数据与大模型无疑是最为耀眼的两颗明星 ,深刻地改变着我们的生活、工作和思维方式。大数据,作为信息时代的宝藏,蕴含着无尽的价值。从电商平台的海量交易…

[2025年最新]2024.3版本idea无法安装插件问题解决

背景 随着大模型的持续发展,特别年前年后deepseek的优异表现,编程过程中,需要解决ai来辅助编程,因此需要安装一些大模型插件 问题描述 在线安装插件的时候会遇到以下问题: 1.数据一直在加载,加载的很满 2.点…

自动驾驶---如何打造一款属于自己的自动驾驶系统

在笔者的专栏《自动驾驶Planning决策规划》中,主要讲解了行车的相关知识,从Routing,到Behavior Planning,再到Motion Planning,以及最后的Control,笔者都做了相关介绍,其中主要包括算法在量产上…

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 一、引言 1、研究背景和意义 在现代数据科学领域,时间序列…

Jenkins+gitee 搭建自动化部署

Jenkinsgitee 搭建自动化部署 环境说明: 软件版本备注CentOS8.5.2111JDK1.8.0_211Maven3.8.8git2.27.0Jenkins2.319最好选稳定版本,不然安装插件有点麻烦 一、安装Jenkins程序 1、到官网下载相应的版本war或者直接使用yum安装 Jenkins官网下载 直接…

AI 编程开发插件codeium Windsurf(vscode、editor) 安装

1、vscode中安装: 2、vscode中使用 3、输入注册的账号密码,就可以使用。 4、或者直接下载editor 5、安装editor 下一步,下一步,直到安装成功,中间可以改下安装位置,如果C盘空间不够。 同样提示注册或者登录…

【Mac排错】ls: command not found 终端命令失效的解决办法

【TroubleShooting on Mac】ls: command not found 终端命令失效的解决办法 A Solution to Solve “Command not found” of Terminal on Mac 一直在使用心爱的MacBook Pro的Terminal,并且为她定制了不同的Profile。 这样,看起来她可以在不同季节&…

河北某石油管廊自动化监测

1. 项目简介 近年来,国家密集出台油气管道建设相关政策和规划引导中国油气管道加快建设,2017年,在《中长期油气管网规划》中对2025年和2030年油气管道发展目标均作出了相应的规划目标。另一方面,随着油气管道行业的发展&#xff…

问题:通过策略模式+工厂模式+模板方法模式实现ifelse优化

项目场景: 提示:这里简述项目相关背景: 示例:商城系统有会员系统,不同会员有不同优惠程度,普通会员不优惠;黄金会员打8折;白金会员优惠50元,再打7折; 问题描…

Android ndk兼容 64bit so报错

1、报错logcat如下 2025-01-13 11:34:41.963 4687-4687 DEBUG pid-4687 A #01 pc 00000000000063b8 /system/lib64/liblog.so (__android_log_default_aborter16) (BuildId: 467c2038cdfa767245f9280e657fdb85) 2025…

centos安装Nexus Repository OSS(Maven私服)

1. 下载链接:https://help.sonatype.com/en/download.html 2. 注意页面下载页面中的要求:JDK17(启动时提示最低JDK1.8最高JDK17,但是使用JDK1.8无法正常启动) 3. mkdir /opt/nexus 将压缩包上传到该目录并解压。 tar …

b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)

问题陈述 我们有两个多臂老虎机(Multi-Armed Bandit),分别称为左边的老虎机和右边的老虎机。每个老虎机的奖励服从不同的正态分布: 左边的老虎机:奖励服从均值为 500,标准差为 50 的正态分布,即…