GQA分组注意力机制

一、目录

  1. 定义
  2. demo

二、实现

  1. 定义
    grouped query attention(GQA)
    1 GQA 原理与优点:将query 进行分组,每组query 参数共享一份key,value, 从而使key, value 矩阵变小。
    2. 优点: 降低内存读取模型权重的时间开销:由于Key矩阵和Value矩阵数量变少了,因此权重参数量也减少了,需要读取到内存的数量量少了,因此减少了读取权重的等待时间。
    3. 效果(并未降低模型性能):GQA通过设置合适的分组大小,可以和MQA的推理性能几乎相等,同时逼近MHA的模型性能。

  2. llama3 分组数为4, chatglm2 分组数为2 .


    参考:https://zhuanlan.zhihu.com/p/693928854
    demo

    import torch
    import torch.nn as nn
    import math

    #GQA
    bs=3
    seq_len =5
    hidden_size= 32
    n_heads=4
    n_kv_heads = 2
    head_dim = hidden_size//n_heads #
    groups = n_heads//n_kv_heads # 4/2
    print("groups=",groups)
    x=torch.randn((bs,seq_len,hidden_size))
    print("x:", x.shape)
    wq = nn.Linear(hidden_size,n_heads*head_dim,bias=False)
    wk = nn.Linear(hidden_size, n_kv_heads * head_dim, bias=False)
    wv = nn.Linear(hidden_size, n_kv_heads * head_dim, bias=False)
    xq,xk,xv=wq(x),wk(x),wv(x)
    xq = xq.view(bs,seq_len, n_heads, head_dim).transpose(1, 2)
    xk = xk.view(bs,seq_len, n_kv_heads, head_dim).transpose(1, 2)
    xv = xv.view(bs,seq_len, n_kv_heads, head_dim).transpose(1, 2)
    print("xq:",xq.shape) #[bs,n_heads,seq_len, head_dim]
    print("xk:", xk.shape)#[bs,n_kv_heads,seq_len, head_dim]
    print("xv:", xv.shape)#[bs,n_kv_heads,seq_len, head_dim]
    def repeat_kv(keys: torch.Tensor, values: torch.Tensor, repeats: int, dim: int):
    keys = torch.repeat_interleave(keys, repeats=repeats, dim=dim)
    values = torch.repeat_interleave(values, repeats=repeats, dim=dim)
    return keys, values
    #复制kv head
    key,val = repeat_kv(xk,xv, groups,dim=1)
    print("key:", key.shape)
    print("val:", val.shape)
    attn_weights = torch.matmul(xq, key.transpose(2, 3)) / math.sqrt(head_dim)
    print("attn_weights:", attn_weights.shape) #[bs,n_heads,seq_len,seq_len]
    attn_output = torch.matmul(attn_weights, val)
    print("attn_output:", attn_output.shape) # [bs,n_heads,seq_len,head_dim]

相关推荐
硅谷秋水7 分钟前
Qwen-Drive-1.0:迈向自动驾驶视觉-语言基础模型的第一步
人工智能·深度学习·机器学习·语言模型·自动驾驶
这张生成的图像能检测吗18 分钟前
(论文速读)基于两阶段多模式深度学习的轮胎表面缺陷自动检测及严重程度分类系统
人工智能·深度学习·计算机视觉·数据采集·检测系统·缺陷检测分类·轮胎缺陷
无敌的牛44 分钟前
大模型推理理解
人工智能·深度学习
吴佳浩 Alben1 小时前
走向 Memory OS:企业私有化 Agent 设计与实现
人工智能·深度学习·神经网络·语言模型·架构·自动化·ai编程
HyperAI超神经9 小时前
扰动实验+迁移学习,MIT团队推出IRIS,用「指纹」重建单细胞信号传导历史
人工智能·深度学习·机器学习·迁移学习
Rocky Ding*10 小时前
一文读懂MiniCPM5-2B:端侧 Agent 的突破,不是“小模型打赢大模型”,而是训练系统开始开源
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·minicpm5-2b
葫三生11 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
陈年老古董12 小时前
PyTorch食物图像分类实战:从数据集制作到CNN模型训练全流程详解
pytorch·深度学习·学习·机器学习·分类·cnn
2601_9623010114 小时前
深入探索 TensorFlow 2.0:Python 中的强大深度学习框架
深度学习·分布式训练·keras·tensorflow2.0·eagerexecution
方方洛15 小时前
vllm教程-19-模型架构基础
人工智能·深度学习·llm