LLaMA2详解

RoPE

这个不多谈了,见:旋转位置编码

RMSNorm

标准Transformer的LayerNorm如下:
y = x − Mean ⁡ ( x ) Var ⁡ ( x ) + ε ∗ W + B y=\frac{x-\operatorname{Mean}(x)}{\sqrt{\operatorname{Var}(x)+\varepsilon}} * W+B y=Var(x)+ε xMean(x)W+B

llama2采用了RMSNorm:
y = x R M S ( x ) + ε , R M S ( x ) = 1 n ∑ 1 n x i 2 y=\frac{x}{R M S(x)+\varepsilon}, RMS(x) = \sqrt{\frac{1}{n} \sum_{1}^n {x_i}^2} y=RMS(x)+εx,RMS(x)=n11nxi2

实现源码

def _norm(self, x):
    """
    Apply the RMSNorm normalization to the input tensor.

    Args:
        x (torch.Tensor): The input tensor.

    Returns:
        torch.Tensor: The normalized tensor.

    """
    return x * torch.rsqrt(x.pow(2).mean(-1, keepdim=True) + self.eps)

RMSNorm能保证激活效果变化,且计算效率能提升7%∼64%

SwiGLU

这个不多谈了,见:SwiGLU激活函数

MLP

MLP

up、gate、down都是三个linear层down(up * silu(gate))

def forward(self, x):
    return self.w2(F.silu(self.w1(x)) * self.w3(x))

GQA

这个不多谈了,见:Multi Query Attention & Group Query Attention

padding_side

llama系列训练和推理都是right padding:

  • 训练:其实只要设置padding mask,那么left/right pad是没有区别的。然而实际上huggingface中某些tokenizer在training的时候必须设成right padding,因为有些tokenizer使用的是absolute position id,导致非padding token的position id不是从0开始的。
  • 推理:由于llama是decoder-only结构,每个token的生成依赖于上一个token。而上一个token如果是无实际意义的padding token,那么就打断了句子语义的连续性,导致生成文本质量较差。因此left padding比较make sense,但在llama推理的源码中,batch的时候采用right padding。生成token的时候,从batch中长度最短的序列开始生成,其它较长序列的相同位置保持不变,直到该序列开始生成。猜测llama这样做的原因是保持跟训练一致,但不如left padding优雅。

参考

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值