当前位置: 首页 > article >正文

KV 缓存简介

以下是关于 KV缓存(Key-Value Cache) 的简介,涵盖其定义、原理、作用及优化意义:


1. 什么是KV缓存?

KV缓存 是Transformer架构(如GPT、LLaMA等大模型)在自回归生成任务(如文本生成)中,用于加速推理过程的核心技术。其本质是:
在生成序列时,缓存历史token的Key和Value矩阵,避免重复计算,从而显著减少计算量。


2. 为什么需要KV缓存?

传统自注意力计算的问题
  • 在生成第 t 个token时,模型需要计算当前token与所有历史token的注意力权重。
  • 若每次生成都重新计算历史token的Key和Value,计算复杂度为 O(n²),耗时随序列长度急剧增加。
KV缓存的作用
  • 缓存历史计算结果:仅需为新生成的token计算Key和Value,复用历史缓存。
  • 复杂度降低:生成序列长度为 n 时,计算复杂度从 O(n²) 降为 O(n)

3. KV缓存的工作原理

以生成文本为例(自回归过程):

  1. 初始化:生成第一个token时,计算其Key和Value,存入缓存。
  2. 逐步生成
    • 生成第 t 个token时,仅计算当前token的Key和Value。
    • 将当前token的Key和Value追加到缓存中。
    • 自注意力计算时,直接使用缓存中的所有Key和Value。
  3. 缓存结构
    • 每个Transformer层维护独立的KV缓存。
    • 每个注意力头(Attention Head)对应独立的Key和Value矩阵。
示意图
生成第3个token时:
当前输入:Token3
KV缓存:[Token1_Key, Token1_Value], [Token2_Key, Token2_Value]
自注意力计算:Token3的Query与缓存中的所有Key计算相似度 → 加权聚合所有Value

4. KV缓存的优势

  • 加速推理:避免重复计算,生成速度提升3-10倍(尤其长文本场景)。
  • 支持长序列:配合分块处理技术,可缓解显存压力。
  • 兼容批处理:在多任务并行推理中高效复用缓存。

5. 实现细节与优化

(1) 内存管理
  • 显存占用:KV缓存大小与 序列长度 × 层数 × 注意力头数 × 向量维度 成正比。
  • 优化手段
    • 分块缓存:将长序列分割为块,按需加载(如FlashAttention)。
    • 量化压缩:对Key/Value矩阵进行低精度存储(如FP16 → INT8)。
(2) 动态序列处理
  • 掩码机制:在批处理中,对不同长度的序列使用掩码标记有效缓存区域。
  • 缓存复用:对于固定前缀(如系统提示词),可预计算并复用KV缓存。

6. 实际应用示例

Hugging Face Transformers库中的使用
from transformers import AutoModelForCausalLMmodel = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")
inputs = model.build_inputs_for_generation(prompt_tokens)
outputs = model.generate(inputs,use_cache=True,  # 启用KV缓存max_new_tokens=100
)
显存占用估算
  • 以LLaMA-7B模型为例(层数=32,注意力头数=32,向量维度=128):
    • 生成1024个token时,KV缓存显存占用 ≈ 2 × 32 × 32 × 128 × 1024256MB

7. 局限性

  • 显存瓶颈:超长序列(如>4096 tokens)可能导致显存不足。
  • 缓存失效:若生成过程中需要修改历史内容(如编辑文本),需重新计算缓存。

总结

KV缓存通过空间换时间的策略,成为大模型高效推理的核心技术。随着模型规模扩大,优化KV缓存的内存效率(如Grouped Query Attention)仍是研究重点。

相关文章:

KV 缓存简介

以下是关于 KV缓存(Key-Value Cache) 的简介,涵盖其定义、原理、作用及优化意义: 1. 什么是KV缓存? KV缓存 是Transformer架构(如GPT、LLaMA等大模型)在自回归生成任务(如文本生成&…...

Mysql篇——SQL优化

本篇将带领各位了解一些常见的sql优化方法,学到就是赚到,一起跟着练习吧~ SQL优化 准备工作 准备的话我们肯定是需要一张表的,什么表都可以,这里先给出我的表结构(表名:userinfo) 通过sql查看…...

算法基础 -- ARM 体系架构设计专家的算法提升目标

算法提升目标:ARM 体系架构设计专家 1. 位运算优化 相关 ARM 知识点:SIMD、NEON、SVE、低功耗优化、加密计算、数据压缩 推荐题目: 136. 只出现一次的数字(异或运算)190. 颠倒二进制位(位反转,ARM rbit…...

不同开发语言对字符串的操作

一、字符串的访问 Objective-C: 使用 characterAtIndex: 方法访问字符。 NSString *str "Hello, World!"; unichar character [str characterAtIndex:0]; // 访问第一个字符 H NSLog("%C", character); // 输出: H NSString 内部存储的是 UTF-16 编…...

Oracle Linux Server 7.9安装fail2ban

yum search oracle-epel-release yum install oracle-epel-release-el7 search fail2ban yum install fail2ban nano /etc/fail2ban/jail.d/00-firewalld.conf # defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。 [DEFAULT] # 用于指定哪…...

FPGA|Verilog-SPI驱动

最近准备蓝桥杯FPGA的竞赛,因为感觉官方出的IIC的驱动代码思路非常好,写的内容非常有逻辑并且规范。也想学习一下SPI的协议,所以准备自己照着写一下。直到我打开他们给出的SPI底层驱动,我整个人傻眼了,我只能说&#x…...

Windows11 新机开荒(二)电脑优化设置

目录 前言: 一、注册微软账号绑定权益 二、此电脑 桌面图标 三、系统分盘及默认存储位置更改 3.1 系统分盘 3.2 默认存储位置更改 四、精简任务栏 总结: 前言: 本文承接上一篇 新机开荒(一) 上一篇文章地址&…...

关于deepseek R1模型分布式推理效率分析

1、引言 DeepSeek R1 采用了混合专家(Mixture of Experts,MoE)架构,包含多个专家子网络,并通过一个门控机制动态地激活最相关的专家来处理特定的任务 。DeepSeek R1 总共有 6710 亿个参数,但在每个前向传播…...

揭秘大数据 | 9、大数据从何而来?

在科技发展史上,恐怕没有任何一种新生事物深入人心的速度堪比大数据。 如果把2012年作为数据量爆发性增长的第一年,那么短短数年,大数据就红遍街头巷尾——从工业界到商业界、学术界,所有的行业都经受了大数据的洗礼。从技术的迭…...

使用Dependency Walker和Beyond Compare快速排查dll动态库损坏或被篡改的问题

目录 1、问题描述 2、用Dependency Walker工具打开qr.dll库,查看库与库的依赖关系以及接口调用情况,定位问题 3、使用Beyond Compare工具比较一下正常的msvcr100d.dll和问题msvcr100d.dll的差异 4、最后 C软件异常排查从入门到精通系列教程&#xff…...

3.14学习总结 排序算法

插入排序&#xff1a; 1.直接插入排序 维护一个有序区&#xff0c;把元素一个个插入有序区的适当位置&#xff0c;直到所有元素都有序为止。 for (int i 0;i < n - 1;i) {//升序int end i;int temp k[end 1];while (end > 0) {if (temp < k[end]) {k[end 1] …...

Hadoop、Spark、Flink Shuffle对比

一、Hadoop的shuffle 前置知识&#xff1a; Map任务的数量由Hadoop框架自动计算&#xff0c;等于分片数量&#xff0c;等于输入文件总大小 / 分片大小&#xff0c;分片大小为HDFS默认值128M&#xff0c;可调 Reduce任务数由用户在作业提交时通过Job.setNumReduceTasks(int)设…...

本地部署 RAGFlow - 修改默认端口

本地部署 RAGFlow - 修改默认端口 1. 前提条件2. 部署 RAGFlow 1. 前提条件 确保 vm.max_map_count 不小于 262144&#xff1a; 如需确认 vm.max_map_count 的大小&#xff1a; sysctl vm.max_map_count如果 vm.max_map_count 的值小于 262144&#xff0c;可以进行重置&…...

repo init 错误 Permission denied (publickey)

一、已经生成ssh-key并设置到gerrit上 二、已经设置.gitconfig &#xff08;此步骤是公司要求&#xff0c;设置gerrit地址为一个别名之类的&#xff0c;有的公司不需要&#xff09; 然后出现下面的错误&#xff0c;最后发现忘记设置git的用户名和邮箱 1. git config --globa…...

Django settings.py 文件全解析

本篇详细介绍 Django settings.py 文件各个配置项的教程&#xff0c;涵盖核心配置项的作用及最佳实践 一、基础配置 1. ​BASE_DIR BASE_DIR Path(__file__).resolve().parent.parent​作用&#xff1a;项目根目录路径&#xff0c;用于构建其他路径&#xff08;如模板、静态…...

TSB - AD 解读 — 迈向可靠、透明的 TSAD 任务

目录 一 文章动机 二 TSAD 领域内的两类缺陷 三 数据集的构建 四 实验结果及结论 项目宣传链接&#xff1a;TSB-AD 代码链接&#xff1a; TheDatumOrg/TSB-AD: TSB-AD: Towards A Reliable Time-Series Anomaly Detection Benchmark 原作者解读&#xff1a;NeurIPS 2…...

下载 CSS 文件阻塞,会阻塞构建 DOM 树吗?会阻塞页面的显示吗?

下载 CSS 文件会对页面的渲染过程产生影响&#xff0c;具体是否阻塞 DOM 树的构建和页面的显示&#xff0c;取决于浏览器的渲染机制。 1. CSS 文件下载是否会阻塞 DOM 树的构建&#xff1f; 一般情况下&#xff0c;CSS 文件下载不会阻塞 DOM 树的构建&#xff1a; DOM 树的构建…...

6个月的Go语言学习甘特图路线图 从零基础到项目实战

以下是为期6个月的Go语言学习甘特图&#xff08;2025年4月-2025年10月&#xff09;&#xff0c;包含详细阶段划分、对应资源及项目产出文档说明&#xff1a; #mermaid-svg-yQbkZCpCAXv6iXKC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fi…...

论文阅读:2023-arxiv Can AI-Generated Text be Reliably Detected?

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 文章目录 Abstract&#xff08;摘要&#xff09;1 Introduction&#xff08;引言&#xff09;Conclusion&#xff08;结论&#xff09; Can AI-Generated Text be Reliably D…...

查看IP地址/Ping 命令

目录 Windows Linux macOS Ping 命令 Windows 使用终端&#xff1a; 按下 Win R 键&#xff0c;打开“运行”对话框&#xff0c;输入 cmd 并按 Enter。 在命令提示符中输入 ipconfig&#xff0c;按 Enter。系统会显示网络适配器的详细信息&#xff0c;包括 IPv4 地址、子…...

Language Models are Few-Shot Learners,GPT-3详细讲解

GPT的训练范式&#xff1a;预训练Fine-Tuning GPT2的训练范式&#xff1a;预训练Prompt predict &#xff08;zero-shot learning&#xff09; GPT3的训练范式&#xff1a;预训练Prompt predict &#xff08;few-shot learning&#xff09; GPT2的性能太差&#xff0c;新意高&…...

鸿蒙编译框架@ohos/hvigor FileUtil用法

ohos/hvigor FileUtil用法 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;ohos/hvigor 的 FileUtil 是用于文件操作的实用工具类&#xff0c;提供了跨平台的文件读写、路径处理等常用方法。以下是其核心用法和示例&#xff1a; 一、核心方法说明 方法名功能描…...

Hoppscotch 开源API 开发工具

Hoppscotch 是一个开源的 API 开发工具&#xff0c;旨在为开发者提供一个轻量级、快速且功能丰富的 API 开发和调试平台。以下是对其主要特性和功能的详细介绍&#xff1a; 1. 轻量级与高效 Hoppscotch 采用简约的 UI 设计&#xff0c;注重易用性和高效性。它支持实时发送请求…...

Infura 简介

文章目录 Infura 简介Infura 的主要功能Infura 的替代方案&#xff08;类似服务&#xff09;AlchemyQuickNodeAnkrMoralisPocket Network 什么时候选择 Infura&#xff1f; Infura 简介 Infura 是一个 区块链基础设施即服务&#xff08;BaaS, Blockchain as a Service&#xf…...

【芯片验证】面试题·对深度为60的数组进行复杂约束的技巧

朋友发给我的芯片验证笔试题,觉得很有意思,和大家分享一下。 面试题目 class A中一个长度为60的随机数组rand int arr[60],如何写约束使得: 1.每个元素的值都在(0,100]之间,且互不相等; 2.最少有三个元素满足勾股数要求,比如数组中包含3,4,5三个点; 请以解约束最快…...

Manus “Less structure,More intelligence ”独行云端处理器

根据市场调研机构Statista数据显示&#xff0c;全球的AR/AR的市场规模预计目前将达到2500亿美元&#xff0c;Manus作为VR手套领域的领军企业&#xff0c;足以颠覆你的认知。本篇文章将带你解读Manus产品&#xff0c;针对用户提出的种种问题&#xff0c;Manus又将如何解决且让使…...

【再读】R1-Onevision通过跨模态形式化为复杂多模态推理任务提供了系统性解决方案

R1-Onevision:跨模态形式化驱动的多模态推理技术突破,R1-Onevision通过跨模态形式化、双阶段训练和教育级基准测试,为多模态推理树立了新标杆。其技术创新不仅提升了模型在复杂任务中的表现,更重要的是为行业提供了一种可解释、可迁移的多模态处理范式。随着形式化方法的不断…...

Mysql-经典实战案例(3): pt-archiver 实现 MySQL 千万级大表分库分表(上)

零基础实战&#xff1a;使用 pt-archiver 实现 MySQL 千万级大表的水平分表&#xff08;Hash分片&#xff09; 本文适合人群&#xff1a;MySQL新手、想低成本实践数据库分表的开发者 环境要求&#xff1a;MySQL 5.7、Linux系统&#xff08;建议CentOS/Ubuntu&#xff09; 你将学…...

使用JSON存储数据的场景

Json 作为一种通用的数据格式&#xff0c;由于其结构灵活、可拓展等特点&#xff0c;在某些场景下我们也会直接将数据以 Json 格式存储到数据库中。 本文将探讨在开发中使用 JSON 存储数据的常见场景&#xff0c;并通过具体的实例帮助大家更好地理解其应用。 1. 半结构化数据…...

文生图网站推荐(2025.3)

以下是2024-2025年期间值得推荐的文生图网站&#xff0c;综合了免费性、中文友好度、操作便捷性及功能特色&#xff0c;涵盖不同用户需求&#xff1a; 一、国内主流平台 通义万相&#xff08;阿里云&#xff09; 特点&#xff1a;每日免费50次生成&#xff0c;模型和风格多样&a…...