用code去探索理解Llama架构的简单又实用的方法

这篇具有很好参考价值的文章主要介绍了用code去探索理解Llama架构的简单又实用的方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

除了白月光我们也需要朱砂痣

      我最近也在反思,可能有时候算法和论文也不是每个读者都爱看,我也会在今后的文章中加点code或者debug模型的内容,也许还有一些好玩的应用demo,会提升这部分在文章类型中的比例

      今天带着大家通过代码角度看一下Llama,或者说看一下Casual-LLM的Transfomer到底长啥样

     对Transfomer架构需要更了解的读者,可以先看这个系列

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(1) (qq.com)

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(2) (qq.com)

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(3) (qq.com)

小周带你读论文-2之"草履虫都能看懂的Transformer老活儿新整"Attention is all you need(4) (qq.com)

       友情提示,看代码和debug都不需要GPU,在你的PC上就可以做

       首先先安装transfomer库

       pip install transfomers

       然后进入到库下面,一般在这

用code去探索理解Llama架构的简单又实用的方法,llama

       进去就能找到Transfomers的库,往下拉到models,可以发现各种模型都在里面

用code去探索理解Llama架构的简单又实用的方法,llama

找到Llama,包含以下文件

用code去探索理解Llama架构的简单又实用的方法,llama

      点进modeling_llama.py发现1200多行,根本没法看(一般人没那么多耐心,但是其实仔细看两遍还是很有收获的),然后点击左边outline 大纲,(或者ctrl+shift+o),就可以有选择的看你想要研究的具体网络层,这样感觉压力瞬间小了百分之80以上

用code去探索理解Llama架构的简单又实用的方法,llama

      我想查某个函数的代码块,想对它加深了解,举个例子,看起来比较怪异命名的,这个线性扩展RoPE embedding的函数

用code去探索理解Llama架构的简单又实用的方法,llama

       然后ctl按住函数名字就能查到它作用于attetion的机制里面,在这种情况下即使我不知道它到底干啥,也能猜个89不离10,至少和什么主模块相关我清楚了

用code去探索理解Llama架构的简单又实用的方法,llama

     本章的话,我们先从模型主体部分看起,点LlamaModel,就能看到非常清晰的逻辑

    

用code去探索理解Llama架构的简单又实用的方法,llama

    主体部分包含3个子模块:

  • 先要embedding token

  • 再要包含一个通过for循环,不断的持续经过的decoder层

  • 还要包含一个Normal(RMSNorm)

     

     从大面上看也就这么3个操作

     初始化部分,初始了哪些模块我们看完了,再看看细节,从forward看起(大家看任何网络都要重点看forward)

用code去探索理解Llama架构的简单又实用的方法,llama

 forward输入部分,要求输入的参数:

  • input_ids:输入序列标记的索引,形状为(batch_size, sequence_length)的torch.LongTensor。

  • attention_mask:避免对填充标记进行注意力计算的掩码,形状为(batch_size, sequence_length)的torch.Tensor

  • position_ids:输入序列标记在位置嵌入中的索引,形状为(batch_size, sequence_length)的torch.LongTensor

  • past_key_values:包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),用于加速顺序解码的tuple,推理用的,当use_cache=True时,会返回这个参数,训练不用管

  • inputs_embeds:直接传入embedding表示而不是input_ids,形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor

  • use_cache:是否使用缓存加速解码的布尔值,当设置为True时,past_key_values的键值状态将被返回,用于加速解码

  • output_attentions:是否返回所有注意力层的注意力张量,布尔值,当设置为True时,会在返回的结果中包含注意力张量

  • output_hidden_states:是否返回所有层的隐藏状态,布尔值,当设置为True时,会在返回的结果中包含隐藏状态

  • return_dict:是否返回utils.ModelOutput对象而不是普通的元组,布尔值,当设置为True时,会返回一个ModelOutput对象

         我们继续看,下面就是一些操作步骤,输入的input_id,会被向量化,生成hidden_states

用code去探索理解Llama架构的简单又实用的方法,llama

    hidden_states然后就被扔进了若干个hidden_layer被for循环来回的操作,比如Llama7B的32层

   

用code去探索理解Llama架构的简单又实用的方法,llama

     我们简单写一段逻辑描述上述的代码

     比如在把"我爱你"已经分词的情况下 我=100,爱=200,你=300

  input_ids = [100,200,300]

  input_ids  -> nn.Emebdding(dims=3) -> hidden_states

  hidden_states = [[0.1,0.2,0.3],[0.4,0.5,0.6],[0.7.0.8.1.1]]

  hidden_states ->layer1 ->layer2 ------>layer32

  最终还是hidden_states

  也就是最终的shape和初始的hidden_states的shape的相同的

   hidden_states -> Norm -> hidden_states

   其实没必要把hidden_states理解的那么悬,就当它是个中间变量就可以了

     Layer里面都有什么呢?我们点进去Layer里面就能看到

用code去探索理解Llama架构的简单又实用的方法,llama

     包含了我们在Transfomer里学到的attention层,MLP层,LayerNorm这些层

     继续往下

用code去探索理解Llama架构的简单又实用的方法,llama

     我们可以看到首先定义了残差,然后hidden_states在没过layer之前就先被Normal了一下(这个知识点以前也讲过,Llama RMS LN是前LN),然后过attetion,过MLP,最后hidden_states=residual+hidden_states, 这样就把位置编码啥的也都带过来了

     然后我们点击进入attetion这块,看看它是咋做的

用code去探索理解Llama架构的简单又实用的方法,llama

      这块其实感觉都不用讲了,我觉得全部代码就这块写的逻辑是最清楚的

用code去探索理解Llama架构的简单又实用的方法,llama

,QKV矩阵就是下面前三个线性层,然后分别主管生成qkv,上面的参数也解释了多头,和多头dim是咋算出来的,GQA咋算,这块代码写的实在清晰,属实没啥可说的

       最后看一眼MLP层,就是FFN

用code去探索理解Llama架构的简单又实用的方法,llama

      这一层是由3个线性层组成的gate+up+down,和标准transfomer的FFN是真不一样,主要有两点不同:

1- 原始transfomer是由两个线性层组成,这里有3个,原因就在于 SwiGLU 激活函数比类似 ReLU 的激活函数,需要多一个 Linear 层(gate)进行门控,所以你说SwiGLU是比ReLU效率高了,还是低了呢?

用code去探索理解Llama架构的简单又实用的方法,llama

(当然这个门控可以并行操作)

2- 原始Transfomer第一个线性层先将维度映射为4h维,第二个线性层再映射回h维,接着进行激活函数操作。而llama则是将原有4h变成一个常量作为输入,且计算方式也略有不同,可能是因为4h这个说法如果模型太大会罩不住,就用一个常量来代替了(我瞎猜的)

        这基本网络就讲完了,其实大家看看也没啥玩意,比较简单

      再比如说我们像看一下Llama是咋做下游任务的,modeling里面有2个,我们挑CLM任务(主管生成的任务,CasualLM)来看

用code去探索理解Llama架构的简单又实用的方法,llama

     如上图所示,就是在Llama的基础模型之上,加了一个线性层

     然后我们展开LlamaForCausalLM

用code去探索理解Llama架构的简单又实用的方法,llama

      可以看到它包含很多内容,这里面重点肯定还是forward(前向),我们就看一下它的前向是怎么进行的,输入是啥,输出是啥?

用code去探索理解Llama架构的简单又实用的方法,llama

      我们先看forward输入部分,要求输入的参数和前面都一样唯一的区别就是Label

  • Labels:没法解释,就是字面上的Labels

    用code去探索理解Llama架构的简单又实用的方法,llama

    用code去探索理解Llama架构的简单又实用的方法,llama

     输出这块我们就关注hidden_states就行了,这也是最重要的

用code去探索理解Llama架构的简单又实用的方法,llama

      然后hiden_states和你的labels进行匹配求交叉熵损失,最后损失最小的就是最高概率生成的token 

      下面那个文本分类的其实也是一样的,只不过它计算Loss的时候会有说明,单标签就是回归任务,多标签就变分类任务了

用code去探索理解Llama架构的简单又实用的方法,llama

     通过这些简单的方法,就能把读者们把以前理解不太透彻的网络模块都理一遍,加深印象      

     本章完

用code去探索理解Llama架构的简单又实用的方法,llama文章来源地址https://www.toymoban.com/news/detail-828937.html

到了这里,关于用code去探索理解Llama架构的简单又实用的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LLM微调(二)| 微调LLAMA-2和其他开源LLM的两种简单方法

    本文将介绍两种开源工具来微调LLAMA-2。         AutoTrain是一种无代码工具,用于为自然语言处理(NLP)任务、计算机视觉(CV)任务、语音任务甚至表格任务训练最先进的模型。 核心参数含义 : llm : 微调模型的类型 — project_name : 项目名称 — model : 需要微调的基础模型

    2024年02月04日
    浏览(34)
  • 微调 Code Llama 完整指南

    今天这篇文章将向大家详细介绍如何对 Code Llama 进行微调,让它变成适合 SQL 开发的有利工具。对于编程开发任务,经过适当微调后的 Code Llama 的性能通常都会比普通的 Llama 强很多,特别是当我们针对具体任务进行优化时: 使用 b-mc2/sql-create-context 这个文本查询及其对应的SQ

    2024年02月04日
    浏览(33)
  • “私密离线聊天新体验!llama-gpt聊天机器人:极速、安全、搭载Llama 2,尽享Code Llama支持!”

    一个自托管的、离线的、类似chatgpt的聊天机器人。由美洲驼提供动力。100%私密,没有数据离开您的设备。 https://github.com/getumbrel/llama-gpt/assets/10330103/5d1a76b8-ed03-4a51-90bd-12ebfaf1e6cd “私密离线聊天新体验!llama-gpt聊天机器人 Currently, LlamaGPT supports the following models. Support for runnin

    2024年02月04日
    浏览(32)
  • Code Llama: Open Foundation Models for Code

    本文是LLM系列文章,针对《Code Llama: Open Foundation Models for Code》的翻译。 我们发布了Code Llama,这是一个基于Llama 2的大型代码语言模型系列,提供了开放模型中最先进的性能、填充功能、对大型输入上下文的支持,以及编程任务的零样本指令跟随能力。我们提供多种风格以涵盖

    2024年02月07日
    浏览(38)
  • Code Llama 简介:编码未来的综合指南

    在不断发展的技术领域,Meta 推出的 Code Llama 标志着一次重大飞跃。这种最先进的大型语言模型 (LLM) 不仅仅是开发人员武器库中的另一个工具;它也是开发人员的工具之一。它改变了游戏规则。让我们深入了解 Code Llama 提供的功能、它与DemoGPT的合作,以及它对未来编码的潜力

    2024年02月09日
    浏览(38)
  • 英伟达 nvidia 官方code llama在线使用

    新一代编程语言模型Code Llama面世:重新定义编程的未来 随着人工智能和机器学习技术的迅速发展,我们现在迎来了一款革命性的大型编程语言模型——Code Llama。该模型是基于Llama 2研发的,为开放模型中的佼佼者,其性能达到了行业领先水平。 模型特点与亮点 Code Llama系列提

    2024年02月08日
    浏览(39)
  • 论文笔记:Code Llama: Open Foundation Models for Code

    Code Llama是开源模型Llama 2在代码领域的一个专有模型,作者通过在代码数据集上进行进一步训练得到了了适用于该领域的专有模型,并在测试基准中超过了同等参数规模的其他公开模型。 链接:https://arxiv.org/abs/2308.12950 机构:Meta AI LLMs在自然语言处理方面已达到高水平,在代

    2024年04月28日
    浏览(23)
  • LLM 系列 | 21 : Code Llama实战(上篇) : 模型简介与评测

    小伙伴们好,我是《小窗幽记机器学习》的小编:卖热干面的小女孩。 个人CSDN首页:JasonLiu1919_面向对象的程序设计,深度学习,C++-CSDN博客 今天开始以2篇小作文介绍代码大语言模型Code Llama。上篇主要介绍Code Llama的基本情况并基于HuggingFace上部署的Demo快速体验下Code Llama的实战

    2024年02月07日
    浏览(32)
  • 探索创新:LLAMA Index - 一个智能数据分析利器

    项目地址:https://gitcode.com/run-llama/llama_index LLAMA Index 是一款强大的数据预处理和分析工具,旨在简化大数据处理过程,帮助数据科学家、分析师及开发者更高效地探索和理解数据。该项目基于Python构建,利用先进的机器学习算法,提供了一套自动化的工作流程,让用户可以轻松

    2024年04月14日
    浏览(31)
  • AIGC生成式代码——Code Llama 简介、部署、测试、应用、本地化

            本文介绍了CodeLlama的 简介、本地化部署、测试和应用实战方案 ,帮助学习大语言模型的同学们更好地应用CodeLlama。我们详细讲解了如何将CodeLlama部署到实际应用场景中,并通过实例演示了如何使用CodeLlama进行代码生成和优化。最后,总结了CodeLlama的应用实战经验

    2024年02月05日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包