新公司怎样做网站在四川眉山,临沂市建设局兰山区网站,建设数据库网站需要哪些设备,建网站专用网站前言
多查询注意力(MQA)、分组查询注意力(GQA)是Transformer中多头注意力(MHA)的变种#xff0c;它们大幅提高了解码器的推理效率#xff0c;在LLaMA-2#xff0c;ChatGLM2等大模型中有广泛使用#xff0c;本篇介绍MQA、GQA的原理并分析其源码实现。 使用MQA#xff0c;G…前言
多查询注意力(MQA)、分组查询注意力(GQA)是Transformer中多头注意力(MHA)的变种它们大幅提高了解码器的推理效率在LLaMA-2ChatGLM2等大模型中有广泛使用本篇介绍MQA、GQA的原理并分析其源码实现。 使用MQAGQA的背景介绍
多查询注意力(Multi Query AttentionMQA)提出于2019年的论文《Fast Transformer Decoding: One Write-Head is All You Need》旨在解决Transformer增量推理阶段效率低下的问题在当时并没有引起关注而随着近几年Transformer和GPT成为生成式大模型的基座面临着产业落地的实际情况导致GPT的推理加速备受关注因此MQA又重新被提及起来。 分组查询注意力(Group Query AttentionGQA)提出于2023年是MQA更一般的形式它介于MQA和MHA之间是模型预测表现和模型推理性能之间的一个折衷。 MQAGQA原理简述
MQA的原理很简单它将原生Transformer每一层多头注意力的Key线性映射矩阵、Value线性映射矩阵改为该层下所有头共享也就是说K、V矩阵每层只有一个而Q矩阵不受影响其数量和注意力头数相等。以ChatGLM2-6B为例一共28层32个注意力头输入从4096经过Q、K、V矩阵映射维度为128若采用原生多头注意力机制则Q、K、V矩阵各有28×32个而采用MQA的方式则整个模型包含28×32个Q矩阵28个K矩阵28个V矩阵示意图如下 MHA和MQA的差别
可想而知MQA这种方式大幅减小了参数数量带来推理加速的同时会造成模型性能损失且在训练过程使得模型变得不稳定因此在此基础上提出了GQA它将Query进行分组每个组内共享一组Key、Value令组的数量为N若N等于1此时等效于MQA若N等于Query头的数量此时退化为MHA。GQA是推理效率和模型性能的trade-off。 GQA中和MQA右对比 MQAGQA推理加速分析
MQA能够大幅加速采用MHA的Transformer的推理但是会有明显的性能损失而GQA通过设置合适的分组大小可以和MQA的推理性能几乎相等同时逼近MHA的模型性能。作者在GQA的论文中给到了实验结论来印证这一点。 作者采用T5模型作为研究对象模型版本采用T5-Large和T5-XXL它们都采用MHA注意力方式其中Large参数量770MXXL参数量11B在此基础上作者通过up-training方法将T5-XXL改造为MQA和GQA最终一共四个版本模型进行精度和推理效率的对比结果如下 横轴代表平均每条样本的推理耗时越大代表延迟越大纵轴代表在众多数据集上的评价得分越大代表得分越高。在MHA方式下由于XXL的模型参数更大因此MHA-XXL的推理延迟高于MHA-Large同时MHA-XXL的模型评分在所有版本里面最高。 经过up-training方法将MHA改造为MQA之后MQA-XXL获得了所有版本的最低延迟甚至还低于小一个型号的Large模型同时MQA使得其模型评分比MHA-XXL降低了但还是超越了小一个信号的Large的模型表明大参数量的MQA模型不论在精度还是效率上都超越了小参数量的MHA模型。 而经过up-training方法将MHA改造为GQAGQA-XXL的推理延迟几乎和MQA-XXL相等而其性能评分也和参数量最大的MHA-XXL十分接近整体上GQA达到了最佳效果推理性能和模型评分都十分优秀。 分组的大小对模型推理延迟的影响
GQA的分组数是一个超参数组数越大越接近MHA推理延迟越大同时模型精度也越高作者给出了他的实验结论表明当组数量从1逐渐上升到8时模型推理的开销并没有明显的增长在8以后推理开销显著变大最终作者采用8个分组作为他的最佳选择。 以上从实验结果层给到结论MQA略微损失了模型精度但是确实能够大幅降低推理开销而如果选择了合适的分组数GQA能够两者皆得。在理论层MQA和GQA对推理的帮助主要是以下两点 降低内存读取模型权重的时间开销由于Key矩阵和Value矩阵数量变少了因此权重参数量也减少了需要读取到内存的数量量少了因此减少了读取权重的等待时间 KV-Cache空间占用降低KV-Cache会将之前推理过的Key、Value向量存储在内存中而随着步长和batch_size的增长KV-Cache空间占用越来越高使得KV-Cache不能被高效的读写而MHA和GQA方式使得KV-Cache需要存储的参数量降低了head_num倍从而提高KV-Cache的读写效率另一方面可以有空间来增大batch_size从而提高模型推理的吞吐量
注意MQA和GQA并没有降低Attention的计算量FLOPs因为Key、Value映射矩阵会以广播变量的形式拓展到和MHA和一样因此计算量不变只是Key、Value参数共享。 ChatGLM2-6B中的MQA/GQA源码分析
本节采用ChatGLM2-6B的模型源码modeling_chatglm.py来说明MQA和GQA的实现这两者在代码上没有区别因为MQA是GQA的特例当分组数等于1时就是MQA而chatglm2-6B采用的是分组数为2的GQA从它的配置文件config.json可以观察得到
{_name_or_path: THUDM/chatglm2-6b,model_type: chatglm,architectures: [ChatGLMModel],auto_map: {AutoConfig: configuration_chatglm.ChatGLMConfig,AutoModel: modeling_chatglm.ChatGLMForConditionalGeneration,AutoModelForSeq2SeqLM: modeling_chatglm.ChatGLMForConditionalGeneration},...multi_query_attention: true,multi_query_group_num: 2,....
}
其中multi_query_attention代表是否开启多查询注意力multi_query_group_num代表分组数。 MQA和GQA仅涉及到注意力层因此直接定位到SelfAttention的代码块
class SelfAttention(torch.nn.Module):def __init__(self, config: ChatGLMConfig, layer_number, deviceNone):super(SelfAttention, self).__init__()self.layer_number max(1, layer_number)# TODO 128 * 32self.projection_size config.kv_channels * config.num_attention_heads# Per attention head and per partition values.self.hidden_size_per_attention_head self.projection_size // config.num_attention_headsself.num_attention_heads_per_partition config.num_attention_heads# TODO true 多查询注意力self.multi_query_attention config.multi_query_attention# TODO qkv线性映射层到3*dself.qkv_hidden_size 3 * self.projection_sizeif self.multi_query_attention:self.num_multi_query_groups_per_partition config.multi_query_group_num # 2self.qkv_hidden_size (# TODO (128 * 32 2 * 128 * 2)self.projection_size 2 * self.hidden_size_per_attention_head * config.multi_query_group_num)self.query_key_value nn.Linear(config.hidden_size, self.qkv_hidden_size,biasconfig.add_bias_linear or config.add_qkv_bias,devicedevice, **_config_to_kwargs(config))
该SelfAttention代表某一层下32个注意力头的运算。在初始化阶段作者采用大矩阵方案用一个矩阵将所有头QKV创建出来因此projection_size为128×3然后以MHA的方式将映射维度乘以3得到qkv_hidden_size当采用多查询注意力时对qkv_hidden_size重新修改它等于所有头的Q矩阵加上KV矩阵各一个因此projection_size为128 * 32 2 * 128 * 24608最后通过一个Linear层实现QKV矩阵的创建。 在推理阶段使用query_key_value进行同意QKV映射然后通过split算子将QKV进行分解分解之后所有头的Query为4096维Key和Value为256维因为分组数为2所有存在两个Key和两个Value。 def forward(self, hidden_states, attention_mask, rotary_pos_emb, kv_cacheNone, use_cacheTrue):# TODO [1(seq), 1(batch), 4608]mixed_x_layer self.query_key_value(hidden_states)if self.multi_query_attention:# TODO [17, 1, 4096], [17, 1, 256], [17, 1, 256](query_layer, key_layer, value_layer) mixed_x_layer.split([self.num_attention_heads_per_partition * self.hidden_size_per_attention_head, # TODO 32 *128self.num_multi_query_groups_per_partition * self.hidden_size_per_attention_head, # TODO 2 * 128self.num_multi_query_groups_per_partition * self.hidden_size_per_attention_head, # TODO 2 * 128],dim-1,)
然后作者将QKV向量的维度进行reshape将头维度拿出来准备在下面的代码中对KV进行广播 # TODO [17, 1, 32, 128]query_layer query_layer.view(query_layer.size()[:-1] (self.num_attention_heads_per_partition, self.hidden_size_per_attention_head))# TODO [17, 1, 2, 128]key_layer key_layer.view(key_layer.size()[:-1] (self.num_multi_query_groups_per_partition, self.hidden_size_per_attention_head))# TODO TODO [17, 1, 2, 128]value_layer value_layer.view(value_layer.size()[:-1] (self.num_multi_query_groups_per_partition, self.hidden_size_per_attention_head))
在这之前需要将原始的Query和Key携带旋转位置编码RoPE使得注意力能够感知到相对位置信息此步骤和Value无关 if rotary_pos_emb is not None:query_layer apply_rotary_pos_emb(query_layer, rotary_pos_emb)key_layer apply_rotary_pos_emb(key_layer, rotary_pos_emb)
然后作者对Key和Value做广播因为Query有32个头而GQA有2组因此要翻32/216倍数通过torch的expand进行广播实现参数共享广播之后QKV三者的shape变成一致 if self.multi_query_attention:# TODO TODO [17, 1, 2, 128] [17, 1, 2, 1, 128]key_layer key_layer.unsqueeze(-2)# TODO [17, 1, 2, 16, 128]key_layer key_layer.expand(# TODO expand 进行广播kv向量共享# TODO 只能对维度值是1的进行拓展如果某些维不需要拓展写为-1, 32 // 216# TODO 有32个头KV组只有2组要复制16份-1, -1, -1, self.num_attention_heads_per_partition // self.num_multi_query_groups_per_partition, -1)# TODO [17, 1, 2, 16, 128] [17, 1, 32, 128]key_layer key_layer.contiguous().view(key_layer.size()[:2] (self.num_attention_heads_per_partition, self.hidden_size_per_attention_head))value_layer value_layer.unsqueeze(-2)value_layer value_layer.expand(-1, -1, -1, self.num_attention_heads_per_partition // self.num_multi_query_groups_per_partition, -1)value_layer value_layer.contiguous().view(value_layer.size()[:2] (self.num_attention_heads_per_partition, self.hidden_size_per_attention_head))
最后所有处理好之后计算注意力权重并且将权重和Value相乘得到注意力的输出这里和传统的MHA没有任何却别
context_layer self.core_attention(query_layer, key_layer, value_layer, attention_mask)
MQA和GQA的主要代码流程结束核心是先创建分组数的Key和Value矩阵注意力点乘之前将Key和Value广播到和Query一致即可全文完毕。
最后的最后
感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。
因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。
这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
一、全套AGI大模型学习路线
AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能 二、640套AI大模型报告合集
这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。 三、AI大模型经典PDF籍
随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。 四、AI大模型商业化落地方案 五、面试资料
我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下。
这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 文章转载自: http://www.morning.fstdf.cn.gov.cn.fstdf.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.msfqt.cn.gov.cn.msfqt.cn http://www.morning.nnykz.cn.gov.cn.nnykz.cn http://www.morning.dpsyr.cn.gov.cn.dpsyr.cn http://www.morning.jyzqn.cn.gov.cn.jyzqn.cn http://www.morning.yktwr.cn.gov.cn.yktwr.cn http://www.morning.nfbkz.cn.gov.cn.nfbkz.cn http://www.morning.kqbjy.cn.gov.cn.kqbjy.cn http://www.morning.nqwz.cn.gov.cn.nqwz.cn http://www.morning.cxtbh.cn.gov.cn.cxtbh.cn http://www.morning.xnfg.cn.gov.cn.xnfg.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.qnklx.cn.gov.cn.qnklx.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn http://www.morning.ndmbd.cn.gov.cn.ndmbd.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.rpms.cn.gov.cn.rpms.cn http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn http://www.morning.zqcsj.cn.gov.cn.zqcsj.cn http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.rfyff.cn.gov.cn.rfyff.cn http://www.morning.nnqrb.cn.gov.cn.nnqrb.cn http://www.morning.mnwmj.cn.gov.cn.mnwmj.cn http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn http://www.morning.ftznb.cn.gov.cn.ftznb.cn http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn http://www.morning.rjjys.cn.gov.cn.rjjys.cn http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.hsdhr.cn.gov.cn.hsdhr.cn http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.fssmx.com.gov.cn.fssmx.com http://www.morning.rqmr.cn.gov.cn.rqmr.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.bpmnq.cn.gov.cn.bpmnq.cn http://www.morning.tkztx.cn.gov.cn.tkztx.cn http://www.morning.gnlyq.cn.gov.cn.gnlyq.cn http://www.morning.cwyfs.cn.gov.cn.cwyfs.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.sdkaiyu.com.gov.cn.sdkaiyu.com http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.rqfnl.cn.gov.cn.rqfnl.cn http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn http://www.morning.lpppg.cn.gov.cn.lpppg.cn http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn http://www.morning.jxmjr.cn.gov.cn.jxmjr.cn http://www.morning.lmbm.cn.gov.cn.lmbm.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn http://www.morning.gqbtw.cn.gov.cn.gqbtw.cn http://www.morning.rdnkx.cn.gov.cn.rdnkx.cn http://www.morning.wsgyq.cn.gov.cn.wsgyq.cn http://www.morning.tkzrh.cn.gov.cn.tkzrh.cn http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn http://www.morning.dyxlm.cn.gov.cn.dyxlm.cn http://www.morning.kkhf.cn.gov.cn.kkhf.cn http://www.morning.rmtxp.cn.gov.cn.rmtxp.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.qsszq.cn.gov.cn.qsszq.cn http://www.morning.lznfl.cn.gov.cn.lznfl.cn http://www.morning.jwxnr.cn.gov.cn.jwxnr.cn http://www.morning.gnkbf.cn.gov.cn.gnkbf.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.youngbase.cn.gov.cn.youngbase.cn http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.rcwzf.cn.gov.cn.rcwzf.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.tckxl.cn.gov.cn.tckxl.cn http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn http://www.morning.fhghy.cn.gov.cn.fhghy.cn http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn