大模型Llama架构:从理论到实战课程

kuaidelasi · · 92 次点击 · 开始浏览    置顶

/s/1cYB4MmTJvYeCzBoPpzCFnw 提取码: nhru 在数字化时代,拥有自己的个人智能助手已经不再是科幻小说中的情节了!想象一下,在你的家庭网络中部署一个强大的大语言模型,随时随地与你互动、提供帮助和娱乐——这听起来是不是超级酷?今天,我们就来聊聊如何在群晖NAS上本地搭建这样一个基于Llama 2的聊天机器人,并且通过内网穿透技术实现远程访问。 首先,让我们了解一下为什么这个项目如此吸引人。大多数大语言模型都是在线服务,依赖于云端计算资源。这意味着每次与这些模型互动时,都需要连接到互联网,不仅可能产生额外费用,还可能存在隐私和安全问题。而本地部署的大语言模型则完全不一样——你可以在自己的设备上运行它,享受更快的响应速度、更高的安全性以及更稳定的体验。 当然,要实现这一点并不简单。首先,你需要一台性能强劲的服务器或NAS来支持大语言模型的运算需求。幸运的是,群晖NAS凭借其强大的硬件配置和灵活的操作系统,成为了许多技术爱好者的首选平台之一。接下来,我们将详细介绍如何在群晖NAS上部署Llama 2,并通过内网穿透工具cpolar实现远程访问。 一、LLaMA简介 LLaMA(Large Language Model Meta AI)是由Meta开发的一种大规模语言模型,旨在提高自然语言处理任务的性能。LLaMA基于Transformer机构,并经过大规模数据训练,以便在多种语言任务中表现出色。 LLaMA所采用的Transformer结构和细节,与标准的Transformer结构不同的地方是包括了采用前置层归一化(Pre-normalization)并使用RMSNorm归一化函数(Normalizing Function)、激活函数更换为了SwiGLU,并使用了旋转位置嵌入(RoPE),整体Transformer架构与GPT-2类似。 二、Alpaca模型 Alpaca是斯坦福从Meta的LLaMA 7B微调而来的全新模型(套壳是微调模型,LLaMA是全调的基础模型),仅用了52k数据,性能约等于GPT-3.5。 训练成本奇低,不到600美元。(大模型屌丝化) 在8个80GB A100 上训练了3个小时,不到100美元; 生成数据使用OpenAl的API,500美元。(正常是人工来标注数据,人工的成本很高;这里数据标注使用了OpenAl的接口,问题问ChatGPT3,用它的回答作为标注数据来进行微调,训练出Alpaca模型) 三、 LLamaModel 整体流程图 首先,在transformers仓库中我们可以在transformers/models/llama/modeling_llama.py看到llama的源码,整体代码的流程图如图所示(手画不易,点赞拿图,谢谢各位了~~ LlamaModel类,继承自PreTrainedModel,这个类是所有模型的基类,包含了一些通用的方法,比如保存模型、加载模型、初始化权重等。继承关系为:LlamaModel -> LlamaPreTrainedModel -> PreTrainedModel LlamaModel = nn.Embedding + N*LlamaDecoderLayer :从图中可以看出由一个nn.Embedding和N个LlamaDecoderLayer 堆叠而成,是一个不包含lm_head或者其它头的基础Llama模型 LlamaForCausalLM =LlamaModel + lm_head :通过一个线性层将hidden_size映射到vocabulary_size从而得到logits 根据小学二年级学到的Transformer结构,我们可以清晰地看出Llama的模型架构就是经典的Transformer decoder,我们接下来重点介绍llama与transformer decoder之前的区别和改进。 四、 Vicuna 模型介绍  Vicuna是在LLaMa-13B的基础上使用监督数据微调得到的模型,数据集来自于ShareGPT.com 产生的用户对话数据,共70K条。使用Pytorch FSDP在8张A100上训练了一天。相较于Alpaca,Vicuna在训练中将序列长度由512扩展到了2048,并且通过梯度检测和flash attention来解决内存问题;调整训练损失考虑多轮对话,并仅根据模型的输出进行微调。通过GPT4来打分评测,Vicuna可以达到ChatGPT 90%的效果。并且还提供了可调用的分布式聊天服务FastChat。 五、LLaMa 模型介绍  LLaMa的模型架构使用的是Transformer Decoder结构,但LLaMa在细节上做了一些优化:   1)Pre-normalization   Pre-norm很早就被提出,原生的transformer中使用的是post-norm,也就是在每个子层输出后进行归一化,相比post-norm,pre-norm是在每个子层输入前对输入的数据归一化,pre-norm的训练会更稳定,甚至都可以不需要做warm-up也能很好地训练transformer大模型。除此之外,LLaMa还是用RMSNorm(Root Mean Square Layer Normalization)取代了Layer Norm,RMSNorm是Layer Norm的一种变体,和Layer Norm中减去均值、除以方差的归一化方式不同,RMSNorm是直接除以均方根。   2)SwiGLU激活函数   LLaMa使用SwiGLU激活函数替代了原有的ReLU激活函数。SwiGLU是Swish和GLU两个函数的结合 六、模型结构 与GPT等生成模型类似,LLaMA也只使用了Transformer的解码器,但基于Transformer进行了三个改进: 1. 使用了GPT3的预标准化。为了提高训练稳定性,对每个Transformer子层的输入进行归一化,而不是对输出进行归一化。使用由RMSNorm 归一化函数。 2. 用 SwiGLU 激活函数替换 ReLU 非线性,以提高性能。使用 的维度代替PaLM中的 。 3. 类似GPTNeo,删除了绝对位置嵌入,而是添加了旋转位置嵌入(RoPE)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

92 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传