【AI学习】Transformer深入学习(二):从MHA、MQA、GQA到MLA

前面文章:
《Transformer深入学习(一):Sinusoidal位置编码的精妙》

一、MHA、MQA、GQA

为了降低KV cache,MQA、GQA作为MHA的变体,很容易理解。
多头注意力(MHA):
多头注意力是一种在Transformer架构中广泛使用的注意力机制,通过将查询、键和值分别投影到多个不同的空间上,然后并行计算这些空间上的注意力得分,从而获得更加丰富和细致的特征表示。

多查询注意力(MQA)
多查询注意力是MHA的一种变种,它通过共享单个key和value头来提升性能,但可能会导致质量下降和训练不稳定。MQA在保持速度的同时提高了模型的推理效率,但在某些情况下可能无法达到与MHA相同的效果。

分组查询注意力(GQA)
分组查询注意力是MQA和MHA之间的过渡方法,旨在同时保持MQA的速度和MHA的质量。GQA通过使用中间数量的键值头(大于一个,小于查询头的数量),实现了性能和速度的平衡。具体来说,GQA通过分组的方式减少了需要处理的头数,从而降低了内存需求和计算复杂度。

分组查询注意力(Grouped-Query Attention,简称GQA)是一种用于提高大模型推理可扩展性的机制。其具体实现机制如下:

1、基本概念:GQA是多头注意力(Multi-Head Attention,MHA)的变种,通过将查询头(query heads)分成多个组来减少内存带宽的需求。每个组共享一个键头(key head)和一个值头(value head),从而降低了每个处理步骤中加载解码器权重和注意力键/值的内存消耗。

2、实现方式:在实际应用中,GQA将查询头分成G个组,每组共享一个键头和一个值头。例如,GQA-G表示有G个组,而GQA-1则表示只有一个组,这相当于传统的MQA(Multi-Group Query Attention)。当GQA的组数等于查询头的数量时,它等同于标准的MHA。

3、性能与效率平衡:GQA通过这种方式有效地平衡了性能和内存需求。它允许模型在不显著降低性能的情况下,处理更多的请求并提高推理效率。此外,使用GQA可以避免由于加载大量解码器权重和注意力键/值而导致的内存瓶颈问题

二、MLA

2.1 基础原理

在这里插入图片描述
这张图,对从MHA、MQA、GQA到MLA,看的很清楚。
GQA就是用了多组KV Cahe,MQA只用了一组KV Cache。
那MLA呢?MLA看起来和MHA是一样的,只不过存的压缩后的隐KV,在计算的时候再通过投影倒多个KV参与注意力计算。
为什么会节省KV Cache?苏神的文章解释的很清楚。
看下面的公式,MLA公式如下:
在这里插入图片描述

其中的c就是压缩后的隐KV。
但是这样好像无法节省KV Cache,因为计算和MHA一样了,关键在于下面的转换公式:
在这里插入图片描述
这个公式把注意力的计算做了转换,k的投影矩阵这样就可以合并倒q的投影矩阵中。
另外,因为注意力之后的o还有一个投影矩阵,在这里插入图片描述也可以合并到后面的投影矩阵中。
c作为压缩后的隐KV,是所有头共享的,这样就实现了内存的节省

2.2 增加RoPE

但是,如上面,矩阵合并之后,就和RoPE不兼容了,具体看苏神的分析文章。
MLA采取了一种混合的方法——每个 Attention Head的 Q、K 新增 dr个维度用来添加 RoPE,其中 K 新增的维度每个 Head 共享:
在这里插入图片描述
因为dr远小于dk,所以增加的内存空间不大。

2.3 最后的版本

MLA 的最终版本,还将 Q 的输入也改为了低秩投影形式,可以减少训练期间参数量和相应的梯度的显存。
在这里插入图片描述
MLA这种方法,在训练阶段还是照常进行,此时优化空间不大;在推理阶段,应该可以大幅减少显存。
见苏神的分析:“ MLA 在推理阶段做的这个转换,虽然能有效减少 KV Cache,但其推理的计算量是增加的。
那为什么还能提高推理效率呢?这又回到“瓶颈”一节所讨论的问题了,我们可以将 LLM 的推理分两部分:第一个 Token 的生成(Prefill)和后续每个 Token 的生成(Generation)。
Prefill 阶段涉及到对输入所有 Token 的并行计算,然后把对应的 KV Cache 存下来,这部分对于计算、带宽和显存都是瓶颈,MLA 虽然增大了计算量,但 KV Cache 的减少也降低了显存和带宽的压力,大家半斤八两;但是 Generation 阶段由于每步只计算一个 Token,实际上它更多的是带宽瓶颈和显存瓶颈,因此 MLA 的引入理论上能明显提高 Generation 的速度。”

三、参考文章

苏神:《缓存与效果的极限拉扯:从MHA、MQA、GQA到MLA》
https://mp.weixin.qq.com/s/yCczYU0po0PvPTa-eh2pfg

《大模型KV Cache节省神器MLA学习笔记》
https://mp.weixin.qq.com/s/cBMrRUdM1IM0T1ji_ODxng

《注意力机制的变体之MLA》
https://mp.weixin.qq.com/s/dWZk8TBY89re207ZL3GjfA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

trendFinder - 利用 AI 掌握社交媒体上的热门话题

1600 Stars 177 Forks 7 Issues 2 贡献者 MIT License Javascript 语言 代码: https://github.com/ericciarla/trendFinder 更多AI开源软件:AI开源 - 小众AI Trend Finder 收集并分析来自关键影响者的帖子,然后在检测到新趋势或产品发布时发送 Slack 通知…

以图像识别为例,关于卷积神经网络(CNN)的直观解释

大家读完觉得有意义记得关注和点赞!!! 作者以图像识别为例,用图文而非数学公式的方式解释了卷积神经网络的工作原理, 适合初学者和外行扫盲。 目录 1 卷积神经网络(CNN) 1.1 应用场景 1.2 起…

Python 数据结构揭秘:栈与队列

栈(Stack) 定义 栈是一种后进先出(Last In First Out, LIFO)的数据结构。它类似于一个容器,只能在一端进行插入和删除操作。栈有两个主要的操作:push(入栈)和 pop(出栈…

vim 的基础使用

目录 一:vim 介绍二:vim 特点三:vim 配置四:vim 使用1、vim 语法格式2、vim 普通模式(1)保存退出(2)光标跳转(3)文本删除(4)文本查找&…

HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级

注:本文为 “HP 电脑开机黑屏 | 故障判断 | BIOS 恢复 | BIOS 升级” 相关文章合辑。 引文图片 csdn 转储异常,重传。 篇 1:Smart-Baby 回复中给出故障现象判断参考 篇 2、篇3 :HP 官方 BIOS 恢复、升级教程 开机黑屏&#xff0c…

JAVA:利用 Redis 实现每周热评的技术指南

1、简述 在现代应用中,尤其是社交媒体和内容平台,展示热门评论是常见的功能。我们可以通过 Redis 的高性能和丰富的数据结构,轻松实现每周热评功能。本文将详细介绍如何利用 Redis 实现每周热评,并列出完整的实现代码。 2、需求分…

VSCode下配置Blazor环境 断点调试Blazor项目

VSCode下使用Blazor的环境配置和插件推荐 Blazor是一种用于构建交互式Web UI的.NET框架,它可以让你使用C#、Razor和HTML进行Web开发,而不需要JavaScript。在这篇文章中,我们将介绍如何在VSCode中配置Blazor环境,并推荐一些有用的…

《Rust权威指南》学习笔记(一)

基本介绍 1.Rust使用场景 :需要运行速度、需要内存安全、更好的利用多处理器。程序员无法在安全的Rust代码中执行任何非法的内存操作。相对于C#等带有垃圾回收机制的语言来讲,Rust遵循了零开销抽象(Zero-Cost Abstraction)规则&a…

STM32-笔记26-WWDG窗口看门狗

一、简介 窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。 窗口看门狗的本质是一个能产生系统复位信号和提前唤醒中断的6位计数器(有的地方说7位。其实都无所谓&#xff0…

ARM CCA机密计算安全模型之固件更新

安全之安全(security)博客目录导读 目录 1、远程更新 2、本地更新 3、鲁棒性 1、远程更新 Arm欢迎关于CCA固件更新需求的反馈。一般而言,CCA固件更新过程可以描述如下: CCA固件更新客户端使用固件更新协议与远程更新服务通信。CCA固件更新客户端将…

Assimp的ReadFileFromMemory函数踩坑

使用ReadFileFromMemory函数加载模型的问题 使用ReadFileFromMemory函数无法加载obj和md3等模型数据分散在多个文件中的模型。obj模型通常有一部分数据(如纹理数据)在mtl文件中保存,如果只把obj文件加载到内存中,并通过ReadFileF…

机组的概述

计算机系统组成 硬件系统和软件系统 计算机硬件 1.冯诺依曼机基本思想 特点 1.采用“存储程序”工作方式 2.硬件系统由运算器,存储器,控制器,输入输出设备组成 3.指令和数据存在存储器中,形式无区别 4.指令和数据用二进制代…

后端开发入门超完整速成路线(算法篇)

引言 后端开发是软件开发中不可或缺的一部分,它涉及到服务器、数据库、API等核心组件的构建和维护。对于初学者来说,掌握算法和数据结构是进入后端开发领域的基础。本文将为你提供一个超完整的算法学习路线,帮助你快速入门,并在文…

主键有多种设计

1. 自增ID id bigint NOT NULL AUTO_INCREMENT COMMENT 主键ID 优点: 简单直观自动生成递增有序,对索引友好 缺点: 可能暴露业务信息分布式系统下需要特殊处理合并数据时可能冲突 2. UUID/GUID id char(36) NOT NULL COMMENT 主键ID …

【面试】后端开发面试中常见数据结构及应用场景、原理总结

在后端开发面试中,常见的数据结构包括数组、链表、栈、队列、二叉树、平衡树、堆、图和哈希表等。以下是这些数据结构的总结,包括它们的应用场景、优缺点。 常见数据结构及其应用场景 数据结构应用场景数组存储固定大小的数据集合,如学生成…

TypyScript从入门到精通

TypyScript从入门到精通 TypyScript 是什么?增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型:3.…

Tableau数据可视化与仪表盘搭建-安装教程

下载 tableau.com/zh-cn/support/releases 滚动到最下方的下载 在下载的同时 我们点击登录,去注册一个tableau的账号 下面点击我们下载好的tableau安装程序 不要自定义安装,会有路径问题 点击试用14天 点击激活 激活学生 tableau.com/zh-cn/academic…

049_小驰私房菜_MTK Camera debug,通过adb 命令读写Camera sensor寄存器地址的值

一、读取/写入 某个寄存器地址的值 设备先adb root 1)读取寄存器地址的值 /proc/driver # echo "0x0a34" > camsensor && dmesg |grep -i a34 2)往寄存器地址写值 /proc/driver # echo "0x3304 0x66” > camsensor && dmesg |grep -…

Scala_【4】流程控制

第四章 分支控制if-else单分支双分支多分支返回值嵌套分支 For循环控制包含边界不包含边界循环守卫循环步长嵌套循环循环返回值 While循环Break友情链接 分支控制if-else 单分支 双分支 多分支 返回值 嵌套分支 For循环控制 Scala也为for循环这一常见的控制结构提供了非常多的…

Flink源码解析之:Flink On Yarn模式任务提交部署过程解析

Flink源码解析之:Flink On Yarn模式任务提交部署过程解析 一、Flink on Yarn部署模式概述 Apache Hadoop YARN 在许多数据处理框架中都很流行。 Flink 服务提交给 YARN 的 ResourceManager,后者会在 YARN NodeManagers 管理的机器上生成容器。 Flink 将…