一杯咖啡的时间学习大模型(LLM):LLaMA解读之分组查询注意力(Grouped Query Attention)

Grouped Query Attention论文阅读 Google在2023年发表的一篇关于Transformer Attention的论文,整体论文写的清晰易读,思想简单但很好用。论文名字简写是GQA 阅读详情

一、LLaMA的核心改进全景

Meta开源的LLaMA模型凭借其卓越的性能表现成为大模型发展的重要里程碑。相较于标准Transformer架构,LLaMA主要在以下几个方面进行了关键改进:

  1. 位置编码升级:采用旋转位置编码(Rotary Position Embedding, RoPE)
  2. 归一化革新:对每个 Transformer 子层的输入进行归一化(Pre-normalization),并使用RMS-Norm替代传统LayerNorm。
  3. 激活函数优化:引入 SwiGLU 激活函数取代 ReLU 非线性函数。
  4. 注意力优化(LLaMA 2):引入分组查询注意力(Grouped Query Attention, GQA)

这些改进显著提升了模型的计算效率和长文本处理能力,今天我们来学习分组查询注意力(Grouped Query Attention, GQA)。

其余部件的学习链接持续更新中,欢迎关注:

  1. 一杯咖啡的时间学习大模型(LLM):LLaMA解读之旋转编码RoPE(含代码实现)
  2. 一杯咖啡的时间学习大模型(LLM):LLaMA解读之均方根误差标准化RMSNorm(含代码实现)
  3. 一杯咖啡的时间学习大模型(LLM):LLaMA解读之SwiGLU激活函数(含代码实现)
  4. 一杯咖啡的时间学习大模型(LLM):LLaMA解读之分组查询注意力(Grouped Query Attention)(含代码实现)

二、分组查询注意力(Grouped Query Attention)

2.1 改进动机

传统Transformer使用多头注意力(Multi-Head Attention, MHA),每个头独立生成查询(Query)、键(Key)和值(Value)。虽然MHA能捕捉丰富的上下文信息,但存在以下问题:

  • 计算冗余:每个头独立计算Q/K/V,参数量和内存占用高。
  • 推理延迟:生成任务中逐token解码时,KV缓存占用内存过大。

**多查询注意力(Multi-Query Attention, MQA)**通过共享所有头的K和V矩阵降低计算量,但牺牲了模型表达能力。
GQA在MHA和MQA之间找到了平衡:将查询头分组,组内共享键和值,既减少计算开销,又保留多粒度语义捕捉能力。

分组查询方法概述。

示意图解析:

  1. Multi-Head Attention(左):每个头独立生成Q/K/V,参数量最大。
  2. Grouped Query Attention(中):将查询头分为若干组,组内共享K和V,参数量显著降低。
  3. Multi-Query Attention(右):所有查询头共享同一组K和V,参数量最小但表达能力受限。

2.2 数学原理

给定输入序列 X ∈ R n × d X \in \mathbb{R}^{n \times d} X∈Rn×d,GQA的计算步骤如下:

  1. 分组查询投影:将 h h h 个查询头分为 g g g 组,每组包含 h / g h/g h/g 个头:
    Q i = X W i Q , K j = X W j K , V j = X W j V ( i = 1 , … , h ;   j = 1 , … , g ) Q_i = X W_i^Q, \quad K_j = X W_j^K, \quad V_j = X W_j^V \quad (i=1,\dots,h; \ j=1,\dots,g) Qi​=XWiQ​,Kj​=XWjK​,Vj​=XWjV​(i=1,…,h; j=1,…,g)
  2. 注意力计算:每组查询与对应的共享键值交互:
    Attention ( Q i , K j , V j ) = softmax ( Q i K j T d k ) V j \text{Attention}(Q_i, K_j, V_j) = \text{softmax}\left(\frac{Q_i K_j^T}{\sqrt{d_k}}\right) V_j Attention(Qi​,Kj​,Vj​)=softmax(dk​ ​Qi​KjT​​)Vj​
  3. 输出拼接:将各组输出拼接后线性变换:
    GQA ( X ) = Concat ( head 1 , … , head h ) W O \text{GQA}(X) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O GQA(X)=Concat(head1​,…,headh​)WO

其中, d k d_k dk​ 为键的维度, W O W^O WO 为输出投影矩阵。


2.3 源码实现

import torch
import torch.nn as nn

class GroupedQueryAttention(nn.Module):
    def __init__(self, hidden_dim=768, head_num=4, group_num=2, dropout=0.1):
        super().__init__()
        assert hidden_dim % head_num == 0
        assert head_num % group_num == 0

        self.hidden_dim = hidden_dim
        self.head_num = head_num
        self.group_num = group_num
        self.head_dim = hidden_dim // head_num
        self.group_head_num = head_num // group_num

        self.query = nn.Linear(hidden_dim, hidden_dim)
        self.key = nn.Linear(hidden_dim, group_num * self.head_dim)
        self.value = nn.Linear(hidden_dim, group_num * self.head_dim)
        self.output_proj = nn.Linear(hidden_dim, hidden_dim)

        self.attention_dropout = nn.Dropout(dropout)
        self.softmax = nn.Softmax(dim=-1)

    def forward(self, x, attention_mask=None):
        # x: [batch_size,seq_len,hidden_dim]
        B, S, H = x.shape

        q = self.query(x)
        k = self.key(x)
        v = self.value(x)

        q = q.view(B, S, self.head_num, self.head_dim).transpose(1, 2)
        k = k.view(B, S, self.group_num, self.head_dim).transpose(1, 2)  # k: [batch_size,group_num,seq_len,seq_len]
        v = v.view(B, S, self.group_num, self.head_dim).transpose(1, 2)

        k = k.repeat(1, self.group_head_num, 1, 1)  # k: [batch_size,head_num,seq_len,seq_len]
        v = v.repeat(1, self.group_head_num, 1, 1)
        attention_score = q @ k.transpose(-1, -2) / H ** 0.5  # attention_score: [batch_size,head_num,seq_len,seq_len]
        if attention_mask is not None:
            # attention_mask: [batch_size,seq_len,seq_len] -> [batch_size,head_num,seq_len,seq_len]
            attention_mask = attention_mask.unsqueeze(1).repeat(1, self.head_num, 1, 1)
            attention_score = attention_score.masked_fill(attention_mask == 0, float('-inf'))
        attention_score = self.softmax(attention_score)
        attention_score = self.attention_dropout(attention_score)

        out = attention_score @ v  # out: [batch_size,head_num,seq_len,head_dim]
        out = out.transpose(1, 2).contiguous().view(B, S, H)
        out = self.output_proj(out)
        return out, attention_score


if __name__ == "__main__":
    hidden_dim = 8
    batch_size = 2
    seq_len = 3
    print_result = True
    is_mask = True

    # 初始化模型实例
    model = GroupedQueryAttention(hidden_dim=hidden_dim)

    # 生成随机输入
    x = torch.randn(batch_size, seq_len, hidden_dim)
    print(f"x的形状: {x.shape}")

    # 前向传播
    if is_mask:
        mask = torch.tril(torch.ones(seq_len, seq_len))
        mask = mask.unsqueeze(0).expand(batch_size, -1, -1)
        print(f"mask的形状: {mask.shape}")
        print(f"mask: {mask}")
        out, attention_score = model(x, mask)
    else:
        mask = None
        out, attention_score = model(x)

    # 检查输出形状
    assert out.shape == (batch_size, seq_len, hidden_dim), f"输出形状错误,期望 {batch_size, seq_len, hidden_dim},得到 {out.shape}"
    assert attention_score.shape == (batch_size, model.head_num, seq_len, seq_len), f"注意力分数形状错误,期望 {batch_size, model.head_num, seq_len, seq_len},得到 {attention_score.shape}"

    print(f"{GroupedQueryAttention.__name__} 测试通过!")
    print(f"输出形状: {out.shape}")
    print(f"注意力分数形状: {attention_score.shape}")

    if print_result:
        print("输出:")
        print(out)
        print("注意力分数:")
        print(attention_score)
LLM推理机制解密:从注意力热力图到logit轨迹的工程化分析 大语言模型的‘推理’并非逻辑推演,而是基于统计规律的条件概率建模。其核心原理在于Transformer架构中注意力机制对关键证据的动态绑定、残差流中logit值的阶段性跃迁,以及位置编码对长程依赖的建模能力。这种机制赋予模型在数学计算、法律适用、多跳问答等任务中复现类人输出的技术价值,但真实推理能力高度依赖输入结构、提示设计与底层架构。工程师需跳出‘是否思考’的哲学陷阱,转而通过attention可视化、logit lens分析和activation patching等可测量手段,定位推理焦点、捕捉决策临界 阅读详情

相关推荐

上下文窗口不是越大越好:LLM部署中的工程变量建模

上下文窗口是大语言模型(LLM)推理能力的关键载体,但其本质并非静态参数,而是受RoPE位置编码、GQA分组注意力、词表规模等底层架构约束的动态工程变量。理解其n²计算复杂度、注意力衰减机制与收益递减规律,是实现高质量RAG系统的基础。技术价值体现在平衡事实性(Factuality)与推理成本,避免‘丢失在中间’和恶意指令注入等长上下文特有风险。典型应用场景包括技术文档问答、法律合同审查与多跳知识推理,而本文聚焦decoder-only架构下可复现、可量化的context优化方法论。

weixin_34115824的博客 433

一文通透各种注意力:从多头注意力MHA到分组查询注意力GQA、多查询注意力MQA

因此,可以确认:在 MQA 中,除了 query 向量还保存着 8 个头,key 和 value 向量都只剩 1 个「公共头」了,这也正好印证了论文中所说的「所有 head 之间共享一份 key 和 value 的参数」然而,随着上下文窗口或批量大小的增加,多头注意力 (MHA)模型中与 KV 缓存大小相关的内存成本显着增长。对于较大的模型,KV 缓存大小成为瓶颈,键和值投影可以在多个头之间共享,而不会大幅降低性能,可以使用。),其能够在保证模型效果的同时加快 decoder 生成 token 的速度。

结构之法 算法之道 1万+

Gemma 4B本地部署实战:普通人用RTX 3060跑通大模型的完整指南

大语言模型(LLM)本地部署正从技术极客专属走向大众实践,其核心在于平衡模型能力、硬件限制与使用体验。Gemma系列作为Google推出的轻量级开源模型,凭借分组查询注意力(GQA)和Flash Attention v2等优化设计,在消费级GPU上实现低延迟、低显存推理;而社区微调的Gemma 4B版本,以约41亿参数、Q4_K_M量化格式,成为兼顾4K上下文支持与RTX 3060/MBP M1等主流设备兼容性的‘黄金分割点’。它无需云端依赖,满足隐私敏感、离线可用、定制化强等真实需求,广泛应用于教育错题分

a4512138的专栏 490

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(四)分组多查询注意力

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(四)分组多查询注意力。

大模型与Agent智能体 1502

大模型推理成本拐点与端侧AI稳跑实践指南

大模型推理正从理论优化迈入产线实测阶段,128~512 token区间成为成本下降的关键临界点;端侧AI部署范式也加速从‘能跑’转向‘稳跑’,强调物理世界鲁棒性与每瓦特算力效率。这一转变背后是INT4量化、Flash Attention优化、KV cache压缩等底层技术的成熟落地,显著降低GPU采购成本与边缘设备功耗。在真实业务场景中,如客服对话、代码补全、车载语音、工业预测性维护等,这些技术已支撑起高QPS、低延迟、可温控的稳定服务。本文基于4月27日–30日一线工程验证数据,聚焦大模型推理成本拐点和端

weixin_30642869的博客 519

M1 MacBook Air本地微调3B大模型实战:QLoRA+MPS全栈指南

大语言模型微调不再依赖GPU服务器,QLoRA作为一种高效参数更新技术,通过低秩适配与4-bit量化显著降低显存与计算开销;结合Apple自研MPS(Metal Performance Shaders)后端,可在M1芯片的统一内存架构上实现稳定训练。该方案兼顾数据隐私、部署轻量与工程可行性,适用于指令微调、领域适配与个性化助手构建等典型场景,为无CUDA环境的开发者提供了真正可落地的本地AI训练路径。

alexhill2009的博客 395

上下文窗口悖论:为什么长上下文不等于高性能

上下文窗口是大语言模型处理信息长度的核心能力指标,其本质受Decoder-Only架构、RoPE位置编码、GQA注意力机制及二次方计算复杂度等底层原理制约。盲目扩大窗口不仅无法提升效果,反而引发显存溢出、延迟飙升、事实性下降和‘丢失在中间’等工程问题。技术价值在于实现成本、延迟、准确率与硬件资源的动态平衡;典型应用场景包括法律合同分析、技术文档问答与多源RAG系统。本文聚焦Llama 3.1 8B等主流模型在8192 tokens甜点位的实证规律,揭示上下文窗口作为关键工程决策变量的本质。

weixin_30265103的博客 446

Llama改进之——分组查询注意力

本文介绍了分组查询注意力的实现以及如何应用旋转位置编码到分组查询注意力上。

日积月累,天道酬勤 4947

4GB显存Windows部署Llama3.1:显存压榨实战指南

大模型推理中的显存管理,本质是动态内存调度而非静态容量分配。理解CUDA显存作为计算流水线的特性,结合AWQ量化、PagedAttention、FlashAttention-2和CPU offloading四大技术,可显著降低FP16模型的显存驻留需求与峰值压力。尤其在Llama3.1系列中,GQA架构与RMSNorm等设计天然适配压缩,使4GB消费级显卡在Windows 11环境下稳定运行8B模型成为现实。本文聚焦开源大模型在低资源终端的工程落地,覆盖量化选型、vLLM/llama.cpp参数调优、hy-

chunchan1381的博客 519

【NLP】理解 Llama2:KV 缓存、分组查询注意力、旋转嵌入等

是 Meta AI 的开创性作品,作为首批高性能开源预训练语言模型之一闯入了 AI 场景。值得注意的是,,尽管其尺寸只是其一小部分。您无疑听说过 LLaMA 令人印象深刻的性能,但您是否想知道是什么让它如此强大?图 1:原始 Transformer 和 LLama 之间的架构差异检查图 1 揭示了从原始 Transformer 到突破性的 LLaMA 架构的深刻转变。LLaMA 2.0 牢固地植根于 Transformer 框架的基础,但它引入了独特的创新——SwiGLU和。

sikh_0529的博客 5162

NLP核心概念全解析|从词向量到Transformer到大模型|AI训练师必学

自然语言处理(Natural Language Processing,NLP)是让计算机理解、生成和处理人类语言的技术。作为人工智能训练师,你日常做的文本标注、数据清洗、模型评测,绝大多数都围绕 NLP 展开。无论是训练智能客服、构建知识问答,还是优化大模型输出,NLP 都是最核心的知识底盘。这篇文章从最基础的概念讲起,一路讲到 Transformer 和预训练语言模型,帮你把 NLP 的知识体系串起来。

白话机器学习 678

QLoRA微调Llama 2实战:消费级GPU显存优化与参数精调指南

QLoRA(Quantized Low-Rank Adaptation)是一种面向资源受限场景的大语言模型高效微调技术,其核心原理是将4-bit量化与低秩矩阵分解协同设计,在冻结主干网络的前提下仅训练轻量适配器。该技术显著降低显存占用(如Llama 2 7B可压至5.1GB),避免全参数微调的灾难性遗忘,同时保持语义泛化能力。技术价值体现在工程可行性与任务性能的平衡——尤其适配RTX 3060、T4等≤16GB显存的消费级GPU。典型应用场景包括指令微调、领域适配与边缘部署,本文聚焦Llama 2 7B在真

391

Unity UGUI深度优化

Unity UGUI优化相关

不定时分享所学所得,包括游戏开发和其他收获! 2717

LLM训练全栈实操:数据I/O、显存优化与并行策略工程指南

大语言模型(LLM)训练并非调参玄学,而是涵盖数据加载、内存管理、分布式并行与微调策略的系统工程。其核心原理在于平衡计算、通信与存储资源,技术价值体现在降低训练成本、提升GPU利用率、保障知识保真与推理鲁棒性。典型应用场景包括金融风控、医疗问答、代码生成等需高精度与低幻觉的生产环境。本文聚焦工程师视角,深入解析数据管道瓶颈、ZeRO分级选型、GQA硬件适配、LoRA rank探针等真实落地细节,覆盖从IO吞吐到量化部署的完整链路,尤其强调Towards AI - Medium所倡导的工程可复现性与LLM训练

weixin_30598225的博客 405

Unity物理引擎实战:从刚体重心到碰撞体,打造真实不倒翁交互

刚体(Rigidbody)是Unity物理系统的核心组件,它定义了游戏对象的物理属性,如质量、阻力和碰撞响应。其原理基于牛顿力学,通过物理引擎(如PhysX)实时计算物体的运动状态。在游戏开发中,刚体的价值在于能够模拟真实世界的物理行为,为玩家提供沉浸式的交互体验。碰撞体(Collider)则定义了物体的形状边界,用于检测与其他物体的接触。通过精细调整刚体的重心(Center of Mass)和碰撞体形状,开发者可以模拟出各种有趣的物理现象,例如低重心物体的动态平衡。这在休闲游戏、物理玩具模拟等场景中尤为实

weixin_33976326的博客 355

解决Unity与3DMax模型单位与中心点偏差的完整指南

本文详细解析了Unity与3DMax模型导入时常见的单位与中心点偏差问题,提供了从3DMax单位设置、FBX导出到Unity接收调整的完整解决方案。通过实战案例和高效工作流建议,帮助开发者实现unity与3dmax的单位统一,避免尺寸错误和轴心偏移,提升3D资源导入效率。

weixin_29015899的博客 286

大模型长上下文能力为何悄然失效?解析DCC压缩层归零现象

长上下文理解是大语言模型在法律、金融、医疗等专业场景落地的核心能力,其本质依赖位置编码(如RoPE)与动态上下文压缩(DCC)等底层机制协同实现。当输入长度增加、信息熵分布不均时,DCC策略会优先牺牲低价值片段的保真度以换取延迟与显存效率,导致关键事实回溯准确率断崖式下降——这并非模型退化,而是工程权衡下的必然收敛。该能力衰减直接影响RAG等主流架构的可靠性,亟需通过语义分块、结构化注入和约束式分层处理(CHP)等工程手段进行系统性补偿。本文聚焦DCC压缩层与RoPE外推机制的隐性博弈,提供可量化的衰减监测

weixin_33861800的博客 329

内网渗透—横向移动&IPC横移&Impacket套件&CS插件

以上便是IPC横移的知识。最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

2301_76227305的博客 1890

DeepSeek崛起之路:从开源起步的AI新势力,一文看懂deepseek崛起之路:成功绝非偶然!

DeepSeek的发展历程是一个从零开始、快速崛起并成为行业重要参与者的典型技术创新故事。这家公司在短短两年多时间里,通过持续的技术创新和开源战略,在全球人工智能领域建立了显著影响力。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 525

Ansys Lumerical 2023 R1.2新功能实战:薄膜铌酸锂调制器仿真全流程解析

本文详细解析了Ansys Lumerical 2023 R1.2在薄膜铌酸锂电光相位调制器仿真中的最新功能与应用。通过实战演示,展示了从电极配置、电场计算到模式分析的全流程,重点介绍了各向异性介电常数支持和多物理场耦合优化等关键技术,助力开发者高效设计高性能光通信器件。

weixin_28454475的博客 1211

ESP32-IDF开发之旅 网络篇⑩ Web配网

本文介绍了基于ESP32S3的Web配网实现方案。作者通过移植开源项目,在ESP32S3上实现了WiFi配置功能,包括AP模式创建、HTTP服务器搭建、NVS存储读写等核心功能。文章详细解析了代码结构,包含WiFi初始化、事件处理、NVS存储管理和HTML页面服务等关键模块。实现方案采用AP+STA双模式,支持通过网页扫描WiFi并保存配置信息,适用于物联网设备的网络配置场景。代码中使用了FreeRTOS任务、ESP-IDF事件组等技术,并提供了完整的错误处理和日志记录功能。

单片机菜鸟哥的博客 350

Mixtral 8x7B稀疏专家混合架构深度解析与实战部署

稀疏专家混合(MoE)是大语言模型突破显存与算力瓶颈的关键范式,其核心原理在于通过门控网络动态路由token至少量高专业化子网络,实现参数规模与激活计算的解耦。相比传统稠密模型,MoE在保持知识容量的同时显著提升GPU计算密度与显存利用率,技术价值体现在低延迟推理、长上下文支持及低成本商用落地能力。典型应用场景包括法律合同审查、医疗问答系统、代码生成等对可控性、数据隐私和领域适配要求严苛的垂直领域。Mixtral 8x7B作为开源MoE标杆,以2-out-of-8稀疏激活与32K上下文优化,为工程师提供了兼

weixin_30316097的博客 424

高斯过程的数学理解

G澳大利亚的过程是有益的,特别是当我们有少量数据时。当我在制造业担任数据科学家时,我们的团队使用这种算法来揭示我们接下来应该进行哪些实验条件。但是,此算法不如其他算法流行。在这篇博客中,我将通过可视化和 Python 实现来解释高斯过程 [1] 的数学背景。

gongdiwudu的专栏 3610

DBRX MoE架构实战:36B活跃参数的高效推理与QLoRA微调

混合专家(MoE)模型是解决大语言模型‘规模-效率悖论’的核心范式,其通过动态路由机制实现稀疏激活,在保障能力的同时显著降低显存占用与推理延迟。DBRX作为典型MoE架构代表,以16专家4路路由、36B活跃参数和NTK-aware RoPE等关键技术,实现了32K上下文下的高吞吐低延迟推理。相比稠密模型,它在A100上显存减少67%、首token延迟下降52%,并支持GPTQ量化与QLoRA轻量微调,使开源模型真正具备生产级落地能力。本文聚焦本地集群环境下的DBRX部署、优化与定制化实践。

weixin_33726313的博客 343

MDF和DHF、DMR、DHR三者差异?注册与备案文件?医疗器械产品技术要求编写指导原则

定义:设计历史文档(DHF ) 指的是描述某医疗器械成品设计过程的有关记录。内容:DHF包括设计开发活动的所有记录。从最初的策划、客户需求、设计输入,设计输出、设计验证、设计确认、所有的设计评审,设计转换,以及设计变更相关的所有记录。均属于DHF的一部分。要求:各制造商应为每个类型的器械建立并保持设计历史文件。设计历史文件应包含或引用必要的记录,以证实设计符合经批准的设计计划和法规的要求。

学海无涯的专栏 9110

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 一杯咖啡的时间学习大模型(LLM):LLaMA解读之SwiGLU激活函数
下一篇: LLaMA论文+源码分享
ACEEE-1222
博客等级 码龄4年 432粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值