Transformer 从attention到grouped query attention (GQA)

news2024/9/23 5:33:40

Attention原理和理解

attention原理参考:

Attention Is All You Need

The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.

Transformer图解 - 李理的博客

Attention首先对输入x张量乘以WQ, WK, WV得到query, key, value张量。

然后进行attention计算:

这里怎么理解query和key, value张量的含义,可以参考:

Transformer中K 、Q、V的设置以及为什么不能使用同一个值

https://prasad-jayanti.medium.com/what-is-query-key-value-qkv-attention-3b8f9eb15124

transformer中QKV的通俗理解(渣男与备胎的故事)-CSDN博客

Q,K,V是由输入的词向量x经过线性变换得到的,其中各个矩阵W可以经过学习得到, 这种变换可以提升模型的拟合能力, 得到的Q,K,V 可以理解为
Q: 要查询的信息
K: 被查询的向量
V: 查询得到的值

通俗的讲(个人理解),query可以认为是N个输入元素的期望值,key是M个"数据库"元素的实际值,value是M个数据库元素的属性。attention第一部分,首先用N输入元素的期望值跟M个数据库元素的实际值进行内积操作,得到[N, M]的相似度矩阵,这里面包含了每一个输入元素与数据库元素的相似度评价指标。然后第二部分,用[N, M]的相似度矩阵与[M, hidden]的属性张量做内积,这里实际上是用相似度作为权重,对M个数据库元素的属性做了一次加权求和,结果为加权平均的属性值。

这里我用"数据库"只是一种说明方式,并不是指真的数据库。比如LLM decoding阶段,N=1为当前输入的token,而数据库元素则为之前已经生成的所有token。

位置编码只添加到了query和key张量,而没有添加到value张量。可以认为位置编码主要是用来根据位置信息辅助获取输入元素和数据库元素的相似度计算。

Multi-head attention

注意力函数以某种方式量化了句子中任意两个标记之间的依赖关系/关系。由于这两个标记可以具有多种类型的关系——芒果和苹果不仅可以食用,而且它们都长在树上!这种逻辑激发了多头注意力的出现,而多头注意力是许多大型语言模型所基于的 Transformer 架构的核心。

multi-head就是在上面普通attention的基础上采用多组独立的attention计算,即原来是普通的矩阵乘,现在扩展到了batch矩阵乘。每一个batch是一个head。希望每一个head能够进行一种不同特征属性的attention计算。
 

Grouped query attention (GQA)

Ref:

GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints
这篇文章介绍了GQA的概念和好处:

Multi-query attention (MQA), which only uses a single key-value head, drastically speeds up decoder inference. However, MQA can lead to quality degradation

grouped-query attention (GQA), a generalization of multi-query attention which uses an intermediate (more than one, less than number of query heads) number of key-value heads. We show that uptrained GQA achieves quality close to multi-head attention with comparable speed to MQA.

multi-head attention (MHA) can be uptrained (Komatsuzaki et al., 2022) to use MQA with a small fraction of original training compute. This presents a cost-effective method to obtain fast multi-query as well as high-quality MHA checkpoints.

GQA achieves quality close to multihead attention (MHA) while being almost as fast as multiquery attention(MQA).

也就是GQA精度与MHA相近,但是推理速度更好与MQA相近。

在理解了上面的multi-head attention后理解GQA是非常容易的:multi-head attention基础上,query的head数量没有变化,还是num_attention_heads,但是把key和value相邻的几个(例如4个)head合并成了一个,数量变为num_key_value_heads,这样相当于几个query的head共享一个key和value的head。

下图是llama3 8b的GQA Q K V矩阵乘的计算,可以看到query的hidden是key和value的4倍,最终reshape和transpose后的head分别是32和8,每个head的hidden size是128.

attention部分的onnx计算图(flash attention相当于把如下子图attention计算相关的算子融合为了一个算子):

导出的onnx对key, value进行了expand,使得它们的head数与query一致,从而无法利用GQA的优势。当然实际上expand是没有必要的,因为matmul算子的batch本来是支持elemwise的broadcast规则的,也就是[1,32,N,128]reshape为[1,8,4,sumN,128]再与[1,8,1,sumN,128]直接矩阵乘即可,无需expand后者。

Flash attention的实现直接支持了GQA的场景,无需expand,从而利用到GQA的优势,llama3具有相关的实现。

从上面的计算图可以看到,GQA使得attention计算的key, value张量head数变为了原来的几分之一,从而有助于降低attention计算的访存量,但计算量并没有变。并且KV cache的大小也降低为了原来的几分之一,模型推理的内存使用因此也显著降低了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1706772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地开发正常 线上CI/CD构建项目过程报错文件未能正确引用

问题快照 原因分析: 一般遇到这样的错误就是 文件路径或者文件名称未能正确匹配 或者文件不存在 会报这样的错误 以为很好解决 但这次 都排查 了 就是 没发现原因 不管怎么说还是要感谢 GPT的能力(分析问题的能力) 先上图 当我看到 第四步的时候 我立马 去仓库里查…

没开玩笑!高速信号不能参考电源网络这条规则,其实很难做到

高速先生成员--黄刚 看到这篇文章的题目,我相信大家心里都呈现出了这么一个场景:高速信号线在L20层,我只要把L19和L21层都铺上完整的地平面,这不就满足了高速信号线不能参考电源平面这条规则了吗?这难道很难做到吗&…

Windows 使用技巧

Windows 使用技巧 ①局域网内共享文件 ②CTRL Y 和 CTRL Z ①局域网内共享文件 第一步: 选择要共享的文件(分享方操作) 第二步: 右键打开属性,选择共享(分享方操作) 第三步: …

Spring使用的设计模式

Spring 框架是一个广泛使用的 Java 框架,它内部使用了多种设计模式来简化开发过程、提高代码的可维护性和扩展性。 以下是一些在 Spring 框架中常见的设计模式,以及用代码示例来解释它们: 一、工厂模式(Factory Pattern&#xff…

C#开发上位机应用:基础与实践

C#是一种流行的面向对象编程语言,常用于Windows应用程序的开发。上位机应用是一种用于监控和控制设备或系统的应用程序,通常与下位机(如传感器、执行器等)进行通信。在本文中,我们将介绍C#开发上位机应用的基础知识和实…

Vue3 之 动态组件和KeepAlive组件

一、动态组件 1、简介 ​ 在某些业务场景下,页面的某模块具有多个组件但在同一时间只显示一个,需要在多个组件之间进行频繁的切换,如:tab切换等场景。除了可以使用v-if、v-show根据不同条件显示不同组件之外,还可以通…

Element-Plus中表格及分页功能

导入Element-Plus 具体步骤如下:(内容参照官网:安装 | Element Plus) # 选择一个你喜欢的包管理器# NPM $ npm install element-plus --save# Yarn $ yarn add element-plus# pnpm $ pnpm install element-plus 在main.js文件的…

【论文阅读笔记】The Google File System

1 简介 Google File System (GFS) 是一个可扩展的分布式文件系统,专为快速增长的Google数据处理需求而设计。这篇论文发表于2003年,此前已在Google内部大规模应用。 GFS不仅追求性能、可伸缩性、可靠性和可用性等传统分布式文件系统的设计目标&#xf…

超市进销存|基于SprinBoot+vue的超市进销存系统(源码+数据库+文档)

超市进销存系统 目录 基于SprinBootvue的超市进销存系统 一、前言 二、系统设计 三、系统功能设计 1 登录注册 2 管理员功能模块 3员工功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&#x…

leetcode 1264页面推荐(postgresql)

需求 朋友关系列表: Friendship ---------------------- | Column Name | Type | ---------------------- | user1_id | int | | user2_id | int | ---------------------- 这张表的主键是 (user1_id, user2_id)。 这张表的每一行代表着 user1_id 和 user2_id 之间…

URL跳转

1.URL介绍 开放重定向(Open Redirect),也叫URL跳转漏洞,是指服务端未对传入的跳转url变量进行检查和控制,导致诱导用户跳转到恶意网站,由于是从可信的站点跳转出去的,用户会比较信任。 2.URL跳…

【最新区块链论文录用资讯】CCF A—INFOCOM 2024 共17篇

Conference:IEEE International Conference on Computer Communications CCF level:CCF A Categories:计算机网络 Year:2024 Num:17 A Generic Blockchain-based Steganography Framework with High Capacity via …

员工管理和激励怎么做?试试场景化激励解决方案!

截止到2020年底,中国企业主体数量达3858.3万,同比增速达11.1%。如何留住人才、激励人才以强化人才与企业“黏性”,最大化提升员工的忠诚度与敬业度,成为企业未来人才发展战略的主要方向之一。 一、传统激励方式存在哪些不足 传统的…

【加密与解密(第四版)】第十三章笔记

第十三章 HOOK技术 13.1 Hook概述 IAT HOOK(改地址) BOOL IAT_InstallHook(){BOOL bResult FALSE ;HMODULE hCurExe GetModuleHandle(NULL);PULONG_PTR pt ;ULONG_PTR OrginalAddr;bResult InstallModuleIATHook(hCurExe,"user32.dll",&qu…

若依启动run-modules-system.bat报错问题解决方案

在启动run-modules-system.bat时遇到了一些问题,在网上搜索无果后,排查解决完毕 1.启动nacos时,报错如下 Error creating bean with name grpcClusterServer: Invocation of init method failed; nested exception is java.io.IOException: Failed to bind to address 0.0.0.0…

CSS精灵图

详细内容见B站黑马程序员网课: 【前端Web开发HTML5CSS3移动web视频教程,前端web入门首选黑马程序员】https://www.bilibili.com/video/BV1kM4y127Li?p99&vd_source06e5549bf018e111f4275c259292d0da

智慧林业云巡平台 客户端和移动端(支持语音和视频)自动定位巡护,后端离线路线监测

目前现状 无法客观、方便地掌握护林员的到位情况,因而无法有效地保证巡护人员按计划要求,按时按周期对所负责的林区开展巡护,使巡护工作的质量得不到保证。遇到火情、乱砍滥伐等灾情时无法及时上报处理,现场状况、位置等信息描述…

代码随想录——左叶子之和(Leetcode404)

题目链接 BFS 队列 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

小程序使用vant组件库

一:下载组件库 在小程序内npm下载的包 vant组件库官网:快速上手 - Vant Weapp (youzan.github.io) 1)首先有有package.json文件,没有的话则先初始化 即使通过package.json去下载包,也需要有,可以观察下载的包. 2)下载包 3)构建npm包 下载包之后存储在node_modules内,但是我们…

ChatGPT原创指令大全(持续更新)

随着ChatGPT在互联网上的使用越来越多,但很多人在使用ChatGPT的过程中会觉得得到的答案并不是很精准。究其原因其实是你给它的命令不够准确、不够到位。实际现在网上已经很多关于ChatGPT的网站,可以快速生成带有快捷键的ChatGPT指令。但是对于不熟悉Chat…