大模型算法题(5)

【往期文章】

Yi技术报告-划重点看细节
transformer中normalization的二三事
稀疏注意力计算:sliding window attention
理解Attention:从起源到MHA,MQA和GQA
LLM长上下文的问题
理解LLM位置编码:RoPE
大模型算法题(1)
大模型算法题(2)


【本文已在同名 微信公众号 / 知乎 / 个人博客linsight.cn 上线】

本系列将持续整理一些LLM中关键的、细节的、值得关注的内容,持续更新~

如有错漏,欢迎指正~


1.使用半精度训练时,bf16和fp16格式有什么异同?

二者都是占用16bit空间。

fp16由1个符号位、5个指数位和10个尾数位组成。fp16在表达小数时具有较高的精度,但表示的最大范围相对bf16比较小。相比bf16,在表达较大的数时更容易出现上溢的情况。

bf16由1个符号位、8个指数位和7个尾数位组成。相比于fp16,bf16牺牲了一些尾数位以增加指数位,扩大了表达的范围,但是精度降低了,因此对于对精度需求比较高的模型,模型可能效果不如fp16。

模型训练时使用bf16和fp16都可以降低内存使用和传输量,提高训练效率。

2.支持模型长上下文的方案「NTK-aware interpolation」的思路是什么?

1.在NTK插值之前,线性插值通过在原模型训练的两个位置编码中间,插入新的位置编码,使得同样的取值范围可以容纳更多位置。

2.而NTK插值则是一种非线性插值的方法。它通过仅改变RoPE的base,使得位置编码中不同频率的信号有不同的表现,具体来说就是“高频外推,低频内插”。高频信号使用外推,防止分辨率太低,而低频信号沿用插值的方式,实现方便。

3.LLM长度外推方案NTK-by-parts的思路是什么?

NTK-by-parts的方法在NTK插值的基础上又多想了一层。它认为无论是线性插值还是NTK-aware插值,都认为RoPE的所有分量都对网络有同样的重要性。而NTK-by-parts的思路认为,应该区别对待不同分量,他们对网络的影响有所不同。对于波长远小于上下文长度的分量(如波长<=1/32上下文),就不插值只外推;而对于波长大于等于上下文长度的分量,就只外推不插值;对于介于两者之间的分量,就使用外推和插值的加权和。

使用一个斜坡函数来定义NTK-by-parts的分段插值方法,如下所示

4.LLM长度外推方案YaRN是怎做的?

PI/NTK/NTK-by-parts主要的做法都是使用插值,而随着插值进行,token之间的距离变得更近(因为现在每一个位置旋转角度变小了),平均最小距离在减小,这样注意力softmax的分布会变得更尖,也就是都集中在某个区间。

换句话说,就是RoPE原本远距离衰减的特性变弱了,衰减得更不明显,就会导致模型更平均地关注到更多的token,这样就削弱了注意力机制,导致输出质量下降。

可以通过在softmax之前,将中间注意力矩阵乘以温度 t>1来缓解这个问题。由于RoPE被编码为一个旋转矩阵,就可以简单地给旋转矩阵乘以一个系数根号t来实现,这样可以不必修改注意力的代码。

YaRN结合NTK-by-parts和这个温度系数,对attention score进行调整。

5.对于使用Group-Query Attention的模型,假设hidden size=D,Q的注意力头数量为h,每个头维度为d(假设有D=d×h),kv组数为n,输入上下文长度为s,batch size=b,模型层数为L,计算推理时kv cache所需的空间。

kv cache缓存的是经过投影变换之后的K和V矩阵。

对于GQA,每层有n组K和V,每组的特征维度和Q的每个头的特征维度相同,为D/h。则每层每组K和V数据量为sD/h,整个模型共有2LnsD/h个数据,因此整个batch需要缓存2bLnsD/h个数据。 如果使用的是半精度浮点数,每个浮点需要两个字节,因此共需要4bLnsD/h字节的空间。


读到这了,来一发点赞收藏关注吧~

博客:http://www.linsight.cn/
知乎:Linsight
微信公众号:Linsight


【往期文章】

MoE模型的前世今生
LLM长上下文的问题
解锁大模型长上下文能力
理解Attention:从起源到MHA,MQA和GQA
Yi技术报告-划重点看细节
transformer中normalization的二三事
从代码实现看normalization-到底做了什么
稀疏注意力计算:sliding window attention
理解LLM位置编码:RoPE
大模型算法题(1)
大模型算法题(2)
大模型算法题(3)
大模型算法题(4)
大模型算法题(5)