本文深入探讨了 KV 缓存在大模型推理中的核心作用。针对大模型如 Ds、Qwen、GPT 等的高效服务需求文章详细解释了 KV 缓存如何通过复用先前计算好的注意力状态来避免重复计算显著降低延迟并提升模型吞吐。文章还介绍了 KV 缓存的工作原理、内存成本计算方法以及不同注意力架构MHA、GQA、MQA下 KV 缓存的应用差异并通过实际代码实验展示了 KV 缓存对模型性能的显著提升效果。对于想要提升大模型服务效率的程序员和开发者来说本文提供了宝贵的优化思路和实践指导。从 Token 到吞吐LLM 中 Key-Value 缓存的重要性针对大模型比如Ds,Qwen,GPT等等要把它们高效地服务起来并不容易每生成一个 token 都需要昂贵计算而且随着序列长度增长推理时间也会增加。随着像现在智能体的发展龙虾Coding模型等等的出现对于Token的依赖和消耗是一个天文数字。在 LLM 服务优化中最有影响力的优化技术之一就是Key-ValueKVCache。这个简单却非常重要的方法可以让模型复用先前已经计算好的注意力状态从而避免在逐 token 生成文本时重复做同样的计算。是一项早期最为基础的优化手段。什么是 KV Cache当 Transformer 处理文本时它依赖self-attention来理解 token 之间的关系。简单来说每个新 token 都会回看所有历史 token以确定上下文和语义。这会涉及为每个 token 计算key与value表示因此称为Key-ValueKV对。在推理阶段特别是自回归模型大部分文本llm模型中模型一次只生成一个 token。若不做缓存每个新 token 都要对到当前为止的整个序列重算注意力——这个操作会随序列长度呈二次增长。KV cache正是为了解决这个低效点。它会把之前解码步骤中计算好的 key/value 张量存起来这样模型在生成新 token 时不必全部重算。模型只需为最新 token 计算 key/value然后追加到已有缓存中。KV caching 让 LLM 能“记住”它已经建立好的内部注意力上下文通过查询替代计算用空间来换取时间。它是如何工作的在每个 Transformer 层里自注意力机制会产生三个矩阵queriesQ、keysK和valuesV。在推理期间模型为当前 token 计算queryQ。历史keys和values不再重算而是从KV cache中读取。然后用“新 query 与所有缓存 keys/values”做注意力计算得到下一步输出。当前 token 的新 key 与 value 会被加入缓存供后续步骤使用。从直观上你可以这样理解图 2–10[1] 使用 KV cache 加速 LLM 生成。只处理新 token同时复用先前已计算的 key-value 对减少重复计算。没有缓存时模型每一步都要重建过去。有了缓存后我们只需查过去。这会把大量重复计算变成每个 token 的小增量更新从而降低延迟、提升吞吐。KV cache 驻留在 GPU 显存中按层、按注意力头存储并随着序列长度到目前为止有多少 token、模型宽度和层数增长。在大模型的长对话中KV cache 的内存成本可用下式计算单位字节设b为 batch sizet为总序列长度prompt completionn_layers 为 decoder block/attention 层数n_heads 为每层注意力头数d_head 为注意力层隐藏维度p_a 为精度。多头注意力MHA模型的 KV cache 单 token 内存开销字节例如 LLaMA 2 7BMHA如下模型参数MHAb 1batchn_layers 32n_heads 32hidden_size 4096 ⇒ d_head 4096/32 128p_a 2 字节FP16/BF16。单 token 系数MHA2 × 32 × 32 × 128 × 2 524,288 字节 ≈每 token 512 KiBb 1。当 t 2,048 的总 KV512 KiB × 2,048 1,048,576 KiB1,024 MiB≈1 GiB。当 t 4,096 的总 KV512 KiB × 4,096 2,097,152 KiB2,048 MiB≈2 GiB。在模型固定时KV 内存会随 batchb与 token 数t线性增长。MHA、MQA 与 GQA 的差异KV 内存会随“每层需要存多少套独立 K/V”而增长。在经典MHA中每个注意力头都有自己的 K 与 V因此每个头都要存一套 KV——这就是我们后续对比分析的基线。在GQA中多个 query heads 会分组共享同一套 KV如果模型有 32 个 query heads 但只有 8 个 KV heads那么你实际存的是 8 套 KV 而不是 32 套。这意味着 KV 内存大约是 MHA 的 1/4。MQA把共享做到极致所有query heads 在每层共享一套KV。若仍有 32 个 query heads那就是 MHA KV 内存的1/32。整体 KV 公式不变——只需要把“head 数”替换成“KVhead 数”。更少的 KV heads 意味着更少的存储开销、解码时更少的 KV 读取这通常会降低成本并减少长输出与大 batch 场景下的延迟。使用 Qwen 模型测试KVCache对比实验为了理解 KV Cache 带来的性能与吞吐提升我们来分析生成 100 个 token 的过程并观察每个 token 的生成耗时。在下面代码中我们给一个初始 prompt让 LLM 继续补全。下面使用的是大家熟悉的 Transformers 和 PyTorch。1from transformersimportAutoModelForCausalLM,AutoTokenizer2import time3import torch45model_nameQwen/Qwen2.5-0.5B6tokenizerAutoTokenizer.from_pretrained(model_name)7modelAutoModelForCausalLM.from_pretrained(model_name)89promptHow might the next wave of communication tools shape our relationships, societies, and sense of identity?1011max_new_tokens1001213idxtokenizer(prompt,return_tensorspt).input_ids.to(model.device)14start_timetotal_timetime.time()15times[]1617for _inrange(max_new_tokens):18idx_condidx19withtorch.no_grad():20outputsmodel(idx_cond)21logitsoutputs.logits2223logitslogits[:,-1,:]24probastorch.softmax(logits,dim-1)2526idx_nexttorch.multinomial(probas,num_samples1)27print( Next token is:,tokenizer.decode(idx_next[0]))28time_costtime.time()-start_time29times.append(time_cost)3031ifnot first_token_generated:32print(fTime taken for generating the first token: {time_cost:.4f} seconds)33first_token_generatedTrue34else:35print(fTime taken for generating a token: {time_cost:.4f} seconds)3637start_timetime.time()3839idxtorch.cat((idx,idx_next),dim1)4041ifidx_next.item()tokenizer.eos_token_id:42print(\n[Generation completed - EOS token reached])43break4445generated_texttokenizer.decode(idx[0],skip_special_tokensTrue)46print(fTotal time take for next token: {time.time() - total_time:.4f} seconds)47print(generated_text)跑完上面的代码后你会看到一个明显趋势随着生成 token 变多每 token 耗时会上升。原因是每个新 token 都需要“回看”更长上下文。自注意力步骤会把当前 query 与之前所有 key/value 做比较因此计算量会随序列长度增长。有了 KV caching 后我们不再重算历史 key/value而是复用它们。即便如此模型每一步仍需要读取更多的 KV 因此每 token 耗时通常仍会随“已生成 token 数”大致线性增长常受内存带宽限制。若没有 KV caching模型每一步都要为整段历史重算 key/value——代价会增长得更快本质上近似二次生成会明显变慢。现在我们运行同样的代码只改动少量部分来开启KV cache并测量吞吐提升tokens/s。1import torch2from transformersimportAutoTokenizer,AutoModelForCausalLM34model_nameQwen/Qwen2.5-0.5B5tokenizerAutoTokenizer.from_pretrained(model_name,trust_remote_codeTrue)6modelAutoModelForCausalLM.from_pretrained(model_name,trust_remote_codeTrue,use_cacheTrue)\7.to(cudaiftorch.cuda.is_available()elsecpu)89model_nameQwen/Qwen2.5-0.5B10tokenizerAutoTokenizer.from_pretrained(model_name,trust_remote_codeTrue)11modelAutoModelForCausalLM.from_pretrained(model_name,trust_remote_codeTrue).to(cudaiftorch.cuda.is_available()elsecpu)1213promptHow might the next wave of communication tools shape our relationships, societies, and sense of identity?1415num_interations10016times_with_cache[]1718first_token_generatedFalse19input_idstokenizer(prompt,return_tensorspt).input_ids.to(model.device)20idxinput_ids21start_timetotal_timetime.time()2223#(1)DefineKey/ValueCacheforfaster generation24past_key_valuesNone2526for _inrange(num_interations):27print(input_ids size: str(input_ids.size()))28withtorch.no_grad():29outputsmodel(input_idsinput_ids,30past_key_valuespast_key_values,#(2)UseKV-cache from previous iteration31use_cacheTrue,#(2)EnableKV caching32max_new_tokens100,33min_new_tokens100)3435logitsoutputs.logits36#(3)UpdateKVCache37past_key_valuesoutputs.past_key_values38torch.cuda.synchronize()3940logitslogits[:,-1,:]41probastorch.softmax(logits,dim-1)42generated_token_idtorch.multinomial(probas,num_samples1)#Sampleinstead of argmax4344#(4)Updateinput_idswithonly thenewtoken(using KV-cache)45input_idsgenerated_token_id4647print(Next token:,tokenizer.decode(generated_token_id[0],skip_special_tokensTrue))48idxtorch.cat((idx,generated_token_id),dim1)4950time_costtime.time()-start_time51times_with_cache.append(time_cost)52ifnot first_token_generated:53print(fTime take for first token: {time_cost:.4f} seconds)54first_token_generatedTrue55else:56print(fTime take for next token: {time_cost:.4f} seconds)57start_timetime.time()5859ifgenerated_token_id.item()tokenizer.eos_token_id:60print(\n[Generation completed - EOS token reached])61break6263generated_texttokenizer.decode(idx[0],skip_special_tokensTrue)64print(fTotal time take for next token: {time.time() - total_time:.4f} seconds)65print(generated_text)6667free_gpu(modelmodel)下面是开启与不开启 KV cache 时 token 生成时间的对比在不使用缓存时生成时间会持续上升因为模型每一步都要重复处理越来越长的上下文。开启 KV cache 后模型会复用已计算好的 key/value而不是每步重算——因此在首 token 计算完后生成会更稳定且明显更快。通过这个例子你现在可以直观感受到 KV cache 如何提升 LLM 性能——实现更低的每 token 的延迟与更高的整体吞吐。总结KVCache本质上是在序列增长时避免重复计算。它存储已计算的 key/value让模型复用注意力上下文而不必每一步重建从而降低延迟并提升吞吐。它的内存成本是可预测的模型固定时成本与 batchb和 token 数t线性相关可用文中给出的简单公式估算。架构也很关键MHA 为每个 head 存一套 KV基线GQA/MQA 在 head 间共享 KV可按“KV heads / 总 heads”的比例缩小 cache 以及带宽需求。那么如何学习大模型 AI 对于刚入门大模型的小白或是想转型/进阶的程序员来说最头疼的就是找不到系统、全面的学习资源要么零散不成体系要么收费高昂白白浪费时间走弯路。今天就给大家精心整理了一份全面且免费的AI大模型学习资源包覆盖从入门到实战、从理论到面试的全流程所有资料均已整理完毕免费分享给各位核心包含AI大模型全套系统化学习路线图小白可直接照做、精品学习书籍电子文档、干货视频教程、可直接上手的实战项目源码、2026大厂面试真题题库一站式解决你的学习痛点不用再到处搜集拼凑扫码免费领取全部内容1、大模型系统化学习路线学习大模型方向比努力更重要很多小白入门就陷入“盲目看视频、乱刷资料”的误区最后越学越懵。这里给大家整理的这份学习路线是结合2026年大模型行业趋势和新手学习规律设计的最科学、最系统从零基础到精通每一步都有明确指引帮你节省80%的无效学习时间少走弯路、高效进阶。2、大模型学习书籍文档理论是实战的根基尤其是对于程序员来说想要真正吃透大模型原理离不开优质的书籍和文档支撑。本次整理的书籍和电子文档均由大模型领域顶尖专家、大厂技术大咖撰写涵盖基础入门、核心原理、进阶技巧等内容语言通俗易懂既有理论深度又贴合实战场景小白能看懂程序员能进阶为后续实战和面试打下坚实基础。3、AI大模型最新行业报告无论是小白了解行业、规划学习方向还是程序员转型、拓展业务边界都需要紧跟行业趋势。本次整理的2026最新大模型行业报告针对互联网、金融、医疗、工业等多个主流行业系统调研了大模型的应用现状、发展趋势、现存问题及潜在机会帮你清晰了解哪些行业更适合大模型落地哪些技术方向值得重点深耕避免盲目学习精准对接行业需求。值得一提的是报告还包含了多模态、AI Agent等前沿方向的发展分析助力大家把握技术风口。4、大模型项目实战配套源码对于程序员和想落地能力的小白来说“光说不练假把式”只有动手实战才能真正巩固所学知识将理论转化为实际能力。本次整理的实战项目涵盖基础应用、进阶开发、多场景落地等类型每个项目都附带完整源码和详细教程从简单的ChatPDF搭建到复杂的RAG系统开发、大模型部署难度由浅入深小白可逐步上手程序员可直接参考优化既能练手提升技术又能丰富简历为求职和职业发展加分。5、大模型大厂面试真题2026年大模型面试已从单纯考察原理转向侧重技术落地和业务结合的综合考察很多程序员和新手因为缺乏针对性准备明明技术不错却在面试中失利。为此我精心整理了各大厂最新大模型面试真题题库涵盖基础原理、Prompt工程、RAG系统、模型微调、部署优化等核心考点不仅有真题还附带详细解题思路和行业踩坑经验帮你精准把握面试重点提前做好准备面试时从容应对、游刃有余。6、四阶段精细化学习规划附时间节点可直接照做结合上述资源给大家整理了一份可直接落地的四阶段学习规划总时长约2个月小白可循序渐进程序员可根据自身基础调整节奏高效掌握大模型核心能力快速实现从“入门”到“能落地、能面试”的跨越。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容3、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】