首页 > 其他分享 >【杂学】大模型推理加速 —— KV-cache 技术

【杂学】大模型推理加速 —— KV-cache 技术

时间:2024-11-13 20:42:42浏览次数:1  
标签:杂学 overrightarrow color text cache Att green KV

如果不熟悉 Transformer 的同学可以点击这里了解

自从《Attention Is All You Need》问世以来,Transformer 已经成为了 LLM 中最基础的架构,被广泛使用。KV-cache 是大模型推理加速的关键技术之一,已经成为了 Transformer 标配的功能,不过其只能用于 Decoder 结构:由于 Decoder 中有 Mask 机制,推理的时候前面的词不需要与后面的词计算 attention score,因此KV 矩阵可以被缓存起来用于多次计算。

例如,我们要生成 "I love Tianjin University" 这句话。首先是只有开头标记 <s>,计算过程如下图所示(为了便于理解,我们将 softmax 和 scale 去掉):

最终第一步的注意力 \(\text{Att}_{step1}\) 计算公式为:

\[{\color{red}\text{Att}_1}(Q,K,V)=({\color{red}{Q_1}}K_1^T)\overrightarrow{V_1} \]

此时序列中的词为 "<s> I",由于有 Mask 机制,第二步计算如下图所示:

第二步的注意力为:

\[\begin{aligned} \text{Att}_{step2}&=\begin{bmatrix}{\color{red}{Q_1}}K_{1}^{T}&0\\{\color{green}{Q_2}}K_{1}^{T}&{\color{green}{Q_2}}K_{2}^{T}\end{bmatrix}\begin{bmatrix}\overrightarrow{V_{1}}\\\overrightarrow{V_{2}}\end{bmatrix} =\begin{bmatrix}{\color{red}{Q_1}}K_1^T\times\overrightarrow{V1}\\{\color{green}{Q_2}}K_1^T\times\overrightarrow{V1}+{\color{green}{Q_2}}K_2^T\times\overrightarrow{V2}\end{bmatrix} \end{aligned}\]

设 \(\text{Att}_1\) 是第一行,\(\text{Att}_2\) 是第二行,则有:

\[\begin{aligned}&{\color{red}\text{Att}_1}(Q,K,V)={\color{red}{Q_1}}K_1^T\overrightarrow{V_1}\\&{\color{green}\text{Att}_2}(Q,K,V)={\color{green}{Q_2}}K_1^T\overrightarrow{V_1}+{\color{green}{Q_2}}K_2^T\overrightarrow{V_2}\end{aligned} \]

此时我们可以大胆猜想:

  • \(\text{Att}_k\) 只与 \(Q_k\) 有关
  • 已经计算出的 \(\text{Att}\) 永远都不会改变

带着这个猜想,继续生成下面的词,容易计算第三步可以得到:

\[\begin{aligned}&{\color{red}\text{Att}_1}(Q,K,V)={\color{red}{Q_1}}K_1^T\overrightarrow{V_1}\\&{\color{green}\text{Att}_2}(Q,K,V)={\color{green}{Q_2}}K_1^T\overrightarrow{V_1}+{\color{green}{Q_2}}K_2^T\overrightarrow{V_2}\\&{\color{blue}\text{Att}_3}(Q,K,V)={\color{blue}{Q_3}}K_1^T\overrightarrow{V_1}+{\color{blue}{Q_3}}K_2^T\overrightarrow{V_2}+{\color{blue}{Q_3}}K_3^T\overrightarrow{V_3}\end{aligned} \]

同样的,\(\text{Att}_k\) 只与 \(Q_k\) 有关。第四步也相同:

看上面的图和公式,我们可以归纳出性质:

  1. 朴素的 Attention 计算存在大量冗余
  2. \(\text{Att}_k\) 只与 \(Q_k\) 有关,即预测词 \(x_k\) 仅依赖于 \(x_{k-1}\)
  3. \(K\) 和 \(V\) 全程参与计算,可以缓存起来
  4. 虽然叫做 KV-cache,但其实真正优化掉的是冗余的 \(Q\) 和 \(\text{Att}\)

当然,这有点类似于动态规划思想,也存在利用空间换取时间的问题,因此当序列很长时,KV-cache 有可能会出现内存爆炸的情况。

下面附上 gpt 的 KV-cache 代码,非常简单,仅仅是做了 concat 操作。不过值得注意的是,attention 的计算并没有使用 cache。

if layer_past is not None:
        past_key, past_value = layer_past
        key = torch.cat((past_key, key), dim=-2)
        value = torch.cat((past_value, value), dim=-2)
    
    if use_cache is True:
        present = (key, value)
    else:
        present = None
    
    if self.reorder_and_upcast_attn:
        attn_output, attn_weights = self._upcast_and_reordered_attn(query, key, value, attention_mask, head_mask)
    else:
        attn_output, attn_weights = self._attn(query, key, value, attention_mask, head_mask)

标签:杂学,overrightarrow,color,text,cache,Att,green,KV
From: https://www.cnblogs.com/keanshi/p/18532463

相关文章

  • AutoCAD Blockview .net在wpf项目中的问题
    之前使用Blockview是遇到平移的问题,这几天在学习使用CommunityToolkit.MVVM框架来创建用户界面,当创建GsPreviewCtrl控件时会遇到错误,导致整个窗体不能显示,错误信息如下:**************异常文本**************System.InvalidProgramException:公共语言运行时检测到无效的......
  • 【杂学】先进的 NLP 技术 —— 旋转位置编码(Rotary Position Embedding,RoPE)
    Transformer已经渐渐成为目前LLM最通用底层架构之一,其中的位置编码也显得极其重要,由于注意力分数本质上是每个token的val加权和,并没有考虑其中的空间信息,因此需要在自注意力模块之前就将位置信息融合进序列中。绝对位置编码绝对位置编码是一种将序列中的每个位置进行编码......
  • 模块二:central cache实现
    一、centralcache介绍结构也是一个哈希桶,大小划分和threadcache哈希桶一样,区别在于挂的不是自由链表而是span链表,里面连接了许多span二、span介绍1、实现思路span就是centralcache向pagecache申请的大块内存,由一个个页(大小4KB)组成。span链表是一个带头双向......
  • 7天用Go从零实现分布式缓存GeeCache(学习)(2)
    参考:https://geektutu.com/post/geecache-day2.html//Cache是一个LRU缓存(最近最少使用缓存),它不是并发安全的。typeCachestruct{maxBytesint64//缓存的最大字节数nbytesint64//当前缓......
  • esp32实现简单的kv数据库
    我来帮你优化代码,使用SPIFFS(SPIFlashFileSystem)来实现数据持久化存储。#include<ESP8266WebServer.h>#include<ESP8266WiFi.h>#include<FS.h>#include<ArduinoJson.h>//WiFi设置constchar*ssid="你的WiFi名称";constchar*password=&quo......
  • DDCA —— 缓存(Cache):缓存体系结构、缓存操作
    1.存储器层次(TheMemoryHierarchy)1.1现代系统中的存储器其中包括L1、L2、L3和DRAM1.2存储器的局限理想存储器的需求如下:零延迟容量无限零成本带宽无限零功耗但理想存储器的需求彼此冲突:容量更大的存储器意味着更大的延迟:需要花更长的时间来确定数据所在位置更......
  • Web缓存中毒(Web Cache Poisoning)是一种网络攻击技术,攻击者通过篡改或伪造Web服务器的
    Web缓存中毒(WebCachePoisoning)是一种网络攻击技术,攻击者通过篡改或伪造Web服务器的缓存内容,使得用户在访问网站时,获得恶意内容或错误内容的攻击方式。这种攻击通常依赖于利用Web缓存的设计缺陷或未充分验证的请求参数,从而让缓存服务器存储并返回恶意的、篡改过的响应。工作原理......
  • [20241108]跟踪library cache lock library cache pin使用gdb(11g)4.txt
    [20241108]跟踪librarycachelocklibrarycachepin使用gdb(11g)4.txt--//验证前面建立的gdb脚本确定librarycachepinaddress是否正确.1.环境:SCOTT@book>@ver1PORT_STRING                   VERSION       BANNER---------------------------......
  • [20241108]跟踪library cache lock library cache pin使用gdb(11g)3.txt
    [20241108]跟踪librarycachelocklibrarycachepin使用gdb(11g)3.txt--//前一段时间写的使用gdb跟踪librarycachelock/librarycachepin的脚本。--//我看过以前的笔记,当时测试过链接https://nenadnoveljic.com/blog/library-cache-lock-debugger/,我的测试在11g是失败.--//......
  • [20241107]nocache的编译.txt
    [20241107]nocache的编译.txt--//原来的测试环境不存在,需要建立nocache工具了解文件缓存情况,学习OS相关知识。--//实际上linux对这些工具从应用角度讲不重要,如果有用,linux实用程序里面应该包含类似工具。可惜一直不提供。--//一般这类安装,我都会写安装笔记,我看了以前的安装笔记,重......