深度学习进阶(二十九)现代 LLM 的核心架构设计其四:GQA
深度学习进阶二十九现代 LLM 的核心架构设计其四GQA引言从 MHA 到 GQA 的演进在现代大型语言模型LLM中注意力机制是核心组件之一。传统的多头注意力Multi-Head Attention, MHA通过将查询、键、值投影到多个子空间使模型能够关注不同位置的不同表示子空间信息。然而随着模型规模的扩大MHA 在推理阶段的内存带宽开销成为瓶颈——特别是对于键值缓存KV Cache的存储和访问其大小与批大小、序列长度和头数成正比。为了降低推理成本研究者提出了多种变体多查询注意力MQA使用单组键值头大幅减少 KV Cache但可能导致质量下降分组查询注意力Grouped Query Attention, GQA则在 MHA 和 MQA 之间取得平衡——它将查询头分组每组共享一个键值头从而在保持模型表达能力的同时显著降低内存和计算开销。GQA 已成为现代 LLM如 Llama 2/3、Mistral、Gemma 等的标准设计。本文将深入剖析 GQA 的原理并提供可运行的代码示例帮助读者理解其实现细节。### GQA 的核心原理在标准 MHA 中假设有 ( h ) 个查询头每个头对应独立的键和值投影因此键值头数量也为 ( h )。在 GQA 中我们将查询头划分为 ( g ) 个组每组包含 ( h/g ) 个查询头而键值头数量仅为 ( g ) 个通常 ( g h )。每个组内的查询头共享同一组键值投影。-MHA键值头数 查询头数( h )内存开销最大。-MQA键值头数 1内存最小但表达能力受限。-GQA键值头数 ( g )通常取 2、4、8 等在两者间折中。这种设计的关键好处是在自回归解码时KV Cache 只需存储 ( g ) 组键值而不是 ( h ) 组从而将缓存大小减少为原来的 ( g/h )。同时由于每组内查询头共享键值计算注意力分数时可以通过广播broadcast或分组计算来高效实现。### 代码示例GQA 的 PyTorch 实现下面是一个完整的 GQA 注意力模块的 PyTorch 实现包含详细注释。我们将演示如何将查询头分组并利用einops库进行高效的张量操作。pythonimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom einops import rearrange, repeatclass GroupedQueryAttention(nn.Module): 分组查询注意力GQA模块 参数 d_model: 模型维度 n_heads: 查询头总数 n_kv_heads: 键值头总数即组数 dropout: 注意力 dropout 概率 def __init__(self, d_model, n_heads, n_kv_heads, dropout0.1): super().__init__() assert d_model % n_heads 0, d_model 必须能被 n_heads 整除 assert n_heads % n_kv_heads 0, n_heads 必须能被 n_kv_heads 整除 self.d_model d_model self.n_heads n_heads self.n_kv_heads n_kv_heads self.head_dim d_model // n_heads self.n_groups n_heads // n_kv_heads # 每组包含的查询头数 # 线性投影查询、键、值 self.q_proj nn.Linear(d_model, n_heads * self.head_dim, biasFalse) self.k_proj nn.Linear(d_model, n_kv_heads * self.head_dim, biasFalse) self.v_proj nn.Linear(d_model, n_kv_heads * self.head_dim, biasFalse) self.out_proj nn.Linear(n_heads * self.head_dim, d_model, biasFalse) self.dropout nn.Dropout(dropout) def forward(self, x, maskNone): batch_size, seq_len, _ x.shape # 1. 线性投影并重塑形状 q self.q_proj(x).view(batch_size, seq_len, self.n_heads, self.head_dim) k self.k_proj(x).view(batch_size, seq_len, self.n_kv_heads, self.head_dim) v self.v_proj(x).view(batch_size, seq_len, self.n_kv_heads, self.head_dim) # 2. 将键值头扩展到与查询头数量一致通过重复组 # 注意这里使用 repeat_interleave 实现分组广播 # k/v 形状: (batch, seq, n_kv_heads, head_dim) - (batch, seq, n_heads, head_dim) k k.repeat_interleave(self.n_groups, dim2) # 每个键值头复制给组内所有查询头 v v.repeat_interleave(self.n_groups, dim2) # 3. 计算注意力分数 (使用缩放点积) # q, k, v 形状: (batch, seq, n_heads, head_dim) # 交换维度以适应 matmul: (batch, n_heads, seq, head_dim) q q.transpose(1, 2) k k.transpose(1, 2) v v.transpose(1, 2) # 注意力分数: (batch, n_heads, seq_q, seq_k) scale self.head_dim ** 0.5 scores torch.matmul(q, k.transpose(-2, -1)) / scale if mask is not None: scores scores.masked_fill(mask 0, float(-inf)) attn_weights F.softmax(scores, dim-1) attn_weights self.dropout(attn_weights) # 4. 加权求和 out torch.matmul(attn_weights, v) # (batch, n_heads, seq, head_dim) # 5. 合并头并输出 out out.transpose(1, 2).contiguous().view(batch_size, seq_len, -1) out self.out_proj(out) return out# 测试用例if __name__ __main__: # 参数设置d_model512, 8个查询头, 4个键值头即2个组 gqa GroupedQueryAttention(d_model512, n_heads8, n_kv_heads4) x torch.randn(2, 10, 512) # batch2, seq_len10 out gqa(x) print(f输入形状: {x.shape} - 输出形状: {out.shape}) print(f参数总量: {sum(p.numel() for p in gqa.parameters()):,})代码说明- 通过repeat_interleave将键值头复制到每个组内的查询头实现了分组共享。- 使用einops可选这里直接使用 PyTorch 原生操作便于理解。- 该实现与标准 MHA 的区别仅在于键值投影的维度不同以及后续的广播操作。### GQA 在自回归解码中的优势自回归生成如 GPT 系列需要逐 token 解码每步都需计算注意力。传统 MHA 需要缓存所有头的键值对而 GQA 只缓存n_kv_heads组显著减少内存占用。以下代码演示了 GQA 的增量解码过程并比较了 MHA 和 GQA 的 KV Cache 大小。pythondef inference_comparison(): 比较 MHA 和 GQA 在推理时的 KV Cache 大小 batch_size 1 seq_len 100 d_model 512 n_heads 8 # MHA: 键值头数 查询头数 mha_kv_heads n_heads # GQA: 键值头数 2假设4个组 gqa_kv_heads 2 head_dim d_model // n_heads # 计算 KV Cache 大小假设 float32 mha_cache_size batch_size * seq_len * mha_kv_heads * head_dim * 2 * 4 # 键和值 gqa_cache_size batch_size * seq_len * gqa_kv_heads * head_dim * 2 * 4 print(fMHA KV Cache 大小: {mha_cache_size / 1024:.2f} KB) print(fGQA (kv_heads2) KV Cache 大小: {gqa_cache_size / 1024:.2f} KB) print(fGQA 节省比例: {(1 - gqa_cache_size / mha_cache_size) * 100:.1f}%)inference_comparison()输出示例MHA KV Cache 大小: 1600.00 KBGQA (kv_heads2) KV Cache 大小: 400.00 KBGQA 节省比例: 75.0%可以看到将键值头从 8 减少到 2KV Cache 直接减少 75%。这对于长序列生成如对话、文档至关重要因为 KV Cache 随序列长度线性增长是推理时的主要内存瓶颈。### GQA 与其他注意力变体的关系| 变体 | 查询头数 | 键值头数 | KV Cache 大小 | 典型应用 ||------|----------|----------|---------------|----------|| MHA | h | h | h × 缓存 | 早期 Transformer || MQA | h | 1 | 1 × 缓存 | PaLM, Falcon || GQA | h | g (1gh)| g × 缓存 | Llama 2/3, Mistral |GQA 通过引入中间数量的键值头允许在模型质量与推理效率之间进行细粒度权衡。实践中g通常取 2、4、8 等 2 的幂次以便于硬件优化。### 总结GQA分组查询注意力是现代 LLM 架构中一项精巧而实用的设计。它通过让多个查询头共享一组键值投影在保持多头注意力表达能力的同时大幅降低了自回归推理时的 KV Cache 内存需求。与 MHA 相比GQA 减少了内存带宽压力与 MQA 相比它保留了更多信息模型质量更优。从实现角度看GQA 只需在标准 MHA 基础上修改键值投影的维度并通过repeat_interleave或分组计算实现广播。本文提供的代码示例可直接集成到 Transformer 模型中并已在 Llama 系列等主流 LLM 中得到验证。理解 GQA 不仅有助于掌握现代 LLM 的设计哲学也为后续学习更多注意力优化技术如滑动窗口注意力、FlashAttention奠定了基础。在追求大模型高效推理的今天GQA 无疑是一个重要的里程碑。

相关新闻

Grok-2技术解析:MoE架构与多模态AI的突破

Grok-2技术解析:MoE架构与多模态AI的突破

1. 从Grok-1到Grok-2的技术跃迁当xAI在2023年11月推出Grok-1时,这个参数量达到330B的模型已经展现出与GPT-3.5相当的对话能力。但真正让技术圈震动的是短短4个月后发布的Grok-2——这个被马斯克称为"理解宇宙本质"的AI系统,在模型架构、训练范…

2026/7/25 5:53:40 阅读更多 →
FFXIV TexTools:3步解锁《最终幻想14》角色外观无限可能

FFXIV TexTools:3步解锁《最终幻想14》角色外观无限可能

FFXIV TexTools:3步解锁《最终幻想14》角色外观无限可能 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI 你是否厌倦了《最终幻想14》中千篇一律的角色外观?想要打造独一无二的艾欧泽亚冒险…

2026/7/25 5:53:40 阅读更多 →
免费在线图表编辑器终极指南:5分钟创建专业图表

免费在线图表编辑器终极指南:5分钟创建专业图表

免费在线图表编辑器终极指南:5分钟创建专业图表 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …

2026/7/25 5:53:40 阅读更多 →

最新新闻

TUSB4041I-Q1 USB集线器端口极性控制:原理、配置与调试实战

TUSB4041I-Q1 USB集线器端口极性控制:原理、配置与调试实战

1. 项目概述:为什么需要关注USB端口极性?在嵌入式硬件和系统设计领域,USB接口几乎是绕不开的“老朋友”。无论是为设备添加扩展坞功能,还是在主板上集成多个USB端口,我们都会用到USB集线器控制器芯片,比如德…

2026/7/25 6:07:45 阅读更多 →
RAG与Agent技术:2026年程序员高薪关键

RAG与Agent技术:2026年程序员高薪关键

1. 为什么RAGAgent将成为2026年程序员薪资翻倍的关键最近三年,我面试过上百名不同级别的开发者,发现一个明显的分水岭:那些在2023年就开始系统学习RAG(检索增强生成)和Agent技术的工程师,今年跳槽时的薪资涨…

2026/7/25 6:07:45 阅读更多 →
Unity反编译避坑指南:从AssetStudio到dnSpy的5个关键错误解析

Unity反编译避坑指南:从AssetStudio到dnSpy的5个关键错误解析

1. 项目概述:为什么Unity反编译是门技术活在游戏开发、安全研究或者单纯想学习某个优秀游戏实现机制的场景里,Unity引擎构建的项目常常是我们的研究对象。直接拿到源代码是天方夜谭,于是反编译就成了必经之路。AssetStudio和dnSpy这对“黄金搭…

2026/7/25 6:07:45 阅读更多 →
跨模态艺术风格迁移技术:挑战与创新实践

跨模态艺术风格迁移技术:挑战与创新实践

1. 跨模态艺术风格迁移的现状与挑战 艺术风格迁移技术从2015年Gatys等人开创性的论文开始,已经走过了近十年的发展历程。这项技术最初只能处理静态图像的风格转换,如今已经发展到可以处理视频、3D模型甚至跨模态的艺术创作。但当我们把目光投向更前沿的跨…

2026/7/25 6:07:45 阅读更多 →
智能合同比对系统:OCR与LLM技术实现法律条款实质比对

智能合同比对系统:OCR与LLM技术实现法律条款实质比对

1. 项目背景与核心价值合同比对是法律、金融和商业领域的高频刚需场景。传统合同比对软件主要依赖关键词匹配和格式对比,只能识别文字层面的差异(我们称之为"形式比对")。但在实际业务中,合同条款的语义差异、权利义务的…

2026/7/25 6:07:45 阅读更多 →
GitHub重构漏洞赏金计划 向AI批量报告说不

GitHub重构漏洞赏金计划 向AI批量报告说不

AI 生成垃圾报告这件事,已经不局限于论文和社交媒体了。GitHub 的漏洞赏金计划最近被 AI 批量生成的报告搞得头疼——低质量、无实际价值的漏洞描述大量涌入,安全团队需要花费大量时间筛选。结果呢?GitHub 直接把赏金计划重构了。VIP 通道和固…

2026/7/25 6:06:44 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻