LLM开发必读:KV缓存机制的理解、优化与编码实践指南

LLM之KV缓存优化方案--分块驱逐及PruLong 陈丹琦团队针对大语言模型长文本处理中的KV缓存内存占用瓶颈提出创新解决方案。研究引入"KV足迹"作为统一评估标准,综合考虑内存占用和时间维度,并提出两项关键技术:1)分块驱逐技术,在预填充阶段即时丢弃不重要KV条目,使峰值内存降低8倍;2)PruLong训练方法,通过自然文本端到端训练实现注意力头专业化分工。实验显示,在128K长文本任务中最高可降低70%内存占用,性能损失仅10%。该研究为长上下文模型的高效推理提供了系统化解决方案,并揭示了不同技术在召回、RAG等任务中的适用性差异。 阅读详情

KV(Key-Value)缓存是实现大语言模型(LLM)在生产环境中高效推理的关键技术之一。KV 缓存是 LLM 推理阶段中提高计算效率的重要组件。本文将从概念和代码两个层面出发,通过一个从零构建、可读性强的实现,解释它是如何工作的。

内容概览

简而言之,KV 缓存在推理(即模型训练完成后)阶段用于存储中间的 key(K)和值(V)计算结果,并在后续生成过程中复用,从而显著加快文本生成速度。

KV 缓存的不足之处包括:

  • 增加代码复杂度;
  • 占用更多内存(这是我当初未在书中加入它的主要原因);
  • 在训练阶段无法使用。

然而,在实际生产中部署 LLM 时,KV 缓存在推理速度上的提升通常远远超过了这些代价,因此是值得采用的优化策略。

什么是 KV 缓存?

想象一下,LLM 正在生成一段文本。假设模型接收到如下提示词: Time

如你所知,LLM 是按一个词(token)一个词地进行生成的。以下是模型在生成过程中可能发生的两个文本生成步骤的示意:

在这里插入图片描述

图展示了一个大语言模型(LLM)如何逐个 token 地生成文本。以提示词 "Time" 开始,模型生成下一个 token "flies"。在下一步中,完整的序列 "Time flies" 被重新处理,以生成新的 token "fast"。

请注意,LLM 文本生成输出中存在一些冗余,如下图所示:

在这里插入图片描述

LLM 每一步都必须重新处理整个上下文 "Time flies",以生成下一个 token(例如 "fast"),因为它没有缓存中间的 key/value 状态,这导致了重复编码整个序列的情况。

当我们实现一个 LLM 的文本生成函数时,通常每次只使用上一步生成的最后一个 token。但上图揭示了一个概念层面上的低效之处:每生成一个新 token,都要重复处理已有上下文。如果我们深入查看 注意力机制(attention mechanism),这种冗余将更为明显。

下图展示了 LLM 核心部分——注意力机制中的计算片段。在这个例子中,输入 token "Time" 和 "flies" 被编码为 3 维向量(实际中通常是几百维或上千维,为了便于图示简化为三维)。注意力机制中的矩阵 W 是权重矩阵,它们将这些输入转换为 Key(K)、Value(V) 和 Query(Q) 向量。

图中展示了注意力得分计算的部分内容,重点标出了 key 和 value 向量的生成过程。

图片

下图说明了 LLM 如何在注意力机制计算中,从 token 的嵌入向量中派生出 key(k)和值(v)向量。
每个输入 token(例如 "Time" 和 "flies")都会通过学习得到的投影矩阵 W_k 和 W_v 进行映射,从而得到对应的 key 和 value 向量。

如前所述,LLM 是一次生成一个词(token)。假设模型已经生成了 "fast",则下一轮的输入变为 "Time flies fast",如下图所示:

在这里插入图片描述

每次生成新 token 时,LLM 会重新为之前的 token(如 "Time" 和 "flies")计算 key 和 value 向量。
比如在生成第三个 token "fast" 时,模型再次计算了 k(1)/v(1) 和 k(2)/v(2),而不是复用之前已经得出的结果。

这种重复计算突显了在自回归(autoregressive)解码过程中未使用 KV 缓存所带来的低效问题。

通过对比前两个图可以看出,前两个 token 的 key 和 value 向量在每一步生成中是完全相同的,而每次都重新计算显然是一种资源浪费。

KV 缓存的核心思想

KV 缓存的目的是:
建立一个缓存机制,将已经生成的 key 和 value 向量保存起来以便复用,从而避免这些不必要的重复计算。
在这里插入图片描述

没有 KV 缓存 vs 有 KV 缓存的文本生成过程

我们在上一节中已经了解了 KV 缓存的基本概念,下面在进入具体代码实现之前,我们再详细分析一下其差异。

以 "Time flies fast" 这句文本为例,在没有使用 KV 缓存的情况下,生成过程如下:

图片

每生成一个新 token,模型都重新计算此前所有 token 的 key 和 value 向量。
比如:“Time” 和 “flies” 的向量在每一步都被重复计算。

而使用 KV 缓存后,这种冗余被有效消除,机制如下:

  1. 首次生成时

    ,模型计算并缓存输入 token 的 key 和 value 向量;

  2. 之后每生成一个新 token

    ,仅计算该 token 的 key 和 value;

  3. 之前的向量从缓存中读取

    ,无需重新计算。

总结:计算与缓存流程一览表

图片

KV 缓存带来的好处在于:

  • "Time"
    

    只被计算了一次,却被复用了两次;

  • "flies"
    

    只被计算了一次,被复用了一次。

(这是一个简短的文本示例,为了简洁易懂。但你应该可以直观地理解:文本越长,可复用的 key 和 value 越多,生成速度提升就越明显。)

使用与不使用 KV 缓存的对比图示

下图并列展示了第 3 个 token 的生成步骤在有无 KV 缓存时的差异:

图片

上半部分(无缓存):每个 token 的生成步骤都重新计算 key 和 value,导致操作重复;下半部分(有缓存):直接从 KV 缓存中读取已计算的 key 和 value,避免了重复计算,实现更快生成。

实现 KV 缓存的原理其实很简单:

我们只需像平常一样计算 key 和 value 向量,然后将它们缓存起来,以便下一步可以读取复用。

接下来,我们将通过一个具体代码示例演示 KV 缓存的实现方式。

从零实现 KV 缓存

KV 缓存的实现方式有很多种,其核心思想是:
在每个生成步骤中,仅计算新生成 token 的 key 和 value 向量,而之前的结果通过缓存获取。

这里我选择了一个重点突出“可读性”的简洁实现方式。
最好的理解方式就是直接浏览代码改动,看看是如何实现的。

我在 GitHub 上分享了两个自包含的 Python 脚本,用于从零实现 LLM(带/不带 KV 缓存):

📄 gpt_ch04.py

  • 摘自我《从零构建大型语言模型》一书的第 3 和第 4 章;
  • 包含基本的 LLM 实现及简单的文本生成函数;
  • 不包含 KV 缓存。

📄 gpt_with_kv_cache.py

  • 与上面相同,但加入了 KV 缓存的必要改动。

如何查看 KV 缓存的相关代码改动?

你可以按以下方式操作:

✅ 方法一:打开 gpt_with_kv_cache.py
  • 搜索 # NEW 标签,这些标记的部分即为新增实现 KV 缓存的代码。
  • 图片

✅ 方法二:使用代码差异比较工具

你也可以使用自己喜欢的文件差异比较工具(diff 工具),来对比 gpt_ch04.py 与 gpt_with_kv_cache.py 两个文件之间的变化内容。

图片

KV 缓存实现细节概览

下面几小节将简要走通整个 KV 缓存的实现过程。

1. 注册缓存缓冲区(Registering the Cache Buffers)

在 MultiHeadAttention 构造函数中,添加两个非持久化的缓存 buffer:cache_k 和 cache_v,用于在生成过程中逐步拼接并存储历史 key 和 value:

self.register_buffer("cache_k", None, persistent=False)
self.register_buffer("cache_v", None, persistent=False)

2. 在前向传播中加入 use_cache 标志

接下来,我们扩展 MultiHeadAttention 类的 forward 方法,新增一个参数 use_cache:

复制
编辑```
def forward(self, x, use_cache=False):
    b, num_tokens, d_in = x.shape

    keys_new = self.W_key(x)     # 形状: (b, num_tokens, d_out)
    values_new = self.W_value(x)
    queries = self.W_query(x)
    # ...

如果启用了 KV 缓存(即 use_cache=True),则使用如下逻辑:

    if use_cache:
        if self.cache_k is None:
            self.cache_k, self.cache_v = keys_new, values_new
        else:
            self.cache_k = torch.cat([self.cache_k, keys_new], dim=1)
            self.cache_v = torch.cat([self.cache_v, values_new], dim=1)
        keys, values = self.cache_k, self.cache_v
    else:
        keys, values = keys_new, values_new

这段逻辑实现了 KV 缓存的核心思想:

  • 每次只计算当前新 token 的 key 和 value;
  • 然后将其拼接到之前的缓存中;
  • 后续步骤中直接复用缓存中累积的 key 和 value,避免重复计算。

🧠 存储(Storing)

具体来说,在缓存初始化之后(通过 if self.cache_k is None: 分支),我们使用如下语句将新生成的 key 和 value 添加到缓存中:

self.cache_k = torch.cat([...], dim=1)
self.cache_v = torch.cat([...], dim=1)

这样,当前步骤生成的 key 和 value 就被拼接进了缓存中。

📥 **读取(Retrieving)**之后,我们通过以下语句从缓存中读取 key 和 value:

keys, values = self.cache_k, self.cache_v

这就是 KV 缓存的核心机制:存储 + 读取。 而接下来的第 3 和第 4 部分,则处理一些补充的实现细节。

3. 清空缓存(Clearing the Cache)

在多轮文本生成任务中,我们需要注意:在每次文本生成调用之间,必须重置缓存中的 key 和 value,否则模型会在新提示词(prompt)中错误地关联到上一次生成残留的上下文,导致生成不连贯、甚至完全错误。

为此,我们在 MultiHeadAttention 类中添加一个 reset_cache 方法,用于在文本生成前清除缓存:

def reset_cache(self):
    self.cache_k, self.cache_v = None, None

4. 在完整模型中传播 use_cache 参数

在修改完 MultiHeadAttention 后,我们还需要修改顶层的GPTModel类:

➕ 添加当前 token 的位置追踪在模型初始化中添加以下变量:

self.current_pos = 0

这是一个简单的计数器,用于记录当前缓存中已经包含了多少个 token,方便在增量生成时正确计算位置编码。

🔁 用显式循环替代 block 调用,传递 use_cache 参数 修改 GPTModel 的 forward 方法如下:

def forward(self, in_idx, use_cache=False):
    # ...

    if use_cache:
        pos_ids = torch.arange(
            self.current_pos, self.current_pos + seq_len,
            device=in_idx.device, dtype=torch.long
        )
        self.current_pos += seq_len
    else:
        pos_ids = torch.arange(
            0, seq_len, device=in_idx.device, dtype=torch.long
        )
    
    pos_embeds = self.pos_emb(pos_ids).unsqueeze(0)
    x = tok_embeds + pos_embeds
    # ...

    for blk in self.trf_blocks:
        x = blk(x, use_cache=use_cache)

🔄 效果说明当 use_cache=True 时:

  • 我们从 self.current_pos 开始生成 pos_ids;
  • 并将当前位置指针 ``+= seq_len`;
  • 这样下一次生成可以从上次停止的地方接着生成。

self.current_pos 跟踪的原因是:新生成的 query 必须紧接在已缓存的 key 和 value 之后对齐。如果不使用计数器,每一步都会从位置 0 开始,模型就会误认为新 token 与之前的 token 是重叠的。 (另外一种方式是通过偏移量追踪:offset = block.att.cache_k.shape[1])

上述更改也要求对 TransformerBlock 类做一个小的修改,以接受 use_cache 参数:

def forward(self, x, use_cache=False):
    # ...
    self.att(x, use_cache=use_cache)

最后,我们在 GPTModel 中添加一个模型级别的 reset 方法,用于一次性清除所有 block 的缓存,便于使用:

def reset_kv_cache(self):
    for blk in self.trf_blocks:
        blk.att.reset_cache()
    self.current_pos = 0

5. 使用缓存进行文本生成

随着 GPTModel、TransformerBlock 和 MultiHeadAttention 的更改,
最终我们可以在一个简单的文本生成函数中使用 KV 缓存:

def generate_text_simple_cached(
        model, idx, max_new_tokens, use_cache=True
    ):
    model.eval()

    ctx_len = model.pos_emb.num_embeddings  # 最大支持长度,例如 1024
    if use_cache:
        # 使用完整提示词初始化缓存
        model.reset_kv_cache()
        with torch.no_grad():
            logits = model(idx[:, -ctx_len:], use_cache=True)

        for _ in range(max_new_tokens):
            # a) 选择具有最高 log-probability 的 token
            next_idx = logits[:, -1].argmax(dim=-1, keepdim=True)
            # b) 将其追加到当前序列中
            idx = torch.cat([idx, next_idx], dim=1)
            # c) 仅将新 token 输入模型
            with torch.no_grad():
                logits = model(next_idx, use_cache=True)
    else:
        for _ in range(max_new_tokens):
            with torch.no_grad():
                logits = model(idx[:, -ctx_len:], use_cache=False)
            next_idx = logits[:, -1].argmax(dim=-1, keepdim=True)
            idx = torch.cat([idx, next_idx], dim=1)

    return idx

请注意,在 c) 步中我们只将新 token 喂给模型: logits = model(next_idx, use_cache=True)如果不使用缓存,我们需要将完整输入再次送入模型:
logits = model(idx[:, -ctx_len:], use_cache=False) 因为模型没有缓存的 key 和 value 可供复用。

一个简单的性能对比

在讲解完 KV 缓存的概念后,接下来的关键问题是:
在实践中它的性能表现如何?
为了验证这一点,我们可以运行前文提到的两个 Python 脚本,使用一个包含 1.24 亿参数的小型 LLM 来生成 200 个新 token(初始 prompt 为 4 个 token:“Hello, I am”):

pip install -r https://raw.githubusercontent.com/rasbt/LLMs-from-scratch/refs/heads/main/requirements.txt

python gpt_ch04.py

python gpt_with_kv_cache.py

在一台搭载 M4 芯片的 Mac Mini(CPU)上运行,结果如下:

图片

📊 实验结果: 即使是只有 1.24 亿参数的小模型,在 200 token 的短文本上也能实现 约 5 倍的加速效果!

(注意:本实现以“代码可读性”为优先目标,未针对 CUDA 或 MPS 进行性能优化,例如预分配张量而不是每次重新分配并拼接。)

⚠️ 注意:无论是否使用 KV 缓存,模型生成的文本看起来都是“乱码”,例如:css

输出文本:Hello, I am Featureiman Byeswickattribute argue logger Normandy Compton analogous bore ITVEGIN ministriesysics Kle functional recountrictionchangingVirgin embarrassedgl … 这是因为当前模型尚未训练。下一章节将会训练该模型,并可在训练后的模型上启用 KV 缓存以生成连贯文本。不过请记住:KV 缓存仅用于推理阶段(inference),不能用于训练阶段。

✅ 更重要的一点:尽管我们使用了两种不同的实现方式(gpt_ch04.py 和 gpt_with_kv_cache.py),它们生成的文本是完全一致的。这说明我们实现的 KV 缓存是正确的。因为在 KV 缓存中非常容易因索引错误而导致生成结果出现偏差,确保一致性是验证实现正确性的重要方式。

KV 缓存的优缺点

随着序列长度的增加,KV 缓存的优劣势将愈发明显,表现如下:

  • ✅ [优点] 计算效率显著提升:不使用缓存:在第 t 步中,注意力机制需要将当前 query 与前 t 个 key 进行比较,累计计算量呈平方增长,复杂度为 O(n²); 使用缓存:每个 key 和 value 只需计算一次,并可复用,每步推理复杂度降低为线性 O(n)。
  • ⚠️ [缺点] 内存占用线性增加:每生成一个新 token,就会将其对应的 key 和 value 添加进缓存;对于长序列和大模型,KV 缓存的累计大小可能非常庞大,甚至占满 GPU 内存;可通过截断 KV 缓存作为权衡(例如只保留最近一部分 token),但这会进一步增加实现复杂度。然而在实际部署 LLM 时,这些复杂度往往是值得的。

优化 KV 缓存的实现

上文中讲解的 KV 缓存实现主要是为了可读性和教学目的。 但如果要应用到实际生产环境(尤其是在处理更大模型和更长序列时),则需要更多优化措施。

常见的扩展陷阱(Pitfalls)

  • 内存碎片 & 重复分配

    :持续使用 torch.cat 拼接张量,会频繁触发内存重新分配,造成性能瓶颈;

  • 内存线性增长

    :未加处理时,KV 缓存会随着序列增长而占用不可控的大量内存。

💡 Tip 1:预分配内存(Pre-allocate Memory)

与其不断拼接张量,不如在一开始就根据最大可能序列长度预分配足够大的缓存张量:

# 预分配 key 和 value 缓存示例
max_seq_len = 1024  # 预计最大序列长度
cache_k = torch.zeros(
    (batch_size, num_heads, max_seq_len, head_dim), device=device
)
cache_v = torch.zeros(
    (batch_size, num_heads, max_seq_len, head_dim), device=device
)

在推理过程中,只需将每一步新计算结果写入对应的切片即可。

💡 Tip 2:滑动窗口截断缓存(Sliding Window)

为避免 GPU 内存暴涨,可以采用滑动窗口机制,仅保留最近的一部分 token 缓存:

# 滑动窗口缓存示例
window_size = 512
cache_k = cache_k[:, :, -window_size:, :]
cache_v = cache_v[:, :, -window_size:, :]
实践中的优化版本

这些优化方案可以在 gpt_with_kv_cache_optimized.py 文件中找到。

在一台 M4 芯片的 Mac Mini(CPU)上,使用 200 token 序列生成、窗口大小等于模型上下文长度的条件下(保证结果一致、对比公平),得到如下运行时间对比:

图片

⚠️ 注意:在 CUDA 设备上,KV 缓存的速度优势几乎消失。这是因为当前模型较小,设备之间的通信和张量传输所耗时间反而超过了缓存所节省的时间。

结语:权衡与实用性

尽管 KV 缓存会带来一定的代码复杂度与内存管理压力,但它带来的效率提升在生产环境中通常是非常可观的。

本教程为了教学目的,优先强调了代码的可读性而非性能。但在实际部署中,你可能需要结合如下优化方式:预分配内存;使用滑动窗口缓存机制

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

图片

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01 教学内容

图片

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

image.png

vx扫描下方二维码即可
在这里插入图片描述

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03 入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:
图片

04 视频和书籍PDF合集

图片

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

图片

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
图片

05 行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!
图片

06 90+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)图片
在这里插入图片描述

07 deepseek部署包+技巧大全

在这里插入图片描述

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

在这里插入图片描述

CacheGen:KV缓存压缩与流式传输技术 本文提出CacheGen技术,通过KV缓存压缩与流式传输优化大语言模型服务性能。针对长上下文处理导致的高延迟问题,CacheGen采用基于变化的编码、分层量化和算术编码技术,将KV缓存压缩为紧凑比特流。实验表明,在3Gbps带宽下,相比传统方法TTFT减少3.1-4.7倍,KV缓存大小缩减3.5-4.3倍。该系统能自适应网络条件调整压缩级别,在保证生成质量的同时显著降低延迟,与现有压缩技术互补,为提高LLM服务响应速度提供了有效解决方案。 阅读详情

相关推荐

AgentKVShift:Agent记忆系统中的KV缓存复用优化实践

在大型语言模型(LLM)推理过程中,KV缓存(Key-Value Cache)是管理历史注意力状态、提升生成效率的核心技术。其原理是为已生成的Token存储Key和Value矩阵,避免重复计算,从而降低显存占用和推理延迟。这项技术的核心价值在于,它能显著提升长序列生成和复杂任务处理的效率。在自动化数据分析、智能客服和多轮对话等应用场景中,高效的KV缓存管理尤为关键。然而,在Agent系统中,任务往往离散、交叉且需要动态回溯,传统的连续缓存管理模式面临挑战。本文探讨的AgentKVShift思路,正是通过将K

weixin_34239592的博客 2488

程序员必看:大模型KV缓存机制详解,从理论到代码实现,收藏学习

文章详细解释了大语言模型(LLM)中的KV缓存机制,通过保存并复用Key和Value向量避免重复计算,将推理复杂度从O(n²)降至O(n),实验显示可提升约5倍速度。文章提供了从零实现的代码示例,分析了KV缓存的优缺点,并分享了预分配内存和滑动窗口等优化技巧,是提升LLM推理效率的重要技术。

2401_85154887的博客 1342

边缘计算下LLM推理的KV缓存优化实践

在边缘计算场景中,大语言模型(LLM)推理面临KV缓存内存占用的关键挑战。KV缓存作为注意力机制加速技术,通过存储键值对避免重复计算,但会随上下文长度指数级增长。针对边缘设备的资源约束特性,业界探索了序列裁剪、动态压缩等优化方案,但往往牺牲模型性能或增加计算开销。通过分析边缘服务的任务时空相关性特征,发现相似任务间存在KV缓存复用可能。实验表明,当语义相似度超过0.8时,复用KV缓存可使内存占用降低40%而性能损失可控。这种基于语义相似性的边缘优化方案,为智能问答、自动驾驶等实时AI应用提供了可行的部署路径

weixin_42683392的博客 268

【LLM】6:大语言模型中的 KV 缓存机制

KV 缓存在自注意力机制中的作用是在推理阶段缓存之前计算过的 Key 和 Value 矩阵,避免在生成新 token 时重复计算,显著提升推理效率,特别是在长序列生成任务中效果明显。这种缓存机制是大模型推理阶段提高性能的关键优化之一。

zzZ_CMing的博客 3386

LLM Agent并行推理优化:基于KV Cache复用的工作流加速实践

在大语言模型(LLM)应用开发中,推理延迟是影响智能体(Agent)响应速度和用户体验的关键瓶颈。其核心原理在于Transformer架构的自回归生成机制,导致传统的串行任务处理模式计算效率低下。为了提升技术价值,业界引入了KV Cache(键值缓存)等推理优化技术,通过缓存历史token的注意力状态来避免重复计算。在工程实践中,结合vLLM等高性能推理引擎的Prefix Caching特性,可以对Agent工作流中可并行的子任务进行状态复用,显著减少共享上下文的重复编码,从而降低延迟与计算成本。这种方法尤

weixin_31364787的博客 252

告别Keil/IAR:在VSCode中用CMake+Clangd打造丝滑的STM32开发环境(附完整配置)

本文详细介绍了如何在VSCode中使用CMake和Clangd搭建高效的STM32开发环境,替代传统的Keil/IAR工具。通过完整的配置指南和快速开发技巧,帮助开发者实现轻量级、高度可定制的现代化开发流程,显著提升STM32项目的开发效率。

weixin_26843605的博客 166

终于把 Transformer 中的键值(KV)缓存搞懂了!!

在深入研究 KV 缓存之前,我们需要先了解一下 transformer 中使用的注意力机制。了解它的工作原理是发现和理解 KV 缓存如何优化 transformer 推理的必要条件。当我们通过传递 “She” 来提示模型开始生成时,它将生成一个单词,例如“poured”(为了避免干扰,我们继续假设一个 token 是一个单词)。然后,我们可以将 “She poured” 传递给模型,它会生成 “coffee”。

Gaga246的博客 937

SPI模式下的SD卡读写,为什么你的数据总出错?详解时序与状态机避坑指南

本文深入探讨SPI模式下SD卡读写数据出错的根本原因,提供时序优化与状态机设计的实战指南。针对时钟周期计数、状态机跳转和忙检测等核心问题,详解命令时序细节、状态机同步策略及高级避坑技巧,帮助开发者提升SD卡在SPI模式下的稳定性和性能。

weixin_30514745的博客 263

第三章:KV 缓存:原理、框架实现与性能优化实战

本章我们深入探讨了 KV 缓存的原理、实现和优化策略. 通过了解 KV 缓存的工作方式,我们可以更好地理解现代 LLM 如何实现高效的推理. 掌握 KV 缓存的相关知识对于我们未来学习更高级的推理优化技术至关重要。

YPeng_Gao的博客 2094

别再让会议变‘回音壁’:手把手教你调优WebRTC的AEC3回声消除(附实战代码)

本文深入解析WebRTC的AEC3回声消除技术,提供从参数调优到声学环境适配的实战指南。通过诊断回声特征、解剖核心参数(如filter.length_blocks和delay_estimate_smoothing)以及应对特殊场景(如密闭空间与开放办公区),帮助开发者有效解决视频会议中的回声问题,提升语音通信质量。附有实战代码和调试工具,适合需要优化实时通信体验的开发者。

weixin_29220405的博客 176

复现基于混频因子模型的GDP即时预测方法

基于混频因子模型的GDP即时预测方法复现 本文复现了混频因子模型(MIDAS)在GDP即时预测中的应用。该方法整合7个月度宏观经济变量(工业增加值、CPI、PMI等)与季度GDP数据,通过状态空间模型实现高频预测。技术实现包括:1)使用PCA提取潜在共同因子;2)构建状态空间模型处理混频数据;3)通过卡尔曼滤波进行参数估计。实证结果显示模型预测效果良好(测试集R²=0.82),其中工业增加值对因子1贡献最大(0.82),CPI对因子2贡献显著(0.78)。该方法为决策者提供了更及时的季度GDP估算。

huanghm88的专栏 601

从零开始,深入理解与编码 LLM 中的KV缓存机制!

KV缓存是大语言模型推理阶段的关键优化技术,其核心思想是缓存中间计算的key和value向量以避免重复计算。本文通过代码实例详细讲解了KV缓存的实现原理:1. 在MultiHeadAttention层注册缓存缓冲区;2. 前向传播时根据use_cache标志决定是否复用缓存;3. 实现缓存清除和位置追踪机制;4. 修改文本生成函数以支持增量推理。实验表明,在1.24亿参数模型上,KV缓存可带来约5倍的推理加速。文章还讨论了优化方向,如预分配内存和滑动窗口机制,并指出KV缓存在实际部署中的价值远大于其增加的内

Trb201013的博客 993

AgentScope实战训练营- Java从零开始快速构建Agent完整教程

本文基于阿里巴巴开源的 AgentScope Java 框架,从零开始手把手带你构建 AI 智能体应用。内容涵盖环境搭建、基础对话、工具调用、结构化输出、多Agent流水线、Hook可观测性、会话持久化、MCP协议、RAG知识库集成、多模态工具、技能系统、Spring Boot Web部署等21个核心模块,附带完整可运行代码示例,帮助Java开发者快速掌握Agent开发全流程。

program哲学 867

从零开始理解和编写LLM中的KV缓存

简而言之,KV缓存存储中间的键值对(K)和值对(V)计算结果,以便在推理过程中(训练之后)重复使用,从而显著提高文本生成速度。:每个新标记都会添加到键值缓存中。请记住,虽然我在这里优先考虑的是代码的清晰度和可读性而非效率,但关键在于,实际应用中往往需要周全的优化,例如预先分配内存或应用滑动窗口缓存来有效管理内存增长。在下图(使用缓存)中,从键值缓存中检索先前计算过的键值,避免重复计算,从而加快生成速度。下一章会训练模型,你可以使用训练好的模型的键值缓存(但是,键值缓存仅用于推理阶段)来生成连贯的文本。

大隐隐于野 1547

AI智能体丨使用Coze一键生成道教国学智慧语录视频,涨粉快好变现!(附保姆级教程)

该教程详解如何通过自动化流程批量制作道家国学视频,将晦涩哲理转化为轻量化内容,适配短视频平台需求。

李同学Lino的博客 3502

7.5华为OD机试真题 新系统 - 省超足球比赛获胜队伍计算 (Java/Py/C/C++/Js/Go)

7.5华为OD机试真题 新系统 - 省超足球比赛获胜队伍计算 (Java/Py/C/C++/Js/Go)

算法大师! 827

【收藏】LLM推理性能提升5倍的秘诀:手把手教你实现KV缓存

KV缓存是提升大语言模型推理效率的关键技术,通过缓存并复用已计算的Key和Value向量,避免重复计算,将复杂度从O(n²)降至O(n)。文章详细介绍了KV缓存的核心思想、工作原理,提供了从零实现的代码示例,并展示了其在实际应用中约5倍的性能提升。同时分析了KV缓存的优缺点及优化技巧,为LLM部署提供了实用指导。

2401_84815887的博客 711

【PINN物理信息网络】基于PINN物理信息网络求解泊松方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解泊松方程(python)

k8291121的博客 2813

LLM缓存机制深度解析:从KV Cache到语义缓存,实现响应速度与成本双优化

在大型语言模型(LLM)的应用实践中,响应延迟和高昂的计算成本是开发者普遍面临的挑战。其核心原理在于Transformer架构的自回归生成机制,模型在预测每个新词元时,都需要依赖并重新计算所有历史词元的注意力权重,导致计算量随输出长度呈平方级增长,严重制约了实时交互体验。为了突破这一瓶颈,缓存技术应运而生,它通过复用中间计算结果,将重复计算转化为高效检索,从而在工程层面实现了性能的质变。具体而言,KV Cache(键值缓存)作为模型内部的短期记忆,通过缓存注意力机制中的Key和Value张量,将生成过程的计

weixin_34025051的博客 357

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

AI System Design Guide基础入门:从零开始理解LLM内部机制与Transformer架构

想要构建生产级AI系统?**AI System Design Guide**为您提供完整的LLM内部机制与Transformer架构指南。在本文中,我们将深入浅出地解析大语言模型的核心工作原理,帮助工程师和开发者快速掌握现代AI系统的设计基础。无论您是AI新手还是经验丰富的工程师,这份指南都将为您提供实用的系统设计知识。 ## 🔍 为什么需要理解LLM内部机制? 在构建AI系统时,理解大语言

gitblog_00174的博客 925

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

深入理解Attention Sinks的KV缓存机制:代码级实现分析

在大型语言模型(LLM)的实际应用中,长文本处理一直面临着内存限制的挑战。**Attention Sinks**技术通过创新的KV缓存管理机制,实现了在不重新训练模型的情况下突破原始训练长度限制,同时保持恒定的内存占用。本文将从代码实现角度解析这一机制的核心原理与工作流程。 ## 核心原理:Attention Sinks如何突破长度限制? 传统Transformer模型在生成文本时,会将所有先

gitblog_00702的博客 643

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LLM缓存机制深度解析:从KV Cache到Prompt Cache的工程实践

在Transformer架构中,自注意力机制通过Query、Key、Value矩阵实现序列建模,其计算复杂度随序列长度增长而显著增加。KV Cache技术通过缓存已生成Token的Key-Value对,避免了重复计算,将生成新Token的计算复杂度从O(n²)降至O(1),大幅提升了推理效率。这项技术对降低大语言模型推理延迟、优化计算资源利用具有关键价值,广泛应用于对话系统、代码生成等实时交互场景。本文聚焦LLM缓存机制,深入探讨了KV Cache的内存优化策略与Prompt Cache的跨请求复用原理,为

weixin_34037515的博客 383

PolyKV:多智能体LLM推理中的共享KV缓存与压缩优化实践

在大语言模型推理中,KV缓存是Transformer自注意力机制的关键组件,用于存储历史token的键值对以计算注意力权重。其核心原理在于通过缓存避免重复计算,从而提升生成效率。然而,在多智能体并发场景下,独立的KV缓存会引发显存墙问题,严重制约系统扩展性。PolyKV的技术价值在于创新性地引入了共享缓存池与非对称压缩策略,通过池化架构消除静态分区浪费,并基于Key和Value向量对精度敏感度的差异实施差异化压缩。这一方案尤其适用于智能客服群组、多角色NPC、协同编码等多智能体应用场景,为突破显存瓶颈、提升

weixin_30598225的博客 297

LLM推理四大缓存机制:KV、前缀、语义与混合缓存深度解析

缓存是大语言模型(LLM)推理加速的核心技术,其本质是以空间换时间,通过减少重复计算与访存延迟提升响应效率。从硬件层级看,L1缓存访问仅需0.5纳秒,远低于GPU矩阵运算的微秒级开销;从算法层面,缓存复用依赖于token级、序列级乃至意图级的冗余特征。KV缓存实现Transformer中Key-Value的静态复用,前缀缓存支持部分匹配的动态共享,语义缓存则依托向量相似度突破字面限制,而混合缓存通过成本感知路由实现多层协同。这些机制共同构成LLM服务高吞吐、低延迟、可扩展的工程基石,广泛应用于API网关、对

weixin_29056865的博客 75

通俗理解KV Cache加速推理

摘要 本文深入解析了Transformer模型中提升推理效率的关键技术——KV Cache。在自回归生成场景下,传统方法因重复计算导致O(n²)复杂度,而KV Cache通过缓存历史token的Key-Value矩阵,将计算复杂度降至线性。文章从Transformer基础架构入手,详细拆解自注意力机制的计算过程,揭示推理瓶颈,并通过代码示例展示KV Cache的实现原理。实验表明,该技术可使Llama-2等大模型推理速度提升2-5倍,特别适用于长文本生成。文中还探讨了内存管理、批处理优化等实践挑战,为开发者

1380
上一篇: AI大模型:从入门到实战全攻略
下一篇: 从人的需求出发:智能体应用场景的实用性与价值探索
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值