01
MoBA
两家的思路都是 inspired by MoE,从这个角度切入来引入 sparsity 将 Attention 视为 token mixer,将 FFN 视为 channel mixer。
既然 FFN 的稀疏性位于 channel 上,那么 Attention 的稀疏性就位于 token 上,也就是 sequence 的稀疏性,于是两家不约而同的对 sequence 进行分块。
MoBA 的示意图
MoBA 将 KV 进行分块,其中 K block 参与到稀疏性的计算中,用于进行路由,V 的分块配合 K 的分块,提高训练和推理的效率。
文章里引用了 MoE 的 gating 概念,但如果直接从 MoE 的角度理解,很可能令人 confuse,这里我们最好抛开 gating 的概念,用 router 来理解 MoBA。
首先引入了一个 I,这个 I 简单可以理解为一个用于进行分块的矩阵,其中 B 是 block size,i 是 index。
如此操作之后,每个 block 只能进行 block 内的 attention,看不到其他 block,然后,每个 block 内的 k 向量求平均,得到的 k 平均向量与 q 求相似度分数 s。
这个括号的意思是 inner product,或许也可以理解为余弦相似度。
假设我们的 sequence 长度是 100k,block size 是 4k,那么一共就有 25 个 block。
25 个 block 内的 k 向量都求平均,得到了 25 个 k 平均向量,与当前的 q 进行计算,可以得到 25 个相似度分数 s。
25 个相似度分数 s 通过 topk 的方式进行选取,这里就不贴公式了。
这也是 MoBA 和 MoE 的区别。MoE 用一个 mlp(dim, k),输出 k 个 expert 对应的分数,直接迁移到 sequence 上,就没法随着 seqlen 的变长而动态变化。
于是 MoBA 采用相似度分数+topk 的方式来代替 MoE 中的 gating 来进行路由。
MoBA 的训练采用慢慢增加 seqlen 的方式进行训练。
一些细节:
-
Causality:前面的 block 不会看到后面的 block
-
Cur Block Attention:保证了当前的 block 内的 attention
-
Hybrid of MoBA and Full Attention:MoBA 作者在回答中说,scaling 的过程中,发现单纯的 MoBA 会导致训练不稳定,于是在最后几层加上了 full attention
-
Attention Sink &SWA:这两种稀疏注意力机制都可以看做 MoBA 的特殊情况,假设 k=1,每次都选择当前 block,MoBA 就退化为 SWA,在这一基础上使 k=2,结果每次都选择到了当前 block 和第一个 block,MoBA 就退化成了 attention sink
一些思考:
-
topk 的方式会不会过于简单粗暴,有其他的选取方式吗?seerattention 的作者说可以有基于阈值的、基于 topp 的。
-
直觉来说并不是所有的 q 都必须 attend 到同样的 k,比较简单的只需要关注一个块,比较复杂的需要关注更多块,那么 topk 可能太过于简单粗暴了。
-
但 threshold 也有问题,这种稀疏性不太可控。topp 或许会稍好一点,但也需要考虑实现方式。
总之是一个理论上的效果和实际工程性的 tradeoff,既然 topk 简单粗暴又够用,那就 topk 吧。
routing 的过程会不会出现类似 attention sink 的现象,比如说都关注到第一个 block?
大概率会有,因为通常来说第一句话里面包含了 instruction,本身就非常值得注意。
加上 attention sink 现象的存在,实际选取第一个 block 的概率可能就比其他 block 要高很多,当然 MoBA 还没有专门做这方面的解释性研究,以上只是基于现有结论的推断。
02
NSA
NSA 高度类似 MoBA,但是更加工程,更加融合怪。上图就可以看出,比起 MoBA 单一的 selected attention,NSA 还有 global 的 compressed attention,还有 local 的 swa。
其他细节都大差不差,compress 部分有所不同,NSA 的 compress 采用的是 token-wise MLP,rather than 求平均。
其中 t 是 input sequnece length,l 是 block length,d 是 sliding stride,出于方便考虑,我们默认 l=d,也就是像 MoBA 那样,一个 block 紧挨着另一个 block。
ψ 是一个 mlp(l, 1),with intra-block position encoding, mapping keys in a block to a single compressed key,简单来说就是把 block 内的向量压缩成一个向量。
我们就得到了 NSA 的第一个组件 Kcmp。
NSA 的第二部分,selected attention,是整个 NSA 最复杂,也是争议比较多的地方,因为比起 MoBA 详尽的描述,NSA 的细节描述实在太少。(不过已经看到作者说后续会在paper里面继续添加细节解释)
首先我们有了 Kcmp,根据 MoBA,我们可以计算相似度分数 s 了,到这一步就结束了。
但是 NSA 还没结束,NSA 对相似度分数进行了 softmax 归一化,得到了 pcmp。
假设 attention head=1,那么 pcmp 就是一个长度=到目前为止的 token t 的前提下 block 的数量的向量。
这种情况很好理解。但是接下来 l≠l’≠d 了,怎么办?
核心就是理解这个公式,但是这个公式非常 confusing,所以我不在这里讲,而是放个链接单独讲。
最后我们拿到了 pslc,就可以进行块的选择了,在 NSA 里面的块选择也是 topk,但是与 MoBA 不同,NSA 讨论了 MQA 和 GQA 的选择方式。
对于一个组内的 head,将他们对应的 pslc 求和,就得到了这个组的 pslc,然后基于该 pslc 进行选择。
诶,发现问题了吗?这种做法,组越少,精度越差。
在原始的 MQA/GQA 里面,每个头上的 q 即使在组内进行 attention,也是自由的 attention,它们可以在 k 上随意的分配自己的注意力。
但是在这种方案下,同组的 q 的注意力被强制限制在了同组的 KV Block 里面,它们不自由了。
极端例子就是 MQA 之下,如果 k 等于 3,相当于所有头上面的 q 都只看向同样的 3 个 block。
效果理论上是很不好的。
原文关于此处的解释是为了最大化 sparsity 带来的 KV cache loading 优势,但个人认为,这种 tradeoff 还是不可接受的。
毕竟让每组头上的 q 去自由的 attend,最差的情况也就是退化到 MHA 的 sparsity,并不是不可接受。
但是强制让所有头都只能看到某 k 组 block,这个信息量的丢失太大了。
总之,无论如何,我们得到了 NSA 的第二个组件 Kslc。
诶,发现区别,这里没有像 MoBA 那样保证一定会选取到当前的 block。
我们知道,NSA 的 compression 是由 MLP 完成的,所以对于不完整当前 block,无法得到对应的 Kcmp。
那么易得此处的 ranking 是不包含当前 block 的,但是回去看图,图中却显示包含了当前 block 的 attention。
所以有两个猜测:
-
作图失误,实际上没有包含当前 block 的 attention
-
作图没失误,包含了当前 block 的 attention,但是没说
好消息是作者(之一?)注意到了此处的问题,会回去修改文章关于这里的细节。
对比之下,NSA 的第三组件就显得非常简单,就是单纯的 sliding window attention,所以我们不多浪费字数了。
03
Discussion
算法的内容到这里就结束了,当然还有一些值得讨论的地方。
我们发现 NSA 比起 MoBA 来说更加复杂,可以看成是全局压缩注意力(cmp)、选择性注意力(MoBA)、滑动窗口注意力(swa)的集合体。
全局压缩注意力可以理解,能够一定程度上提高全局建模能力。那为什么单独 MoBA 就足够好,还要加入一个 swa 呢?
仔细研究的话会发现 MoBA 存在一个问题,就是对于当前 block,内部的注意力是不均匀的。
最后一个 token 可以看见整个 block 的内容,而第一个 token 什么也看不到。这种不均匀会不会影响性能?需不需要保证相邻 block 的注意力?
苏神的答案是:相信 SGD。如果该他学到,他就会去 attend 相邻的 block,而不去强制它去注意。
那对比之下我们猜测 NSA 这边有两个答案:
-
作图失误了啊,selected attention 确实没有保证当前 block 的 attention,所以必须要这个 swa 来保证局部注意力
-
保证了当前 block 的 attention,但还是不那么信 SGD,所以加入一个 swa 来提高局部注意力
当然也有 NSA 拍脑袋就定下来这三种 attention 组合,并且懒得做 ablation 的可能。不过我还是倾向于他们有一定理由这么做,只是文里没说。
另外,NSA 是面向 training efficiency 设计的,这点前面没提。
面向 GQA 设计的 kernel
根据 NSA 的原文,在 tensor core 上,MHA 原本就是 inefficient 的,所以基本只考虑了 GQA 和 MQA 的方式。
虽然我们提到 group selection 这种做法他亏掉太多精度,但也其实只在 MQA 这种极端情况。
一般 GQA 即使 group selection,也能保证 num of group 的多样性,损失一点精度换来硬件效率的提升,NSA 认为这个 tradeoff 整体还是赚。
换言之即使 MQA 的极端情况,也可以用分组去凑 core,保证一定数量的多样性,只是文里没有提到这么做。
MHA 被 NSA 认为 inefficient,是在 infra 角度出发,不同的 head 有不同的 k block,无法依靠分组 q 来充分利用 matmul。在算法层面上对比传统 MHA,也有足够的复杂度上的提升了。
来源:https://zhuanlan.zhihu.com/p/24895655502
如何学习AI大模型 ?
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓
优快云粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传优快云,朋友们如果需要可以扫描下方二维码&点击下方优快云官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉优快云大礼包:《最新AI大模型学习资源包》免费分享 👈👈
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
👉1.大模型入门学习思维导图👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
👉2.AGI大模型配套视频👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
👉3.大模型实际应用报告合集👈
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)
👉4.大模型落地应用案例PPT👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)
👉5.大模型经典学习电子书👈
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
👉6.大模型面试题&答案👈
截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习
优快云粉丝独家福利
这份完整版的 AI 大模型学习资料已经上传优快云,朋友们如果需要可以扫描下方二维码&点击下方优快云官方认证链接免费领取 【保证100%免费】
读者福利: 👉👉优快云大礼包:《最新AI大模型学习资源包》免费分享 👈👈