ffer捷报
金三银四春招季,又有两位训练营同学斩获大模型offer!一个是40k某军实验室offer,另一个是第四范式~恭喜两位同学成功上岸!
随着DeepSeek爆火,面试中也越来越高频出现,因此训练营也更新了DeepSeek系列技术的深入拆解。包括MLA、MTP、专家负载均衡、FP8混合精度训练,Dual-Pipe等关键技术,力求做到全网最硬核的解析~
截至目前,KV Cache 已成为大语言模型(LLM)推理的核心组件,几乎可以说是推理过程中的基石。
尽管各个平台已有大量关于 KV Cache 的相关文章,但读完后,很多内容往往缺乏对以下几个关键问题的深入剖析:
-
为什么可以使用
KV Cache
? -
KV Cache 究竟节省了那些计算?
-
KV Cache 的引入对后续 LLM 推理优化有何影响?
因此,基于个人的理解,我写下了这篇文章,旨在从更全面的角度探讨 KV Cache 的作用与应用。
如果你在阅读过程中有新的见解,欢迎留言交流;如果发现文中有不准确的地方,也请不吝指正。
01
KV Cache 原理
这里从 LLM 的整个端到端推理过程出发,分析其计算优化的思路,进而引出 KV Cache 在这一过程中的优化作用,而不是先行介绍 KV Cache 的定义。
通过对推理流程中的关键环节进行剖析,我们能够更好地理解 KV Cache 如何在节省计算、提高效率方面发挥作用。
对 LLM 基础架构不了解的可以参考我之前写的这篇文章:琳琅阿木:图文详解LLM inference:LLM模型架构详解
https://zhuanlan.zhihu.com/p/14413262175
回顾 LLM 的推理过程:输入一个预设的 prompt,将其传入模型,进行计算,最终得到 shape
为(batch_size, seq_len, vocab_size)
的 logits
,选用 sequence
中最后一个 token
的 logit
做采样,得到首字。
随后进入自回归阶段,模型依次利用前一步生成的 token
,计算得到 logit
,采样得到下一个 token
,直至完成整个序列的生成。
图1
无论是首字还是后续的 token,在预测下一个 token 时,模型都仅使用当前已知序列中的最后一个 token 的 logit 进行采样。
尽管在生成下一个 token 时,采样仅基于当前已知序列中最后一个 token 的 logit,但实际上,模型在计算 logits 时,会综合考虑整个已知序列的信息,以确保生成的 token 具有连贯性和一致性。
而这个过程就是通过 Attention
计算来实现。
图2:LLM inference流程(详细版)
再次回到这张详细的流程图,从后往前进行分析。已知在当前步骤下需要预测下一个 token,那么我们所需的是当前 token(即已知序列中的最后一个 token)对应的 logit。这个 logit 用于采样下一个 token。
(1)Linear 分析
图3:Linear计算过程
上图为 Linear
的计算过程,很容易发现,对于输出的每一行,只和输入的最后一行有关。
(2)Norm 分析
这里直接看 RMSNorm
的源码:
https://github.com/meta-llama/llama/blob/main/llama/model.py#L34
核心计算过程为:x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)
可以看出,Norm 计算对每个 token 对应的向量进行归一化,因此,得到最后一个 token 对应的输出时,不会受到之前 token 的影响,二者互相独立。
(3)FFN 分析
FFN 计算过程本质就是两个(或 3 个)Linear
。因此,可以很容易得出结论:最后一个 token 对应的输出与其他 token 的输入无关。
(4)Attention 分析
图4:Attention计算图解
从上图可以看出,要得到最终所需的 Attention output(绿色部分,即最后一个 token 对应的输出),我们需要最后一个 token 对应的 Q 和当前所有 token 对应 K 和 V。
(5)Embedding 分析
Embedding 过程本身是根据每一个 token,去找 token 对应的向量,本身各个 token 之间就是独立的。
(6)总结
由 1 节~5 节可知,获取当前 token 对应的 logit,仅 Attention
计算过程中,K 和 V 需要用到之前 token 的信息,其余计算各个 token 对应的向量都是独立的。
在推理过程中,当前序列中,除最后一个 token 外,前面所有 token 的 KV Cache 在历史迭代中已经计算过。
因此,我们可以预先分配一块显存,将这些已计算的 KV Cache 缓存起来,供下一个 step 使用。
02
杂谈
到这里可以试着回答下下面几个问题:
-
为什么可以使用 KV Cache?
-
KV Cache 节省了 Self-Attention 层中哪部分的计算?
-
KV Cache 对 MLP 层的计算量有影响吗?
-
KV Cache 对 block 间的数据传输量有影响吗?
不知道大家在阅读或者在盘整个流程时有没有产生过这样的疑惑,既然计算最后一个 token 用不到,那计算 Q,以及 FFN 这些计算,能否只算最后一个?
答案是不能,因为有多个 layer,当前 layer 计算 K 和 V 需要依赖上一层的输出,FFN 这些只计算最后一个 token,会导致下一层的 K 和 V 不对,进而影响最终结果。
那哪一些计算可以化简呢?
03
计算量分析
现在对图 2 进行修改,将带 KV Cache 的场景添加进来,LLM 推理过程分解为 Prefill 和 Decoding 两个阶段;
Prefill 阶段:发生在计算第一个 token(首字)时,此时 Cache 为空,需要计算所有 token 的 Key 和 Value,并将其缓存。由于涉及大量的 GEMM 计算,推理速度较慢。
Decoding 阶段:发生在计算第二个 token 以及后续所有 token,直到结束。
这时 Cache 中有之前 token 的 key 和 value 值,每轮计算可以从 Cache 中读取历史 token 的 key 和 value,只需计算当前 token 对应的 key 和 value,并写入 Cache。
图5:LLM inference流程(KVCache)
假设序列长度为 S。
(1)Attention 计算量分析
输入变换和线性投影:从图 5 易知,Q 的计算由 GEMM 变为 GEMV, K 和 V 由于 Cache 的存在,也只用计算最后一个 token 对应 K 和 V,计算由 GEMM 变为 GEMV,最后的线性投影部分同理,计算量为原来的 1/S。
注意力得分:从图 5 可知,由于当前 Q 的长度为 1,因此计算 Score 和 Attention Output 的过程也由 GEMM 变为 GEMV,计算量为原来的 1/S。计算复杂度由 O(S²)降为 O(S)。
softmax:从图 5 可知,softmax 过程输入数据量是原来的 1/S,易知计算量为原来的 1/S。
其他:位置编码过程和 transpose 过程涉及计算量不多,div 过程易知计算量为原来的 1/S。
综上,使用 KV Cache 后,Attention 过程计算量整体降低为原来的 1/S,在序列比较长时,计算复杂度由 O(S²)降为 O(S)。
(2)Linear 和 FFN 计算量分析
FFN 过程和最后一个 Linear 都是线性过程,计算量和输入数据的量成正比关系。由图 5 易知,输入数据变为原来的 1/S,可得计算量为原来的 1/S。
综上所述,使用 KV Cache 能够显著减少非首字阶段的模型计算量。在每一步推理中,仅需要计算新增的 token 与先前序列的关联,而不是重新计算整个序列的所有注意力。这使得模型的整体计算复杂度从 O(S²)降至 O(S) 。
随着序列长度的不断增加,这种优化能够有效降低推理的时间和资源消耗,尤其是在处理长序列或高并发场景时表现尤为突出。
04
后记
KV Cache 的引入将大语言模型的推理过程自然地划分为 Prefill 和 Decoding 两个阶段。
由于 KV Cache 的存在,Decoding 阶段的计算量大幅降低,这两个阶段也因此呈现出截然不同的计算特点:
Prefill 阶段:以计算密集型(compute-bound)为主。该阶段需要对整个输入序列执行完整的 Transformer 计算,涉及大量矩阵乘法和注意力操作,计算复杂度较高。
Decoding 阶段:以内存密集型(memory-bound)为主。由于 KV Cache 的加入,Decoding 阶段只需对新增的 token 与缓存内容进行增量计算,计算量显著降低,但频繁的内存访问和更新使其更加依赖内存带宽。
这些阶段的不同特性催生了针对性优化策略。
Prefill 阶段优化:
-
Prefix Cache:对常用的前缀序列提前缓存其计算结果,避免重复计算,提高效率。
-
Chunked Prefill:将长序列分块处理,优化内存占用和并行计算效率。
Decoding 阶段优化:
-
Flash Decoding:通过高效的内存布局和缓存管理策略,减少内存访问延迟并提高显存利用率。
总结来看,针对不同阶段优化的设计思路,充分利用了计算和内存之间的权衡,进一步提升了大模型推理的性能和资源利用率。
一、大模型风口已至:月薪30K+的AI岗正在批量诞生
2025年大模型应用呈现爆发式增长,根据工信部最新数据:
国内大模型相关岗位缺口达47万
初级工程师平均薪资28K(数据来源:BOSS直聘报告)
70%企业存在"能用模型不会调优"的痛点
真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!
二、如何学习大模型 AI ?
🔥AI取代的不是人类,而是不会用AI的人!麦肯锡最新报告显示:掌握AI工具的从业者生产效率提升47%,薪资溢价达34%!🚀
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工
📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)
第一阶段(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 项目
* 内容安全
* 互联网信息服务算法备案
* …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】