大模型中常用的注意力机制GQA详解以及Pytorch代码实现


组查询注意力(grouped query attention)是大型语言模型中的一种多查询注意力力方法,它的目标是在保持 mqa 速度的同时实现 mha 的质量。grouped query attention 将查询分组,每个组内的查询共享相同的注意力权重,这有助于降低计算复杂度和提高推理速度。

这篇文章中,我们将解释GQA的思想以及如何将其转化为代码。

GQA是在论文 GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints paper.中提出,这是一个相当简单和干净的想法,并且建立在多头注意力之上。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

大模型中常用的注意力机制GQA详解以及Pytorch代码实现

GQA

标准多头注意层(MHA)由H个查询头、键头和值头组成。每个头都有D个维度。Pytorch的代码如下:

from torch.nn.functional import scaled_dot_product_attention  # shapes: (batch_size, seq_len, num_heads, head_dim) query = torch.randn(1, 256, 8, 64) key = torch.randn(1, 256, 8, 64) value = torch.randn(1, 256, 8, 64)  output = scaled_dot_product_attention(query, key, value) print(output.shape) # torch.Size([1, 256, 8, 64])

对于每个查询头,都有一个对应的键。这个过程如下图所示:

大模型中常用的注意力机制GQA详解以及Pytorch代码实现

而GQA将查询头分成G组,每组共享一个键和值。可以表示为:

大模型中常用的注意力机制GQA详解以及Pytorch代码实现

使用可视化的表达就能非常清楚地了解GQA的工作原理,就像我们上面说的那样。GQA是一个相当简单和干净的想法。

Pytorch代码实现

让我们编写代码将这种将查询头划分为G组,每个组共享一个键和值。我们可以使用einops库有效地执行对张量的复杂操作。

首先,定义查询、键和值。然后设置注意力头的数量,数量是随意的,但是要保证num_heads_for_query % num_heads_for_key = 0,也就是说要能够整除。我们的定义如下:

import torch  # shapes: (batch_size, seq_len, num_heads, head_dim) query = torch.randn(1, 256, 8, 64) key = torch.randn(1, 256, 2, 64) value = torch.randn(1, 256, 2, 64)  num_head_groups = query.shape[2] // key.shape[2] print(num_head_groups) # each group is of size 4 since there are 2 kv_heads

为了提高效率,交换seq_len和num_heads维度,einops可以像下面这样简单地完成:

from einops import rearrange  query = rearrange(query, "b n h d -> b h n d") key = rearrange(key, "b s h d -> b h s d") value = rearrange(value, "b s h d -> b h s d")

然后就是需要在查询矩阵中引入”分组“的概念。

from einops import rearrange query = rearrange(query, "b (h g) n d -> b g h n d", g=num_head_groups) print(query.shape) # torch.Size([1, 4, 2, 256, 64])

上面的代码我们将二维重塑为二维:对于我们定义的张量,原始维度8(查询的头数)现在被分成两组(以匹配键和值中的头数),每组大小为4。

最后最难的部分是计算注意力的分数。但其实它可以在一行中通过insum操作完成的

from einops import einsum, rearrange # g stands for the number of groups # h stands for the hidden dim # n and s are equal and stands for sequence length scores = einsum(query, key, "b g h n d, b h s d -> b h n s") print(scores.shape) # torch.Size([1, 2, 256, 256])

scores张量和上面的value张量的形状是一样的。我们看看到底是怎么操作的

einsum帮我们做了两件事:

Machine Translation Machine Translation

聚合多个来源的AI翻译

Machine Translation 49 查看详情 Machine Translation

1、一个查询和键的矩阵乘法。在我们的例子中,这些张量的形状是(1,4,2,256,64)和(1,2,256,64),所以沿着最后两个维度的矩阵乘法得到(1,4,2,256,256)。

2、对第二个维度(维度g)上的元素求和——如果在指定的输出形状中省略了维度,einsum将自动完成这项工作,这样的求和是用来匹配键和值中的头的数量。

最后是注意分数与值的标准乘法:

import torch.nn.functional as F  scale = query.size(-1) ** 0.5 attention = F.softmax(similarity / scale, dim=-1)  # here we do just a standard matrix multiplication out = einsum(attention, value, "b h n s, b h s d -> b h n d")  # finally, just reshape back to the (batch_size, seq_len, num_kv_heads, hidden_dim) out = rearrange(out, "b h n d -> b n h d") print(out.shape) # torch.Size([1, 256, 2, 64])

这样最简单的GQA实现就完成了,只需要不到16行python代码:

大模型中常用的注意力机制GQA详解以及Pytorch代码实现

最后再简单提一句MQA:多查询注意(MQA)是另一种简化MHA的流行方法。所有查询将共享相同的键和值。原理图如下:

大模型中常用的注意力机制GQA详解以及Pytorch代码实现

可以看到,MQA和MHA都可以从GQA推导出来。具有单个键和值的GQA相当于MQA,而具有与头数量相等的组的GQA相当于MHA。

GQA的好处是什么?

GQA是最佳性能(MQA)和最佳模型质量(MHA)之间的一个很好的权衡。

下图显示,使用GQA,可以获得与MHA几乎相同的模型质量,同时将处理时间提高3倍,达到MQA的性能。这对于高负载系统来说可能是必不可少的。

大模型中常用的注意力机制GQA详解以及Pytorch代码实现

在pytorch中没有GQA的官方实现。所以我找到了一个比较好的非官方实现,有兴趣的可以试试:

https://www.php.cn/link/5b52e27a9d5bf294f5b593c4c071500e

GQA论文:

https://www.php.cn/link/e4ba31fba036a999321d5460f7f2d1d1

以上就是大模型中常用的注意力机制GQA详解以及Pytorch代码实现的详细内容,更多请关注其它相关文章!


# 大型语言模型  # gqa  # python  # pytorch  # seo真实生活  # 珠海网站建设 骏域网站  # 去哪找学校网站建设  # 传统网站如何建设  # 珠宝网站怎样推广好卖点  # 枣庄seo抖音系统  # 网站推广公司有用吗  # 潮州市网站推广  # 南阳全网推广网站有哪些  # 精选网站建立推广优化策略  # 就像  # 很好  # 如何下载  # 是一个  # 每组  # 开源  # 核心技术  # 如何使用  # 都有  # 是在  # follow 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 上海发布大模型政策 打造AI“模”都  严打“黑飞”,无人机检测反制设备护航大运会净空安全  智能技术提高现代商业运营的7七种方式  重塑未来生活的五项技术趋势  国家发改委组织工业机器人产业高质量发展现场会  人工智能颠覆软件测试四大方式  世界人工智能大会(WAIC 2025)点燃魔都,博尔捷数字科技携前沿技术产品亮相  尼康尼克尔 Z 180-600mm f/5.6-6.3 VR 镜头发布,12499 元  亚马逊确认今年不会举办 re:MARS 机器人和人工智能大会  IBM 与 NASA 携手开源地理空间 AI 模型,促进气候科学研究进步  参考封面|人工智能“淘金热”  马斯克讽刺人工智能炒作:什么“机器学习”,其实就是统计  AI遇上大运丨热身拉伸、娱乐K歌……AI智能健身镜将亮相成都大运会  到中国科技馆体验“一滴油的奇妙旅行”,线上元宇宙展厅同步开启  马斯克回应人工智能拯救世界:人类已处于“半机器人”状态  AI工具助力公司实施每周4.5天工作制,带来巨大效益  Xreal AR 眼镜用投屏盒子 Beam 发布:分体式设计,到手 699 元  2025WRC世界机器人大赛锦标赛(烟台)收官!斯坦星球勇夺VEX赛项冠亚军!  靠游戏更靠AI 英伟达成唯一首季度两位数增长的公司  零数科技CTO兰春嘉:区块链与人工智能的结合点在数据  SnapFusion技术大幅提升AI图像生成速度  视觉中国推出付费AI绘图功能:无版权可用  AMD在AI方面奋起直追,与英伟达的差距缩小了吗?  马斯克称人类是半机器人,记忆外包给了电脑  静安大宁功能区企业云天励飞亮相2025世界人工智能大会,秀出AI硬实力!  日新月异,脑机接口技术都有哪些新应用?  【机智云物联网低功耗转接板】远程环境数据采集探索  世界人工智能大会中西部县域数字就业中心组团亮相  “一般智力”与工艺学批判是认识AI的重要入口 | 社会科学报  揭晓2025年玻尔兹曼奖:Hopfield网络创始人荣获奖项  梦想实现!硬核科幻大片VR智能头盔即将问世  田渊栋新作:打开1层Transformer黑盒,注意力机制没那么神秘  Meta发布音频AI模型,仅需2秒片段模拟真人语音  Meta开源文本生成音乐大模型,我们用《七里香》歌词试了下  百度创始人、董事长兼首席执行官李彦宏:AI原生应用比大模型数量更重要  人工智能在商业中的风险和局限性  OpenAI CEO 阿尔特曼到访日本,对全球 AI 协调合作表示乐观  Valve Index VR 头显销量下滑,上市四年的长青树渐失光彩  报道称亚马逊正在测试AI生成产品评价摘要  小米9号员工李明宣布创业:打造首款安卓桌面机器人  DeepMind用AI重写排序算法;将33B大模型塞进单个消费级GPU  人形机器人概念大热!这些产业链标的或受提振  OpenAI首席执行官引用《道德经》 呼吁就AI安全问题合作  配 3D 机器人头像,谷歌展示全新安卓 LOGO  联想首发AI PC于今年秋季,英特尔CEO确认AI PC时代来临  兆讯传媒率先全面拥抱AI 数智广告内容焕发新生机  7大探索区域打造沉浸式玩乐“元宇宙” 昆明京东MALL未来科技探索官全城招募中  人工智能领域,突破难题:国产大模型“无源之水”问题得到解决。  RoboNeo什么时候上线  机构:边缘AI或是当前预期差最大的AI方向 

 2024-04-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.