Transformer 从attention到grouped query attention (GQA)

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.mzph.cn/web/18267.shtml

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

相关文章

软件程序设计规范(代码编写规范文档)-word下载

程序的编码是一个创造性极强的工作,必须要遵守一定的规则和限制,编码风格的重要性对软件项目开发来说是不言而喻的。 开发工程师在开发过程中必须遵守本规范,规范是代码编写及代码验收等管理环节中必须执行的标准。 编制基本原则:…

169. 多数元素

题目 解答 方法一:Boyer-Moore 投票算法 class Solution {func majorityElement(_ nums: [Int]) -> Int {var candidate 0var count 0for num in nums {if count 0 {candidate numcount 1} else {if candidate num {count 1} else {count - 1}}}return …

Dropbear SSH服务器的安装和优化

我來為大家介紹如何在Ubuntu下配置和調優Dropbear伺服器。 今天我在三丰云的免費服務器上進行部署測試,這家不錯的免費雲服務商提供的1核1G 10G硬碟和5M帶寬配置,足夠我們輕鬆部署和運行Dropbear伺服器了。三丰雲的免費云服務器真的非常給力! 首先讓我們來介紹一下Dropbear。…

计算机毕业设计hadoop+spark+hive物流大数据分析平台 物流预测系统 物流信息爬虫 物流大数据 机器学习 深度学习

流程: 1.Python爬虫采集物流数据等存入mysql和.csv文件; 2.使用pandasnumpy或者MapReduce对上面的数据集进行数据清洗生成最终上传到hdfs; 3.使用hive数据仓库完成建库建表导入.csv数据集; 4.使用hive之hive_sql进行离线计算&…

webserver服务器从零搭建到上线(九)|⭐️EventLoop类(一)——详解成员变量、简述成员方法

在本节中&#xff0c;我们一起来仔细探讨一下EpollPoller类。该类可以说是muduo库中最最核心的类了&#xff0c;一定要搞懂&#xff01; 文章目录 私有成员using ChannelList std::vector<Channel*>looping_、quit_threadId_pollReturnTime_、poller_wakeup_fd、wakeupC…

一种基于单片机的智能饮水机设计

随着人们生活水平的提高&#xff0c;对美好生活质量的追求也越来越高。饮 水机是人们日常生活不可或缺的&#xff0c;实现饮水机的智能化控制不但方便&#xff0c; 而且更加安全。本文提出一种基于单片机的智能饮水控制系统&#xff0c;通过传 感器实现对水温的监测&#xff0c…

Spring (25)如何在Spring中实现分页和排序

在Spring框架中&#xff0c;实现分页和排序是数据访问层常见的需求。Spring Data JPA&#xff0c;作为Spring生态系统的一部分&#xff0c;为这些功能提供了强大的支持。它简化了创建基于JPA的存储库接口的过程。在这里&#xff0c;我们深入探讨如何使用Spring Data JPA实现分页…

Redis(十四) 主从模式

文章目录 前言什么是分布式系统主从模式实现Redis主从模式主从模式原理nagle 算法拓扑结构主从模式实现的过程psync实时复制 前言 Redis 作为在内存中操作数据的服务器系统&#xff0c;每时都会接收成千上万的请求&#xff0c;如果我们的业务只在单个服务器上面部署了 Redis&a…

Android环境下Mesa初始化流程重学习之eglInitialize

Mesa初始化流程重学习之eglInitialize 引言 说来也惭愧&#xff0c;Mesa搞了这么久了&#xff0c;每次都想深入下&#xff0c;可是每次都是浅尝辄止了。这次趁着有了一定的闲暇时间并且有了调试景嘉微显卡的机会&#xff0c;还是想重新学习下&#xff0c;深入研究下&#xff0…

常见排序算法之插入排序

目录 一、直接插入排序 1.1 什么是插入排序 1.2 代码思路 1.3 C语言源码 二、希尔排序 2.0 插入排序的弊端 2.1 什么是希尔排序&#xff1f; 2.2 排序思路 2.3 C语言源码 一、直接插入排序 1.1 什么是插入排序 插入排序是一种简单直观的排序算法&#xff0c;它通过构…

【Python】scikit-learn 常用算法模型

文章目录 一、分类算法1、K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;2、支持向量机&#xff08;Support Vector Machine, SVM&#xff09;3、决策树&#xff08;Decision Tree&#xff09; 二、回归算法4、线性回归&#xff08;Linear Regression&#xff09;…

LCD屏入门(基于ESP32)

主要参考资料&#xff1a; B站【乐鑫全球开发者大会】DevCon23 #17 &#xff5c;HMI 智能屏解决方案 目录 1.LCD屏幕硬件层2.LVGL驱动层 1.LCD屏幕硬件层 MCU常用的驱动接口在下面&#xff0c;大致可以划分为串口屏和并口屏。 串口屏相较于并行屏优势是占用IO少&#xff0c;相…

【oracle】Oracle RAC中的GNS到底是什么?

本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载 一、概述 Oracle Grid Naming Service (GNS) 是Oracle Grid Infrastructure的一个重要组件&#xff0c;它提供了一种集中式的命名服务&…

[机缘参悟-191] - 《道家-水木然人间清醒1》读书笔记 -14- 关系界限 - 经济和人格上的独立,走向成熟的必经之路,才能更好的谈其他情感(IT)

目录 前言&#xff1a; 1、“友善的孤独者” 2、“外向的孤独者” 3、道不同不相为谋 4、警惕依赖 5、完整独立的个体 6、不必纠正他人的错误&#xff0c;除非他影响了你 7、不再期待别人能理解自己&#xff0c;只有高维向下兼容你的人才能理解你 8、只有高维和同频的…

ChatGPT魔法,定制个性化提示词!

扮演Prompt创作者的角色 我想让你成为我的Prompt创作者。你的目标是帮助我创建最佳的Prompt&#xff0c;这个Prompt将由 你ChatGPT使用。 你将遵循以下过程&#xff1a; 1.首先&#xff0c;你会问我Prompt是关于什么的。我会告诉你&#xff0c;但我们需要通过不断的重复来改进…

jQuery下载教程

官网&#xff1a;https://jquery.com/ ** ** 点击为压缩版本 将网站打开 界面上邮件保存为js文件即可 在html文件中引入即可 <html> <head></head> <body><script src"./js/jquery-3.6.3.js"> </script> </body> <…

使用Arrow管理数据

在之前的数据挖掘&#xff1a;是时候更新一下TCGA的数据了推文中&#xff0c;保存TCGA的数据就是使用Arrow格式&#xff0c;因为占空间小&#xff0c;读写速度快&#xff0c;多语言支持&#xff08;我主要使用的3种语言都支持&#xff09; Format https://arrow.apache.org Ap…

JDK9-21新特性概览(持续更新)

JDK9-21新特性概览 一、JDK9新特性1.1 JEP 102: Process API Updates简介案例风险 1.2 JEP 193: Variable Handles简介案例风险 1.3 JEP 200: The Modular JDK简介案例风险 1.4 JEP 213: Milling Project Coin简介案例1.1 try-with-resources增强1.2 接口中私有方法 1.5 JEP 22…

SpringBoot实现接口防抖的几种方案,杜绝重复提交

插&#xff1a; AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家(前言 – 人工智能教程 ) 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

一个与 WSL2 建立远程的简单方法

前言 众所周知&#xff0c;windows 会通过虚拟交换机给本机和 wsl2&#xff08;Linux 子系统&#xff09;分别分配 ip。于是本机重启或重启 wsl 服务的时候会重新分配 ip。之前所作的端口转发&#xff0c;监听之类的都会失效。而如果你搜索 “如何固定 wsl 的 ip”&#xff0c;…