探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存

本文主要是介绍探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)

KV缓存

在推理的每一步中,只对模型输出的最后一个标记感兴趣,因为已经有了之前的标记。然而,模型需要访问所有先前的标记来决定输出哪个标记,因为它们构成了它的上下文(或“提示”)。
这是一种使模型在推理过程中对已经看到的标记进行更少计算的方法。解决办法就是KV缓存!

在Transformer的推理过程中, 增量且顺序地获取查询向量。将其乘以 Key 向量即可得到每个 token 与先前生成的 token 及其自身的注意力矩阵。然后,在取softmax之后, 乘以值向量以获得自注意力分数。最后有另一个输出投影矩阵,用于转换下一组多头注意力层的注意力分数。这个计算重复多次,然后得到词汇表中所有单词的概率分布
在这里插入图片描述
在上图中, 可以看到Transformer的推论。标记 TOKEN 1 到 TOKEN 4 按顺序出现,因为注意力计算 TOKEN 4 取决于所有先前的标记。

  • 在紫色矩阵中, 可以看到 Q 和 K 矩阵乘法随着注意力矩阵一起增长,但 K 和 V 值矩阵对于所有先前的标记保持相同。另外,如图所示, 不需要已经计算出的注意力分数(需要注意的是, 可能需要波束搜索来获得它们,但这里 只考虑贪婪采样),所以 可以扔掉它们。深紫色矩阵实际上为零,因为它是因果矩阵,因此第一个标记从不关注第四个标记,并且它们被屏蔽。

  • 因此 可以缓存 K 和 V 矩阵,因为它们不会改变。但是, 无法缓存 Q 矩阵。这是因为 Q 矩阵随着每个新标记而变化。查询矩阵是标记正在查找的内容,键矩阵是标记包含的内容,值矩阵是当前标记和前一个标记是否对词汇表中的标记感兴趣。

  • 此外,可以借助电影数据库来理解查询(query)、键(key)和值(value)的概念。假设你想看一部能让你发笑,并且最后有一个“谁是凶手”环节的电影(这是查询)。那么首先,我们会在数据库中查询一部能让我们发笑的电影,这将是一部喜剧片(这是键)。然后,我们会得到一系列喜剧电影的推荐(这是值)。在那之后,电影数据库会获取到电影应该是“谁是凶手”类型或属于惊悚片类型的信息。然后,电影数据库将寻找喜剧和惊悚类型的电影(这是更新后的键),并且借助之前缓存的喜剧电影推荐,我们可以搜索那些同时也是惊悚片的电影(值)。
    因此, 可以缓存喜剧类型和所有喜剧电影推荐,以便当新信息出现(惊悚类型)时, 可以缩小搜索范围并提高效率。

KV 缓存对于高效推理至关重要,因为 增量存储键和值矩阵并缓存它们,以便可以更快地计算未来的注意力分数。

def repeat_kv(x: torch.Tensor, n_rep: int)-> torch.Tensor:batch_size, seq_len, n_kv_heads, head_dim = x.shapeif n_rep == 1:return xelse:return (# (B, seq_len, n_kv_heads, 1, head_dim)x[:, :, :, None, :].expand(batch_size, seq_len, n_kv_heads, n_rep, head_dim).reshape(batch_size, seq_len, n_kv_heads * n_rep, head_dim))

KV 缓存的一些问题

KV缓存一般存储在连续的内存中。如果有多个并行请求,那么它们需要单独存储,这会浪费内存,并可能导致 OOM(内存不足)错误。而且,每个请求的提示几乎相同(特别是像“你是一个有用的助手…”这样的系统提示),因此一次又一次地将它们存储在连续的内存中效率很低。
在这里插入图片描述

  • 静态模型权重消耗了近 65% 的 VRAM 内存,而 KV 缓存则消耗了近 30%,因为它会因多个请求而增大且内存使用效率低下。并且,如果将 KV 缓存存储在连续的内存中,那么在一些服务之后需要将其取消分配以适应最近的 KV 缓存

  • 如果想要生成具有一些初始响应的并行多个响应,那么需要为每个生成的响应单独存储它们在连续的内存中,这会浪费很多空间。此外,使用诸如束搜索(beam search)这样的高级技术时,会根据生成的的未来累积概率来选择最有可能的。在这里,需要回溯并关闭一些路径,因此对于束搜索中的每个方向,如果分配了一个新的连续内存,那么它将消耗大量内存,效率很低。

  • GPU在矩阵乘法方面已经变得非常擅长,但这些系统的记忆仍然有限,因此受内存限制。KV缓存可以帮助,因为它可以帮助更快地获取键和值矩阵以进行计算。但在内存有限的情况下,需要提出更好的内存管理方法。

系列博客

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)
https://duanzhihua.blog.csdn.net/article/details/138208650
探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(二)
https://duanzhihua.blog.csdn.net/article/details/138212328

在这里插入图片描述

在这里插入图片描述

这篇关于探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939473

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

Spring Cloud:构建分布式系统的利器

引言 在当今的云计算和微服务架构时代,构建高效、可靠的分布式系统成为软件开发的重要任务。Spring Cloud 提供了一套完整的解决方案,帮助开发者快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器等)。本文将探讨 Spring Cloud 的定义、核心组件、应用场景以及未来的发展趋势。 什么是 Spring Cloud Spring Cloud 是一个基于 Spring

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN