0731-88575016

详细内容

竞技宝官网app·从零复现Llama3代码库爆火大神Kapathy一

时间发布时间:2024-09-22 12:31:48 来源:竞技宝app下载官网 作者:竞技宝官网地址     

  “字节级(byte-level)”BPE算法,在UTF-8编码的字符串上运行,广泛应用于大模型分词。Karpathy提供的这个代码库包含两个分词器,都能在给定文本上训练分词器的词汇表和合并规则、将文本编码为token、将token解码为文本。

  读取模型文件的方式通常取决于model classes的编写方式以及class中变量的命名。但由于纳哥是从头开始实现Llama3,所以将逐个张量地读取文件内容。

  通过此配置可以推断出模型的结构和参数信息,例如模型包含的Transformer层数、多头注意力块中的头数,以及词汇表的大小等细节。

  接下来,纳哥展示了在代码中将token转换为高维的嵌入表示。这是代码库中唯一使用内置神经网络模块的部分。

  [17x1]的token矩阵变成了[17x4096]的嵌入矩阵。也就是说,每个token被转换为一个长度为4096的嵌入向量,总共有17个这样的嵌入向量。

  然后,纳哥对嵌入进行RMS归一化。经过这一步后,嵌入的形状不会改变,只有数值被归一化了。纳哥强调需要一个norm_eps,避免意外将RMS值设为0导致除以0的错误。

  构建Transformer的第一层,进行归一化处理,从模型字典中访问layer.0(即第一层)。归一化之后,张量的形状仍然是[17x4096],与嵌入时相同,但数值已被归一化。

  纳哥表示乍一看有点奇怪,因为理想情况是每个注意力头的q、k、v和o向量是独立的。而代码作者将它们在一起,是为了方便并行计算注意力头的矩阵乘法。

  下一步,纳哥将从多个注意力头中解包query,解包后的形状是[32x128x4096],32是Llama3中的注意力头数量,128是query向量的大小,4096是token嵌入的大小。

  在这里,纳哥访问了第一层第一个注意力头的query权重矩阵,query权重矩阵的大小是[128x4096]。

  现在已经为prompt中的每个token生成了query向量,但每个单独的query向量并不知道它在prompt中的具体位置。

  在这个prompt中,使用了三次”the”,需要根据它们在prompt中的位置,使这三个”the”token的query向量有所不同(每个向量的大小为[1x128])。

  由此,得到的向量大小为 [17x64x2],这是将长度为128的query向量对每个prompt中的token分成64对。这64对中的每一对都会根据m*(theta) 进行旋转,其中m是要旋转query的token的位置。

  现在每个token的query元素都有一个复数(角度变化向量),可以将query向量(之前分成的对)转换为复数,然后通过点积根据位置旋转query向量。

  旋转后的对现在已经合并,有一个新的query向量(旋转后的query向量),其形状为[17x128],其中17是token的数量,128是query向量的维度。

  key生成的key向量维度也是128;key的权重只有query的四分之一,这是因为key的权重在同一时间内被4个头共享,来减少计算量;key也会旋转添加位置信息,原因与query相同。

  此。


竞技宝官网app
电话:13973131243
邮箱:dingdangang@douyin.com
地址:竞技宝官网app
扫一扫浏览手机站